正如你所猜測的問題是,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)