【问题标题】:Powershell - Get-ADComputer -properties memberofPowershell - 获取 ADComputer -properties memberof
【发布时间】:2014-11-28 15:10:47
【问题描述】:

我正在尝试查找我们环境中的任何服务器是否尚未应用于特定组。 我有一个组列表,我们用来在特定的白天/夜晚/手动等上修补我们的 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 的服务器。

请有人指出正确的方向。

谢谢。

【问题讨论】:

  • 有人会打败我,但您可以将您的组组合成一个正则表达式过滤器,如答案here。此外,我会缩短您的 If,就像 if($server.OperatingSystem -match "Windows Server 200[38]" 一样,因为它将匹配 2003 年和 2008 年。您在第二个匹配关键字上缺少连字符
  • 也感谢您的评论,每一个提示和建议都有帮助!

标签: powershell powershell-3.0


【解决方案1】:

让我们来解决这个问题:

$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 是 DistinguishedNames 的列表。从Get-AdGroup 获取组名。您可以轻松地使用字符串操作从 dn.xml 中提取名称。我只是觉得这更容易。除了Select-Object 之外,还没有对结果做任何事情,但您可以通过管道输入ForEach-Object 并进行相应的处理。

【讨论】:

  • 感谢您的解释非常有帮助,我想我需要阅读更多关于正则表达式的信息。但这很有效,所以谢谢。
【解决方案2】:

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

|选择域、名称、角色、操作系统版本、IP 地址

【讨论】:

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

    仅提供 2003 和 2008 匹配过滤

    【讨论】:

    • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。 '
    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2018-05-15
    • 2014-05-17
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多