powershell - 从 AD OU 获取 WmiObject

标签 powershell active-directory wmi

我有一个似乎无法解决的简单问题。我需要知道哪些服务器仍在运行服务器 2008/R2。

我知道 Win32_OperatingSystemName 属性包含我正在查找的信息。我希望能够针对 OU 中的服务器集合运行 Get-WmiObject

我遇到两个问题:

  1. 我不知道如何将 Get-ADComputer 的输出重定向到 Get-WmiObject -ComputerName 可以使用的内容。我认为 Get-ADComputer 正在输出 Microsoft.ActiveDirectory.Management.ADComputer 类型的对象,而 Get-WmiObject 正在寻找 类型System.Management.ManagementObject。这是我想出的办法,但似乎不起作用。

    Get-WmiObject Win32_OperatingSystem -ComputerName (Get-ADComputer -filter * -SearchBase "OU=Member Servers,DC=Company,DC=Com" | select @{L="ComputerName";e={$_."name"}}) -Property name, csname | select csname, name | Format-Table -AutoSize
    
  2. 我的临时解决方法:我能够创建一个包含服务器名称列表的 CSV。我能够使用 CSV 来运行 Get-WmiObject。但是,该 OU 包含“死”服务器。因此,当我尝试使用来自 AD 的服务器 CSV 列表运行 Get-WmiObject 时,会出现连接超时,并且 PowerShell 会等待一段时间以查看失效的服务器是否会响应。这确实减慢了操作速度,我们正在努力解决这个问题。在此之前,有没有办法只传递将 Test-Connection 传递给 Get-WmiObject 的服务器名称?

    Get-WmiObject win32_operatingsystem -ComputerName (Get-Content C:\Users\user1\Desktop\Servers.csv) -Property name, csname | select csname, name | Format-Table -AutoSize
    

最佳答案

首先选择名称组件,然后将其传递给下一个管道对象(选择-object)

Get-WmiObject Win32_OperatingSystem -ComputerName ((Get-ADComputer -filter * -SearchBase "OU=Member Servers,DC=Company,DC=Com").Name)

注意:-ComputerName:接受字符串对象,因此您不能直接向其传递基本类型对象。

关于powershell - 从 AD OU 获取 WmiObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43055244/

相关文章:

powershell - 无法从Powershell控制台运行Powershell 'runspace'

powershell - 有没有办法通过多个扩展名来过滤 $OpenFileDialog.filter?

windows - 如何检查CD-ROM是真实的还是虚拟的

c# - 如何使用 WMI 防止应用程序在权限检查期间挂起

powershell - 选项 -recurse 有时不适用于 PowerShell cmdlet get-childitem

powershell - 有没有办法在 PowerShell 中的许多函数调用中为命名参数设置默认值?

无需加入域即可通过 Active Directory 进行 Linux 身份验证

c++ - 在 AD 服务器上使用 winldap.h 进行 LDAP 搜索

c# - OU 时间戳 ComObject

c# - 如何从 Hyper-V 集群中删除虚拟机?