2015-01-02 91 views
0

我試圖根據我下載的KB/MSU軟件包自動執行我的Microsoft更新過程。我有一個WMIC csv文件,可以根據簡單的If else語句進行安裝。我想使用列表從下載的文件中提取「KBXXXXX」,並將其與已安裝的KB列表進行比較,並發現缺少的內容。使用Powershell自動執行MS更新

KB安裝目錄(WMIC輸出):

KB123456 
KB234567 
KB345678 

下載KB文件列表格式$ KBUpdateList: 名稱

WINDOWS6.1-KB2533552-X64.MSU                      
WINDOWS6.1-KB2533552-X86.MSU                      
WINDOWS6.1-KB2539635-X64.MSU                      
Windows6.1-KB958488-v6001-x64.MSU 

這裏是我有什麼不工作拉KB數:

PowerShell腳本列出所選文件夾下的MSU文件:

$Dir = get-childitem $folder -recurse 
$KBUpdateList = $Dir | where {$_.extension -eq ".msu"} 
$KBUpdatenames = $KBUpdateList | format-table name 
$KBNumberonly = $KBUpdateList.split("-")[1] 

分裂失敗,我無法找到一個解決。我只想返回KBXXXX號碼,以便可以運行隨後的foreach語句。謝謝

+0

對於初學者不要這樣做'$ KBUpdatenames = $ KBUpdateList |格式表名稱「。 __Never__將'Format- [anything]'的輸出分配給變量,因爲它會破壞輸出。 '格式 - [任何東西]'是爲了好看的控制檯輸出,這就是所有。 – Matt

+0

相關提示...謝謝 – Tested4Noobs

回答

0

這應該足夠您正在尋找。

$KBUpdatenames = get-childitem $folder -recurse -Filter "*.msu" | Select-Object -Expand Name 
$KBNumberonly = $KBUpdatenames | ForEach-Object{$_.split("-")[1]} 

使用Get-ChildItem獲得式 「的.msu」 的文件。在大多數情況下,只需查找擴展名,使用-FilterWhere-Object更有效。然後,我們擴大隻是Select-Object

至於在你的代碼,我將把你的答案約Format-Taco,我享受Format-Table的文件的名稱。

+0

這是我得到的錯誤:方法調用失敗,因爲[System.Object []]不包含名爲'split'的方法。 在C:\ scripts \ UpdateVM.ps1:53 char:36 + $ KBNumberonly = $ KBUpdateList.split <<<<(「 - 」)[1] + CategoryInfo:InvalidOperation :(split:String)[], RuntimeException + FullyQualifiedErrorId:MethodNotFound – Tested4Noobs

+0

oops ...堅持..複製代碼錯誤。 @ Tested4Noobs再試一次。 – Matt

+0

謝謝馬特現在工作的很棒! – Tested4Noobs