Copy-File в scriptblock не может найти путь

Я реализовал PS Script, который развертывает код на нескольких серверах одновременно. Здесь мне нужно скопировать исходный файл с одного сервера на другой. Смотрите код ниже:

for ($i=1; $i -le 5; $i++) {
    $serverName="iwflO" + $i
    $sourceFile="\\iwdflO1\C$\Deploy\bin"
    $destination="\\$serverName\C$\Program Files (X86)\Shian\MyService\bin\"
    $Myblock = {
        Param{$sourceFile,$destination)
         Copy-Item -Force -Recurse $sourceFile -Destination $destination
    }
    $result = Invoke-Command -ComputerName $ServerName -Credential "shian" -ScriptBlock $Myblock -ArgumentList $sourceFile,$destination;
    $result;
}
cd c:\

Он отлично работает для iwflO1, который является корневым сервером, с которого я запускаю скрипт, но для других серверов он выдает ошибку вроде

Не удается найти путь "\iwdflO1\C$\Deploy\bin", поскольку он не существует.

Но если я вошел на iwflO2 или любой другой сервер и нашел путь вручную, он работает нормально.

1 ответ

Я вижу ошибку с блоком:

Вместо этого:

$Myblock={param{$sourceFile,$destination)

copy-Item -Force -Recurse $sourceFile -Destination $destination
}

Сделай это:

$Myblock={param($sourceFile,$destination)

copy-Item -Force -Recurse $sourceFile -Destination $destination
}

Это работает нормально, если я жестко кодирую имена серверов (проверено в моем локальном)

Так как вы используете общий ресурс администратора, попробуйте это:

Copy-Item -Path \\serverA\c$\programs\temp\test.txt -Destination \\serverB\c$\programs\temp\test.txt;

Примечание: вы должны указать файл. В противном случае вы получите-childitem -recurse внутри исходной папки и поместите его прямо в место назначения.

Надеюсь, поможет.

Другие вопросы по тегам