在powershell中从输出中隔离一列

时间:2015-05-21 04:47:23

标签: powershell active-directory

早上好。 我试图在我的工作中避免使用GUI来练习PowerShell,我的日常任务之一就是检查用户是否被添加到正确的组中 所以我使用的是cmdlet:

get-aduser $username -Properties memberof | select -expand memberof

我正在获取用户所在群组的列表。 但我明白了:

CN=GroupName,OU=OU,OU=another OU,etc... 

我希望它只是输出CN值 如果我必须在bash中这样做我会grep它,有没有办法在powershell中“grep”?或隔离CN所以它只会输出?

1 个答案:

答案 0 :(得分:1)

很简单,只需在命令的Select部分创建一个属性:

get-aduser $username -Properties memberof | Select -expand memberof | select @{n='GroupName';e={$_.split(',')[0].Substring(3)}} -expand GroupName

接受Memberof属性,将其拆分为逗号,获取该分割中的第一项,并获取跳过前3个字符的子字符串。然后,它将该值分配给GroupName属性,并展开该属性。

或者,您可以使用RegEx匹配,并在ForEach循环中返回匹配项。

get-aduser $username -Properties memberof | Select -Expand Memberof |Where{$_ -match "CN=(.*?),"} | ForEach{$Matches[1]}

或者使用第一个代码中使用的相同方法解析ForEach循环中的值。

get-aduser $username -Properties memberof | Select -expand memberof | ForEach {$_.split(',')[0].Substring(3)}