使用 Where-Object 时可能包含空格的匹配字符串
Matching string which might contain whitespace when using Where-Object
我需要一个 PowerShell 脚本来检查特定用户是否属于特定组以及用户是否属于任何这些组。
但是,它不能正常工作。我假设存在关于 $_ -match 'CN=IT Tool ((TST) Users|(PROD) Users)'
的问题,下面的安全组也有空格。
最后,我想通过 Export-CSV 获得输出。
有两组:
IT Tool (TST) Users
IT Tool (PROD) Users
脚本:
$csv = import-csv "c:\tmp\lists.csv"
foreach ($v in $csv) {
$userinput = $v.userinput
Get-ADUser -Identity $userinput -Properties EmailAddress, MemberOf | ForEach-Object {
$testgroups = $_.MemberOf | Where-Object { $_ -match 'CN=IT Tool ((TST) Users|(PROD) Users)' }
if ($testgroups) {
# the user is a member of group IT_Test and/or IT_Prod, get the names of these groups for this user
$groups = foreach ($grp in $testgroups) { (Get-ADGroup -Identity $grp).Name }
$_ | Select-Object Name, SamAccountName, @{Name = 'MemberOf'; Expression = {$groups -join ', '}}
}
else {
# the user is not a member of any IT_Group
$_ | Select-Object Name, SamAccountName, @{Name = 'MemberOf'; Expression = {'Not a member of any Group'}}
}
}
}
您需要转义组名称中的任何文字 (
或 )
,否则这些字符将被解释为分组结构:
$testgroups = $_.MemberOf | Where-Object { $_ -match 'CN=IT Tool (\(TST\) Users|\(PROD\) Users)' }
由于 TST
/PROD
部分是两个可能的组名之间唯一不同的部分,您可以进一步简化模式:
$testgroups = $_.MemberOf | Where-Object { $_ -match 'CN=IT Tool \((TST|PROD)\) Users)' }
要将结果导出到 CSV,只需将循环的输出收集到一个变量,然后将变量内容通过管道传输到 Export-Csv
:
$results = foreach($v in $csv) {
# ...
}
$results |Export-Csv -Path path\to\output.csv -NoTypeInformation
我需要一个 PowerShell 脚本来检查特定用户是否属于特定组以及用户是否属于任何这些组。
但是,它不能正常工作。我假设存在关于 $_ -match 'CN=IT Tool ((TST) Users|(PROD) Users)'
的问题,下面的安全组也有空格。
最后,我想通过 Export-CSV 获得输出。
有两组:
IT Tool (TST) Users
IT Tool (PROD) Users
脚本:
$csv = import-csv "c:\tmp\lists.csv"
foreach ($v in $csv) {
$userinput = $v.userinput
Get-ADUser -Identity $userinput -Properties EmailAddress, MemberOf | ForEach-Object {
$testgroups = $_.MemberOf | Where-Object { $_ -match 'CN=IT Tool ((TST) Users|(PROD) Users)' }
if ($testgroups) {
# the user is a member of group IT_Test and/or IT_Prod, get the names of these groups for this user
$groups = foreach ($grp in $testgroups) { (Get-ADGroup -Identity $grp).Name }
$_ | Select-Object Name, SamAccountName, @{Name = 'MemberOf'; Expression = {$groups -join ', '}}
}
else {
# the user is not a member of any IT_Group
$_ | Select-Object Name, SamAccountName, @{Name = 'MemberOf'; Expression = {'Not a member of any Group'}}
}
}
}
您需要转义组名称中的任何文字 (
或 )
,否则这些字符将被解释为分组结构:
$testgroups = $_.MemberOf | Where-Object { $_ -match 'CN=IT Tool (\(TST\) Users|\(PROD\) Users)' }
由于 TST
/PROD
部分是两个可能的组名之间唯一不同的部分,您可以进一步简化模式:
$testgroups = $_.MemberOf | Where-Object { $_ -match 'CN=IT Tool \((TST|PROD)\) Users)' }
要将结果导出到 CSV,只需将循环的输出收集到一个变量,然后将变量内容通过管道传输到 Export-Csv
:
$results = foreach($v in $csv) {
# ...
}
$results |Export-Csv -Path path\to\output.csv -NoTypeInformation