【发布时间】:2020-05-02 18:42:16
【问题描述】:
我有一些 powershell 代码来尝试跨网络设备复制图像文件。但是,如果目标存在部分,脚本总是失败。运行脚本的用户拥有文件路径的完全权限。
但是 Powershell 每次都找不到目标文件夹。这是脚本:
$Servers = (@"
PCLIST01
PCLIST02
PCNAME03
PCLIST04
"@ -split "`r`n").Trim()
$Source = '\\SERVER\Folder name\subfolder\100 Project Name\moneydreams.jpg'
$Destination = 'C:\ProgramData\Program Folder Name\Subfolder for Program\HTML\' -replace "C:","c$"
$Logfile = "\\SERVER\Folder name\subfolder\100 Project Name\Failed.log"
If (!(Test-Path $Logfile)) { Remove-Item $Logfile}
New-Item $Logfile -ItemType File
ForEach ($Server in $Servers) {
Try {
If (!(Test-Path "$Server\$Destination" )) {
ROBOCOPY "$Source" "\\$Server\$Destination" /LOG:copylog.log
}
Else {
Add-Content $Logfile "Folder does not exist on $Server , \\$Server\$Destination"
}
} Catch {
Add-Content $Logfile "$Server - $($_.Exception.Message)"
}
}
代码在 If (!(Test-Path "$Server\$Destination" )) 处失败。 奇怪的是,如果我在 $logfile 上执行测试路径,它也会失败,但是文件会使用 Add-Content 表示法更新! 需要注意的是,我确实尝试在文件路径中使用反引号 ` 来查看是否存在空格问题,但并没有解决问题。
我不明白为什么它无法找到目标文件夹并更新!
【问题讨论】:
-
你为什么否定目标文件夹的检查?
-
... 并且您也否定了对日志文件的检查,但是如果它不存在则尝试将其删除。
-
您在
Test-Path调用中查看过您正在测试的内容吗?我看不到您在哪里添加所需的 unc 前缀。所以你似乎最终得到PCLIST01\c$\...而不是\\PCLIST01\c$\... -
这可能是我的第一个 powershell 文件,所以我想尽我所能。我在下面使用了 Theo 的信息并稍作更改,现在可以正常工作了。
标签: powershell copy