2017-06-12 167 views
0

我試圖在服務器2012中運行下面提到的命令&它從管理員用戶組中拉出用戶。但在服務器2008 R2中,它從整個域拉動在不同的操作系統中運行powershell腳本

Get-WmiObject -Class Win32_GroupUser ` 
| where{$_.GroupComponent -like "*Administrators*"} ` 
|foreach { 
$data = $_.PartComponent -split "\," 
$data[1].Remove(0,5).Replace('"','') 
} 

回答

0

正如你所猜測的問題是,win2008R2只有PS 2.0.x.我認爲該命令where{$_.GroupComponent -like "*Administrators*"}在該版本中不可用,因此它將整個AD作爲後備查詢(這是一種猜測)。

從你的描述,如果你想查詢本地服務器或域,所以我會進入這兩個我不明白(全部都在win2008R2功能(PS版2.0.50727)):

要查詢本地管理員和

#get servers by AD OU 
If (!(Get-Module ActiveDirectory)) { 
    Import-Module ActiveDirectory 
} 
function get-localadmins{ 
    [cmdletbinding()] 
    Param(
    [string]$server 
) 
    $group = get-wmiobject win32_group -ComputerName $server -Filter "LocalAccount=True AND SID='S-1-5-32-544'" 
    $query = "GroupComponent = `"Win32_Group.Domain='$($group.domain)'`,Name='$($group.name)'`"" 
    $list = Get-WmiObject win32_groupuser -ComputerName $server -Filter $query 
    $list | %{$_.PartComponent} | % {$_.substring($_.lastindexof("Domain=") + 7).replace("`",Name=`"","\")} 
} 

get-localadmins 'your_server_name' 

如果你的目標是查詢整個AD那麼你可以使用:

在Windows 2008 R2 SP1它可以產生一個錯誤:System.DirectoryServices.AccountManagement.PrincipalOperationException:錯誤(1301)發生WH列舉這些組。該組織的SID無法解決。

你必須通過微軟在安裝修補程序:https://support.microsoft.com/en-us/help/2830145/sid-s-1-18-1-and-sid-s-1-18-2-cannot-be-mapped-on-windows-based-computers-in-a-domain-environment?wa=wsignin1.0%3Fwa%3Dwsignin1.0

下面的代碼是從這裏取:https://stackoverflow.com/a/8057025/6059896(所有信貸的作者) - 不僅改變變量的名字圖我的編碼風格。

$Recurse = $true 

Add-Type -AssemblyName System.DirectoryServices.AccountManagement 
$context_type = [System.DirectoryServices.AccountManagement.ContextType]::Domain 
$group_principal_identity=[System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($ct,'Administrators') 
$group.GetMembers($Recurse) 
相關問題