【问题标题】:Automating MS Updates with Powershell使用 Powershell 自动更新 MS
【发布时间】:2015-01-02 17:31:26
【问题描述】:

我正在尝试根据我下载的 KB/MSU 包自动化我的 Microsoft 更新过程。我有一个 WMIC csv 文件,我可以根据简单的 If else 语句安装它。我想使用列表从下载的文件中提取“KBXXXXXX”并将其与已安装的 KB 列表进行比较,然后发现缺少的内容。

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 语句。谢谢你

【问题讨论】:

  • 对于初学者不要这样做$KBUpdatenames = $KBUpdateList | format-table name从不将来自Format-[anything] 的输出分配给变量,因为它会严重破坏输出。 Format-[anything] 用于美观的控制台输出,仅此而已。
  • 很高兴知道...谢谢

标签: powershell text extract filenames


【解决方案1】:

这应该足以满足您的需求。

$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-Table,我将向您推荐我喜欢的关于Format-Taco 的答案。

【讨论】:

  • 这是我得到的错误:方法调用失败,因为 [System.Object[]] 不包含名为“split”的方法。在 C:\scripts\UpdateVM.ps1:53 char:36 + $KBNumberonly = $KBUpdateList.split
  • 哎呀...等等..复制代码错误。 @Tested4Noobs 再试一次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
  • 2022-06-18
  • 2017-11-17
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
相关资源
最近更新 更多