2013-07-23 87 views
0

請可有人告訴我如何在我下面的腳本中使用PowerShell的GET-qadcomputer + WMI查詢

***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

管道我認爲Get-QADComputer在您發佈的代碼中不起作用的主要原因是代碼中沒有Get-QADComputer。 –

+0

對不起,也許我不清楚,當我取代gc C:\ scripts \ lastreboot \ syn_pc.txt --ErrorAction默默繼續與我把它放在第一位失敗 – user1767744

回答

0

你面臨這樣的問題是,你寫的庫存功能被設計爲使用$ _直接,並且假設$ _ Variable只是一個字符串。該命令最初起作用的原因是您從文件中提取名稱列表,該名稱列出了類型爲[String]的名稱,並將此收集/字符串列表傳遞到管道中,以供庫存使用。 [Selected.Quest.ActiveRoles.ArsPowerShellSnapIn.Data.ArsComputerObject]

但使用Get-QADComputer時,你得到的對象是這麼多,不只是一個名稱的列表。這些對象有一個名稱屬性,我假設你真的在追隨其他信息。你需要拉只是名字部分並沿進入管道

所以,你有兩個選擇:

  • 更改庫存功能,以考慮從管道輸入類型的區別(簡單其中包含只是名稱的字符串,或者說有一個名稱屬性,並使用只是名字部分對象)

  • 更改您在其中調用腳本的方式

這裏是命令,我想你想

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

注意選擇-ExpandProperty名稱,它接受ADObject並一起傳遞只有名稱到其庫存函數需要

+0

感謝您的幫助,它是一個夢想!我以前曾嘗試過「選擇姓名」位,但沒有意識到我離得這麼近。非常感謝您的詳細解釋。 – user1767744

+0

很高興我能幫到你。真正的技巧是理解你需要-ExpandProperty,而不僅僅是選擇名稱。選擇名稱仍然會給你原來的對象,但只有選定的屬性(屬性和值)。選擇-ExpandProperty Name刪除對象並僅給出值。 – Schlauge