首页 > 解决方案 > Powershell - 如何从用户所在的组列表中删除尾随空格

问题描述

我已经复制/创建了一个脚本来获取用户所属的组的所有成员,包括嵌套组。但是,我的输出并不完全符合我的要求。

它以两种方式之一进行。要么输出为一个大字符串,看起来不错,但每行都有尾随空格,所以我不能简单地将其复制并粘贴到 AD 中。或者,如果我将 Out-String 更改为使用 -stream,它会出现乱码,但可能允许我修剪空格。

我目前在一个简单的 GUI 中将输出输入到 TextBox。

Function Get-ADUserNestedGroups {
Param
(
    [string]$DistinguishedName,
    [array]$Groups = @()
)

#Get the AD object, and get group membership.
$ADObject = Get-ADObject -Filter "DistinguishedName -eq '$DistinguishedName'" -Properties memberOf, DistinguishedName;

#If object exists.
If($ADObject)
{
    #Enummurate through each of the groups.
    Foreach($GroupDistinguishedName in $ADObject.memberOf)
    {
        #Get member of groups from the enummerated group.
        $CurrentGroup = Get-ADObject -Filter "DistinguishedName -eq '$GroupDistinguishedName'" -Properties memberOf, DistinguishedName;
   
        #Check if the group is already in the array.
        If(($Groups | Where-Object {$_.DistinguishedName -eq $GroupDistinguishedName}).Count -eq 0)
        {
            #Add group to array.
            $Groups +=  $CurrentGroup;

            #Get recursive groups.      
            $Groups = Get-ADUserNestedGroups -DistinguishedName $GroupDistinguishedName -Groups $Groups;
        }
    }
}

#Return groups.
Return $Groups;
}

 Function Display-UserGroups {

#Get all groups.
$Groups = Get-ADUserNestedGroups -DistinguishedName (Get-ADUser -Identity $userSAM).DistinguishedName;

$ResultsTextBox.Text = $Groups | Select-Object Name| Sort-Object name | Out-String

第一种方式的输出如下所示:

组名1(这里八个空格)

组名2(这里八个空格)

第二种方式的输出如下所示:

组名1组名2组名3

谢谢你的帮助!

标签: powershell

解决方案


您需要修剪输出,这可以使用String.Trim方法轻松完成。但是,它只能应用于字符串。$Groups将是一个ADObject类型数组。您将需要返回Name这些对象的值并将该Trim()方法应用于这些值。

($Groups | Select -Expand Name | Sort).Trim() -join "`r`n"

推荐阅读