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

PowerShell脚本问题:网络共享日志文件序列号批量匹配失效排查

PowerShell脚本修复:批量匹配网络共享中的擦除日志

原脚本存在三个核心问题,导致无法正常工作:

  • 匹配规则错误:直接用序列号作为文件名筛选条件,只会匹配完全同名的文件,但需求是文件名包含序列号,需要添加通配符。
  • 凭据未实际应用:获取了凭据但未在访问网络共享时使用,权限不足时会直接访问失败。
  • 效率低下:循环中每次都递归遍历整个共享,重复IO操作会拖慢脚本运行速度。

修复后的脚本

# 获取访问网络共享的凭据
$cred = Get-Credential

# 挂载网络共享并绑定凭据,避免权限问题
$driveConfig = @{
    Name        = 'EraseLogDrive'
    PSProvider  = 'FileSystem'
    Root        = '\\domain\share\share\'
    Credential  = $cred
    ErrorAction = 'Stop'
}
New-PSDrive @driveConfig | Out-Null

try {
    # 一次性拉取所有日志文件名,避免循环中重复遍历共享
    $allLogNames = Get-ChildItem -Path 'EraseLogDrive:\' -File -Recurse -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Name

    # 导入待匹配的序列号列表
    $serialList = Import-Csv -Path 'C:\folder\Serials.csv'

    # 逐个匹配序列号并标记结果
    foreach ($entry in $serialList) {
        # 检查是否存在文件名包含当前序列号的日志
        $hasMatch = $allLogNames | Where-Object { $_ -like "*$($entry.Serial)*" } | Select-Object -First 1
        $entry | Add-Member -MemberType NoteProperty -Name Present -Value ($null -ne $hasMatch)
    }

    # 导出匹配结果到CSV
    $serialList | Export-Csv -Path 'C:\folder\results.csv' -NoTypeInformation
}
finally {
    # 确保脚本结束后卸载挂载的驱动器,避免残留
    Remove-PSDrive -Name 'EraseLogDrive' -ErrorAction SilentlyContinue
}

关键修改说明

  • 网络共享权限处理:通过New-PSDrive挂载共享时传入凭据,确保访问网络路径时权限有效,解决无权限访问的问题。
  • 匹配规则修正:使用-like "*$($entry.Serial)*"模糊匹配文件名,只要文件名包含目标序列号即判定为存在。
  • 性能优化:一次性获取所有日志文件名存入变量,后续匹配直接在内存中操作,避免多次遍历网络共享,大幅提升大文件夹下的运行效率。
  • 资源清理:通过try/finally块保证无论脚本成功还是失败,都会卸载挂载的网络驱动器,避免残留系统资源占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:36:14