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

PowerShell中Copy-Item无异常却复制失败,如何强制抛出异常?

解决Copy-Item无异常但复制未完成的问题

强制抛出异常的配置方法

1. 全局启用终止错误捕获

在脚本开头设置$ErrorActionPreference = 'Stop',让所有命令默认将非终止错误转为终止错误,配合-ErrorAction Stop确保Copy-Item的所有错误都能触发catch块:

$ErrorActionPreference = 'Stop'
Try {
    Copy-item "$UpdateSourceFolder\*" "$UpdateDestinationFolder" -Force -Recurse -Verbose 4>&1 | Add-Content $LogFilePath
    Add-Content $LogFilePath "SUCCESSFULLY COPIED FILE"
}
catch {
    $errorMessage = "复制错误: $($_.Exception.Message)`n调用栈: $($_.ScriptStackTrace)"
    Add-Content $LogFilePath $errorMessage
}
  • 4>&1将Verbose输出重定向到日志,可查看复制过程中每个文件的处理细节,定位被跳过的文件。

2. 逐个文件复制捕获细粒度错误

用Get-ChildItem遍历所有文件(包括隐藏/系统文件),再逐个执行Copy-Item,单个文件的错误会直接触发catch,精准定位问题文件:

$ErrorActionPreference = 'Stop'
Try {
    Get-ChildItem "$UpdateSourceFolder\*" -Force -Recurse | ForEach-Object {
        Copy-Item $_.FullName -Destination $UpdateDestinationFolder -Force -ErrorAction Stop
    }
    Add-Content $LogFilePath "SUCCESSFULLY COPIED FILE"
}
catch {
    $errorMessage = "复制文件 $($_.TargetObject) 失败: $($_.Exception.Message)"
    Add-Content $LogFilePath $errorMessage
}

3. 提前验证共享路径可用性

在复制前先测试共享文件夹的访问权限,排除路径不可达或权限不足的问题:

Try {
    Test-Path "$UpdateSourceFolder" -ErrorAction Stop
    Add-Content $LogFilePath "共享文件夹可正常访问"
}
catch {
    Add-Content $LogFilePath "无法访问共享文件夹: $($_.Exception.Message)"
}

额外排查点

  • 检查共享文件夹的NTFS权限:共享权限允许访问不代表NTFS权限允许读取文件,需确保运行脚本的用户对共享内的文件有读取权限。
  • 确认目标路径存在:若$UpdateDestinationFolder不存在,Copy-Item默认会创建,但可提前用New-Item -ItemType Directory -Path $UpdateDestinationFolder -Force确保路径存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:22:41