powershell get-qadcomputer + wmi查询

时间:2013-07-23 21:07:03

标签: powershell wmi quest

请有人告诉我如何使用

***Get-QADComputer -LdapFilter "(operatingsystem=*server*)"***

在我的下面的脚本中。 (我可以使用它在get-qadcomputer位上失败的文本文件)

***function inventory {
PROCESS {
$os = gwmi win32_operatingsystem -comp $_
$cs = gwmi win32_computersystem -comp $_
$obj = new-object psobject
$obj | add-member noteproperty Name $os.csname
$obj | add-member noteproperty RebootDate $os.ConvertToDateTime($os.LastBootUpTime)
$obj | add-member noteproperty Manufacturer $cs.manufacturer
$obj | add-member noteproperty Model $cs.model
$obj | add-member noteproperty Operating_System $os.caption
$obj | add-member noteproperty Architecture $os.OSArchitecture
$obj | add-member noteproperty Service_Pack $os.ServicePackMajorVersion
write-output $obj
}
}
gc C:\scripts\lastreboot\syn_pc.txt -ErrorAction SilentlyContinue | inventory | Export-Csv c:\scripts\lastreboot\inventory2.csv***

1 个答案:

答案 0 :(得分:0)

您遇到的这个问题是您编写的库存函数设计为直接使用$ _,并且您假设$ _ Variable只是一个字符串。该命令最初起作用是因为您从文件中提取名称列表,该列表为您提供了类型为 [String] 的名称列表,并将此集合/字符串列表传递到管道中库存使用。

但是当使用Get-QADComputer时,你会得到 [Selected.Quest.ActiveRoles.ArsPowerShellSnapIn.Data.ArsComputerObject] 类型的对象,这些对象只是一个名单列表。这些对象有一个名称属性,我假设你真正追求它,以及其他信息。您需要将名称部分拉出并将其传递到管道

所以你有两个选择:

  • 更改库存功能以考虑管道中输入类型的差异(包含公正名称的简单字符串,或具有名称属性且仅使用名称部分的对象)

  • 更改您调用脚本的方式

这是命令,我想你想要

 Get-QADComputer -LdapFilter "(operatingsystem=*server*)" | Select -ExpandProperty Name | inventory | Export-Csv c:\scripts\lastreboot\inventory2.csv

请注意选择-ExpandProperty名称,它接受ADObject,并且只将名称传递到您的广告资源功能所期望的管道中