我试图查找我们环境中是否有任何服务器尚未应用于特定组。
我有一个组列表,我们使用这些组在特定的白天/晚上/手动等修补我们的 Windows 服务器...,我正在尝试检查我们环境中的任何服务器是否错误地放置在域中并错过了此步骤 - 没有有一个补丁组成员。
到目前为止我有:
$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 个特定的组来管理这些服务器的修补方式。
组1、组2、组3
上面脚本中的每个服务器都应返回包含 group1、group2 或 group3 的服务器。我想返回所有未应用 group1、group2 或 group3 的服务器。
请有人指出我正确的方向。
谢谢。
让我们来处理这个:
$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
s。从中获取组名Get-AdGroup
。您可以轻松地使用字符串操作从 dn 中提取名称。我只是觉得这更容易。没有做过任何事,除了Select-Object
,结果但你可以通过管道输入ForEach-Object
并进行相应处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)