Powershell-Get-WmiObject过滤器

时间:2020-10-21 14:02:51

标签: powershell

我需要在远程计算机上获得本地管理员,但只需要显示域用户(具有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

2 个答案:

答案 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
相关问题