0

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

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 или на любом другом сервере и вручную ударил по пути его рабочего режима.

+4

Это похоже на проблему с двумя прыжками. Ниже приведен блог [technet blog] (https://blogs.technet.microsoft.com/ashleymcglone/2016/08/30/powershell-remoting-kerberos-double-hop-solved-securely/) с некоторыми работами. – BenH

+0

Взгляните на это и посмотрите, не похоже ли это http://stackoverflow.com/a/23625969/5233410 – Nkosi

+0

как получилось, что проблема с двойным прыжком? –

ответ

0

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

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

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

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

это сделать:

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

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

Это работает нормально, если я жестко прописывать имена серверов (проверено модератором in my local)

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

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

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

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

+0

Спасибо за ответ! Да, я сделал это, но все же столкнулся с тем же вопросом –

+1

еще одна вещь. '' \\ iwdflO1 \ C $ \ Deploy \ bin "' положить обратную косую черту. Местоположение, к которому вы обращаетесь, находится под бином, поэтому '' \\ iwdflO1 \ C $ \ Deploy \ bin \ "' Это должно решить вашу проблему. PS не может выбрать исходный путь –

+0

кажется логичным. Если вы используете административную долю, то почему вы используете invoke? Непосредственно вы можете использовать пункт копирования. –

Смежные вопросы