0

我已經實現了一個PS腳本,可以同時在多個服務器上部署代碼。在這裏,我需要將某個源文件從一臺服務器複製到另一臺。請參見下面的代碼: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博客](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 
} 

這是工作的罰款,如果我硬編碼服務器名稱(在我的本地測試)

由於您使用的是管理員共享,請直接試試這個:

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」'放一個反斜槓。你所指的位置在bin下面,所以''\\ iwdflO1 \ C $ \ Deploy \ bin \「'這應該可以解決你的問題。 PS無法挑選源路徑 –

+0

這似乎是合乎邏輯的事情。如果你正在使用管理共享,那你爲什麼使用invoke?直接你可以使用複製項目嗎? –

相關問題