Powershell “机器人疗法”;“拒绝访问”;不返回失败

Powershell “机器人疗法”;“拒绝访问”;不返回失败,powershell,robocopy,Powershell,Robocopy,我有一个powershell脚本,可以使用robocopy将文件从一台计算机复制到另一台UNC。最近,它使用一个新的用户帐户运行,并且在目标上被拒绝访问。 重试限制设置为10,因此在该点失败。 问题在于,该命令的返回并不表明存在故障,并且退出代码为0,因此未捕获故障。 下面是完整的日志。您可以在顶部看到使用的选项:(仅更改服务器名称) ( 最后一行来自PS命令 编写主机“Robocopy.exe已完成,代码为$lastexitcode”) 即使在这一点上,我唯一的预感是“访问目标目录”的特定错误

我有一个powershell脚本,可以使用robocopy将文件从一台计算机复制到另一台UNC。最近,它使用一个新的用户帐户运行,并且在目标上被拒绝访问。 重试限制设置为10,因此在该点失败。 问题在于,该命令的返回并不表明存在故障,并且退出代码为0,因此未捕获故障。 下面是完整的日志。您可以在顶部看到使用的选项:(仅更改服务器名称) ( 最后一行来自PS命令

编写主机“Robocopy.exe已完成,代码为$lastexitcode”)

即使在这一点上,我唯一的预感是“访问目标目录”的特定错误有些奇怪。当我尝试简单地删除文件权限的测试时,会出现错误

14:08:15 ERROR 5 (0x00000005) Copying File
robocopy正确返回退出代码8,失败计数=1

短暂性脑缺血发作


JS

robocopy是一个cmd可执行文件,如果您需要的话,它不会向powershell返回$false。一个很好的例子是ping命令总是返回0的退出代码。您需要使用powershell命令。复制项目是一个良好的开端

如果必须使用robocopy,那么可以将其放入变量中,并检查响应是否为“拒绝访问”等。。在字符串中。 不确定你的代码是什么,或者你在复制什么。。。但是一个想法

$temp = robocopy *.* /s... etc...
if ($temp -match "Access is denied"){"Robocopy failed due to a denial of access"}

但机器人技术并没有失败;它已完成(在“拒绝访问”消息之后继续)。没有列出所需的特定退出代码。您需要写出日志文件,然后检查它,以确定是否发生了您的情况。如果robocopy遇到其他错误,通常它会失败。如果robocopy遇到不同的错误,通常它会失败。E:G:从c:\temp\target中删除所有继承的权限。此命令:robocopy.exe C:\temp\Source C:\temp\target/e/purge/r:2/w:write host“exit code:$lastexitcode”返回以下信息:较旧的3 Fiel.txt 2018/10/10 10 10:46:00错误5(0x00000005)复制文件C:\temp\Source\Fiel.txt访问被拒绝。错误:超出重试限制。退出代码:8关键是机器人技术的行为就是它;你无法改变这一点。如果它没有捕获到您想要的错误,我建议创建一个日志文件(或捕获stdout,如答案所述)并以这种方式检查错误。否,它返回一个退出代码,可通过内置的$lastExitCode在powershell中访问该代码:您可以对$lastexitcode运行if检查,但是如果它退出时是相同的,不管它是否失败,那么您必须执行输出解析技巧。CMD.exe只输出文本。当涉及到powershell错误检查时,可能会导致许多此类问题。
$temp = robocopy *.* /s... etc...
if ($temp -match "Access is denied"){"Robocopy failed due to a denial of access"}