Я создал следующий блок сценария, который должен найти файл, соответствующий регулярному выражению в пути UNC, и скопировать его в целевую папку:
$ScriptBlock = {
param (
[string]$serverName,
[string]$ip,
[string]$fullPathRegEx,
[string]$target
)
if (!(Test-Connection $ip -Count 1 -Quiet)) {
$msg = "{0} is not responding!" -f $serverName
Write-Host $msg -ForegroundColor red
return
}
$file = Get-ChildItem -Path $fullPathRegEx
if ($file) {
$msg = "Copy-Item {0} {1}" -f $file, $target
Write-Host $msg -ForegroundColor yellow
Copy-Item $file $target
# $cmd = "Robocopy {0} {1} {2} /NJH /NJS /NDL" -f $file.Directory, $target, $file.Name
# Write-Host $cmd -ForegroundColor green
# Invoke-Expression -Command $cmd
$?
}
else {
$msg = "No file matching {0} found in {1}" -f $fullPathRegEx, $serverName
Write-Host $msg -ForegroundColor red
}
}
Он отлично работает при вызове следующим образом:
Invoke-Command -ScriptBlock $ScriptBlock -ArgumentList $server,$ip[$server],$regEx,$targetPath
Но когда я вызываю его через Start-Job, он не копирует файл:
foreach($serverName in $servers.keys)
{
$regEx = '\\{0}\c$\Data\DB-Backup\{1}{2}*.txt' -f $servers[$serverName], $serverName, $date
Start-Job $ScriptBlock -ArgumentList $serverName,$servers[$serverName],$regEx,$targetPath -name $serverName
}
Выход есть, он вызывает сетевой трафик, но целевая папка остается пустой,Я не совсем уверен, произошло ли это раньше, но я также получаю сообщение об ошибке для второго сервера (пока пробовал только с 2), говоря, что целевая папка используется ??
Я пыталсяэто также с robocopy, которые являются закомментированными строками.Я бы даже предпочел robocopy, так как это обеспечивает статус прогресса (все еще нужно выяснить, как разобрать и передать его вызывающей стороне).Но там я получаю похожую ситуацию: он работает, если скрипт-блок вызывается напрямую, но при вызове через start-job он дает мне следующее:
ERROR 123 (0x0000007B) Accessing Destination Directory C:\Users\abv\Documents\DBDumps_20180924\
The filename, directory name, or volume label syntax is incorrect.