我有一个powershell脚本,可以使用robocopy将文件从一台计算机复制到另一台UNC。最近,它使用新用户帐户运行,并在目标上获得拒绝访问。重试限制设置为10,所以它在那一点上失败了。问题是命令的返回结果没有显示失败,退出代码为0,因此未捕获故障。下面是完整的日志。您可以在顶部看到使用的选项:(仅更改了服务器名称)(最后一行来自PS命令
Write-Host“Robocopy.exe已完成,代码为$lastexitcode”)
[18:54:04][Step 1/1] Started : Monday, October 8, 2018 6:54:04 PM
[18:54:04][Step 1/1] Source : C:\Source
[18:54:04][Step 1/1] Dest : \\Server\Target
[18:54:04][Step 1/1]
[18:54:04][Step 1/1] Files : *.*
[18:54:04][Step 1/1]
[18:54:04][Step 1/1] Options : *.* /S /E /DCOPY:DA /COPY:DAT /PURGE /NP /R:2 /W:30
[18:54:04][Step 1/1]
[18:54:04][Step 1/1] ------------------------------------------------------------------------------
[18:54:04][Step 1/1]
[18:54:06][Step 1/1] 438 C:\Source
[18:54:06][Step 1/1] 2018/10/08 18:54:06 ERROR 5 (0x00000005) Accessing Destination Directory \\Server\Target
[18:54:06][Step 1/1] Access is denied.
[18:54:06][Step 1/1]
[18:54:38][Step 1/1] Waiting 30 seconds... Retrying...
[18:54:38][Step 1/1] 2018/10/08 18:54:38 ERROR 5 (0x00000005) Accessing Destination Directory \\Server\Target
[18:54:38][Step 1/1] Access is denied.
[18:54:38][Step 1/1]
[18:55:10][Step 1/1] Waiting 30 seconds... Retrying...
[18:55:10][Step 1/1] 2018/10/08 18:55:10 ERROR 5 (0x00000005) Accessing Destination Directory \\Server\Target
[18:55:10][Step 1/1] Access is denied.
[18:55:10][Step 1/1]
[18:55:10][Step 1/1]
[18:55:10][Step 1/1] ERROR: RETRY LIMIT EXCEEDED.
[18:55:10][Step 1/1]
[18:55:10][Step 1/1]
[18:55:10][Step 1/1] ------------------------------------------------------------------------------
[18:55:10][Step 1/1]
[18:55:10][Step 1/1] Total Copied Skipped Mismatch FAILED Extras
[18:55:10][Step 1/1] Dirs : 1 0 1 0 0 0
[18:55:10][Step 1/1] Files : 0 0 0 0 0 0
[18:55:10][Step 1/1] Bytes : 0 0 0 0 0 0
[18:55:10][Step 1/1] Times : 0:01:06 0:00:00 0:01:00 0:00:06
[18:55:10][Step 1/1] Ended : Monday, October 8, 2018 6:55:10 PM
[18:55:10][Step 1/1]
[18:55:10][Step 1/1] Robocopy.exe completed with code 0
即使在这一点上,我唯一的预感是,关于特定错误“访问目标目录”有一些奇怪的地方。
14:08:15 ERROR 5 (0x00000005) Copying File
并且robocopy正确地返回退出代码8,其中FAILED计数= 1。
短暂性脑缺血发作
JS系统
3条答案
按热度按时间fcipmucu1#
我看到这个,意识到这是从2018年-但我觉得我需要回答。这可能会得到零票-但这里说:
1.首先,你应该(如果你还没有)下载Windows版本的Linux/Unix命令,比如“grep”。
注意:因为Windows现在包含了一个GREP函数--你可能不得不将unix命令从“grep”重命名为“fgrep”或者“ugrep”--至少我不得不这样做。
1.你可能需要使用(或者应该使用)“/log:“和“/tee”选项。/log选项显然可以让你创建一个日志文件,但是/tee可以让你在屏幕上看到日志文件。这两个选项都很好用。
一旦robocopy完成-你可以使用grep。
好了-机器复印已经完成了。然后你可以输入:
C:〉fgrep -i“error“
这应该会给予你日志文件中的每一行,其中包含空格包围的单词ERROR。还有一个选项可以列出消息所在的行,如下所示:
C:〉fgrep -in“error“
这里有一个例子:
D:〉fgrep -in“error“robocopy.log
gmxoilav2#
我认为最好的解决方案是避免Robocopy或忽略它的错误处理,只是在运行后比较目录。
9gm1akwq3#
robocopy是一个cmd可执行文件,不会返回$false到powershell,如果这就是你想要的。一个很好的例子是ping命令总是返回退出代码0。你需要利用powershell命令。copy-item是一个很好的开始。
如果你必须使用robocopy,那么你可以把它放到一个变量中,并在字符串中检查响应中的“拒绝访问”等。