Powershell - Get-ADComputer -properties成员

时间:2014-10-03 14:35:11

标签: powershell powershell-v3.0

我正在尝试查找我们环境中的任何服务器是否未应用于特定组。 我有一个组列表,我们用它来修补我们的Windows服务器在partiular天/夜/手动等...,我试图检查我们环境中的任何服务器是否错误地放在域上并错过了这一步 - 不有一个补丁组成员。

到目前为止,我有:

$servers = get-adcomputer -Filter 'ObjectClass -eq "Computer"' -properties *
foreach ($server in $servers) {
   if($server.OperatingSystem -match "Windows Server 2008" -or $server.operatingsystem match "Windows Server 2003" ) {
   $server.Name, $server.OperatingSystem, $server.memberof
   }
}

上面列出了在我们的环境中运行Windows的所有服务器以及分配给该计算机对象的成员。假设我们有3个特定的组来管理这些服务器的修补方式。

group1,group2,group 3

上述脚本中的每个服务器都应返回具有group1,group2或group3的服务器。我想返回所有应用了group1,group2或group3的服务器。

请有人指出我正确的方向。

谢谢。

3 个答案:

答案 0 :(得分:2)

让我们一起工作:

$groups = @("Terminal Server License Servers","Exchange Trusted Subsystem","Cert Publishers")
$regex = '^({0})' -f ($groups -join '|')
get-adcomputer -Filter {OperatingSystem -like "Windows Server 200*"} -properties * | 
    Where-Object{($_.MemberOf | Get-ADGroup).Name -notmatch $regex} |
    Select-Object Name,OperatingSystem,MemberOf

取出组并将它们变成一个数组。将数组成员加入正则表达式字符串,该字符串将匹配组的全名。将If语句移动到-Filter以仅返回您想要的内容,从而提高效率。 MemberOfDistinguishedName的列表。从Get-AdGroup获取组名称。您可以轻松地使用字符串操作从dn中提取名称。我发现这更容易。除了Select-Object之外,还没有做任何事情,但结果却是ForEach-Object并相应处理。

答案 1 :(得分:-1)

$servers = get-adcomputer -Filter 'ObjectClass -eq "Computer"' -properties * | if($server.OperatingSystem -match "Windows Server 200[38]" | 
% { $_.Server } | select Domain,Name,Roles,OSVersion,IPAddress

答案 2 :(得分:-1)

[System.DirectoryServices.ActiveDirectory.Forest] :: GetCurrentForest()。 if($ server.OperatingSystem -match“ Windows Server 200 [38]” |%{$ _。Server}

|选择域,名称,角色,OSVersion,IP地址

相关问题