2012-12-03 33 views
1

我有一個PowerShell腳本生成一個文本文件。最後,我想將這個文件複製到Linux服務器上。 從CMD.EXE,我可以使用PSCP(從膩子),它的工作原理和複製文件。 但是從PowerShell交互式地或從PowerShell批處理中,PSCP沒有明顯的效果:沒有錯誤消息且文件未被複制。 即使我運行簡單。\ PSCP.EXE沒有參數,在CMD命令行上顯示選項,但是從PowerShell它什麼都不做。 可以從PowerShell內部使用PSCP嗎?PSCP是否可以與PowerShell一起使用?

回答

2

從PowerShell內部執行程序應該與CMD的工作方式相同,但取決於該程序如何產生其輸出(是否寫入STDOUT,STDERR等),其行爲可能會有所不同。

我一直在使用Rebex's components for FTPS &在.NET應用程序中的SFTP & PowerShell腳本; SFTP包中包含一個SCP類。是的,這需要花錢,但取決於您的使用情況,這可能是值得的。

1

是的 - 大多數任何可執行文件都可以從PowerShell中調用。在這方面沒有什麼特別的pscp.exe。您可能需要與呼叫運營商前言它 - 符號 - &

PS C:\>& "C:\Program Files (x86)\Putty\pscp.exe" -V 
pscp: Release 0.62 

以上是從我的PowerShell提示符下直接輸出。如果您的可執行文件的路徑包含空格,則調用操作符特別有用 - 調用操作符用於告訴PowerShell將被視爲字符串的內容視爲它應該嘗試執行的內容。

包括您正在嘗試執行的完整命令,因爲這將有助於提供更好的答案。如果你沒有得到任何輸出,你可能會遇到PATH變量或其他奇怪的問題。

+0

我試了一個複製命令,與CMD一起工作,沒有參數,我甚至沒有得到選項列表。 –

1

如果在腳本中使用pscsp,例如perl的

  • 無符號

  • 報價這樣的 「我的密碼」

例如

"C:\Program Files\Putty\pscp.exe" -C -p -pw "password" /local_dir/file_to_copy [email protected]:/remote_directory 

在Perl(提防\處於 「串」 轉義字符)

$cmd = q("C:\Program Files\Putty\pscp.exe" -C -p -pw "password" /local_dir/file_to_copy [email protected]:/remote_directory); 

system($cmd); 
0

只是試圖從PSCP PowerShell的自動化。請記住使用pscp的-batch參數,因此,如果您執行類似輸入錯誤密碼的操作,則不會要求輸入。

$Cmd = "pscp -l username -pw password -batch c:\folder\file.txt server:/home/user1" 
Invoke-Expression "& $($Cmd)" 

否則你的腳本就會停下來。

相關問題