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 внутри исходной папки и поместите его прямо в место назначения.
Надеюсь, поможет.