我需要在远程计算机上获得本地管理员,但只需要显示域用户(具有domain \ prefix的用户)
$admins = Gwmi win32_groupuser –computer computer
$admins = $admins |? {$_.groupcomponent –like '*"Administrators"'}
$admins |% {
$_.partcomponent –match “.+Domain\=(.+)\,Name\=(.+)$” > $nul
$matches[1].trim('"') + “\” + $matches[2].trim('"')
}
$admins = $admins |? {$_.groupcomponent –like '*"Administrators"'}
GroupComponent : \\COMPUTER\root\cimv2:Win32_Group.Domain="COMPUTER",Name="Administrators"
PartComponent : \\COMPUTER\root\cimv2:Win32_Group.Domain="DOMAIN",Name="Domain Admins"
PSComputerName : COMPUTER
当前输出:
计算机\管理员
DOMAIN \ Domain管理员
DOMAIN \ User1
DOMAIN \ user2
我只需要显示域用户
所需的输出:
DOMAIN \ Domain管理员
DOMAIN \ User1
DOMAIN \ user2
我尝试过:
$admins |% {
$_.partcomponent –match “.+Domain\='DOMAIN\',Name\=(.+)$” > $nul
$matches[1].trim('"') + “\” + $matches[2].trim('"')
}
但是单个用户被多次显示
DOMAIN \ User1
DOMAIN \ User1
DOMAIN \ user1
答案 0 :(得分:1)
请,请不要使用TechNet画廊中的意大利面条代码。
好的剧本是写得好的(英文)散文。
Get-WmiObject Win32_GroupUser –Computer PlaceYourComputerNameHere | <# Now, you have all users #>
Where-Object {$_.GroupComponent –like '*"Administrators"'} | <# Now, you have all Administrators #>
Where-Object { $_.PartComponent –match ".+Domain\=""(.+)"",Name\=(.+)$"} | <# Now, you have all domain administrators and you have created two regex groups by (.+) with index 1 and 2 #>
ForEach-Object {"$($Matches[1])\$($Matches[2])"} <# Now, you concatenated the results from regex matches into a single string #>
答案 1 :(得分:0)
想通了
$admins |% {
$_.partcomponent –match ".+Domain\=(.+)\,Name\=(.+)$" > $nul
$matches[1].trim('"') + "\" + $matches[2].trim('"') | Where-Object {$_ -like 'DOMAIN*' }
}
输出:
DOMAIN\Domain Admins
DOMAIN\user1
DOMAIN\User2