2015-01-02 62 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