我正在尝试查找我们环境中的任何服务器是否未应用于特定组。 我有一个组列表,我们用它来修补我们的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的服务器。
请有人指出我正确的方向。
谢谢。
答案 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
以仅返回您想要的内容,从而提高效率。 MemberOf
是DistinguishedName
的列表。从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}