Powershell: кажется, что Copy-Item из Start-Job работает, но впоследствии файл отсутствует - PullRequest
0 голосов
/ 24 сентября 2018

Я создал следующий блок сценария, который должен найти файл, соответствующий регулярному выражению в пути 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.
...