You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本批量复制指定HotFixID文件异常问题求助

问题分析与解决

核心问题

你的脚本出现“复制所有文件”的问题,根源有两个:

  1. HotFixID列表存在格式污染:通过Out-File保存的Get-HotFix输出是表格格式,包含多余的空格、空白行,导致*$hotfix*的匹配逻辑失效,最终误匹配所有文件。
  2. Copy-Item参数搭配错误:当-Path使用通配符C:\KBtest\*时,-Include参数会被忽略——因为Path已经匹配了目录下所有文件,Include的过滤规则无法生效。

修复方案

步骤1:获取干净的HotFixID列表

跳过文件读写的中间步骤,直接从Get-HotFix提取纯HotFixID,彻底避免格式问题:

# 直接获取无格式污染的HotFixID数组
$HotfixList = Get-HotFix | Select-Object -ExpandProperty HotFixID

步骤2:修正Copy-Item调用

把匹配逻辑整合到-Path参数中,确保只复制目标文件:

ForEach ($Hotfix in $HotfixList) {
    # 直接通过Path过滤包含当前KB号的文件
    Copy-Item -Path "C:\KBtest\*$Hotfix*" -Destination "C:\KBtarget" -ErrorAction SilentlyContinue
}

添加-ErrorAction SilentlyContinue可以避免因找不到对应KB文件而抛出错误。

原脚本的快速修复(保留文件读写场景)

如果必须通过文件保存HotFix列表,需要先清理读取到的内容:

# 创建HotFix列表文件
Get-HotFix | Select-Object HotFixID | Out-File "C:\Scripts\CurrentHotfixList.txt"
# 读取并清理内容:跳过前3行+去除空白行+修剪每行空格
$HotfixList = Get-Content "C:\Scripts\CurrentHotfixList.txt" | Select-Object -Skip 3 | Where-Object { $_ -match '\S' } | ForEach-Object { $_.Trim() }
# 复制文件(改用Path匹配)
ForEach ($Hotfix in $HotfixList) {
    Copy-Item -Path "C:\KBtest\*$Hotfix*" -Destination "C:\KBtarget" -ErrorAction SilentlyContinue
}

内容的提问来源于stack exchange,提问作者Dave_1972

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:31:00