我有一个似乎无法解决的简单问题。我需要知道哪些服务器仍在运行服务器 2008/R2。
我知道 Win32_OperatingSystem
的 Name
属性包含我正在查找的信息。我希望能够针对 OU 中的服务器集合运行 Get-WmiObject
。
我遇到两个问题:
我不知道如何将
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
我的临时解决方法:我能够创建一个包含服务器名称列表的 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/