2015-07-20 39 views
2

我對從被成功事件後調用另一個應用程序運行PowerShell腳本工作執行一系列命令:PowerShell的FTP上傳不工作 - 創建零字節文件

  1. 首先,它呼嘯而過指定的文件(ExampleFile
  2. 然後通過FTP刪除了原始
  3. 上傳的壓縮文件到服務器

在FTP過程我的問題開始:一個s它存在於下面 - 在本地系統中正確創建ZIP文件,並在FTP服務器上創建一個ZIP文件,但它的文件大小爲0字節。

從服務器,它看起來像上傳掛起?

因此:第1-3行都正常工作,本地壓縮文件的大小不爲零。

Add-Type -A 'System.IO.Compression.FileSystem'; 
[IO.Compression.ZipFile]::CreateFromDirectory("ExampleFolder\ExampleFile", "ExampleFolder\ExampleFile_Datestamp.zip"); 
Remove-Item -Recurse -Force "ExampleFolder\ExampleFile"; 

$Username = "exampleusername"; 
$Password = "examplepassword"; 
$LocalFile = "C:\Users\example_path\ExampleFolder\ExampleFile.zip"; 
$RemoteFile = "ftp://exampleserver/examplepath2/ExampleFile_Datestamp.zip"; 

$FTPRequest = [System.Net.FtpWebRequest]::Create("$RemoteFile"); 
$FTPRequest = [System.Net.FtpWebRequest]$FTPRequest; 
$FTPRequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile; 
$FTPRequest.Credentials = new-object System.Net.NetworkCredential($Username, $Password); 
$FTPRequest.UseBinary = $true; 
$FTPRequest.UsePassive = $true; 

$FileContent = gc -en byte $LocalFile; 
$FTPRequest.ContentLength = $FileContent.Length; 

$Run = $FTPRequest.GetRequestStream(); 
$Run.Write($FileContent, 0, $FileContent.Length); 
$Run.Close(); 
$Run.Dispose(); 

這讓我非常難過,所以任何想法或想法都很感激。

powershell.exe -nologo -noprofile -command "Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::CreateFromDirectory(\"ExampleFolder\ExampleFile\", \"ExampleFolder\ExampleFile_Datestamp.zip\"); Remove-Item -Recurse -Force \"ExampleFolder\ExampleFile\"; $Username = \"exampleusername\"; $Password = \"examplepassword\"; $LocalFile = \"C:\Users\example_path\ExampleFolder\ExampleFile.zip\"; $RemoteFile = \"ftp://exampleserver/examplepath2/ExampleFile_Datestamp.zip\"; $FTPRequest = [System.Net.FtpWebRequest]::Create(\"$RemoteFile\"); $FTPRequest = [System.Net.FtpWebRequest]$FTPRequest; $FTPRequest.Method = [System.Net.WebRequestMethods+Ftp]::UploadFile; $FTPRequest.Credentials = new-object System.Net.NetworkCredential($Username, $Password); $FTPRequest.UseBinary = $true; $FTPRequest.UsePassive = $true; $FileContent = gc -en byte $LocalFile; $FTPRequest.ContentLength = $FileContent.Length; $Run = $FTPRequest.GetRequestStream(); $Run.Write($FileContent, 0, $FileContent.Length); $Run.Close(); $Run.Dispose(); 

回答

1

你缺少一個電話FtpWebRequest.GetResponse

... 

$Run = $FTPRequest.GetRequestStream(); 
$Run.Write($FileContent, 0, $FileContent.Length); 
$Run.Close(); 

$FTPResponse = $FTPRequest.GetResponse() 

Write-Out $FTPResponse.StatusCode 
Write-Out $FTPResponse.StatusDescription 

How to: Upload Files with FTP

+0

感謝您的迴應!不幸的是,這些添加不成功。我希望我能提供一個錯誤或日誌響應,但第三方通話的性質並沒有給我太多。 ZIP文件看起來像它仍然被創建,但仍然有一個0文件大小。 此外,當我們在PowerShell中逐行運行我們的代碼時,它可以正常工作:寫入文件及其內容 - 只有當我們將它放入應用程序中時,纔會寫入內容。如果有幫助,第三部分是RETS連接器「成功」回調。 再次感謝您的幫助。 – SuperSephy

+0

嘗試刪除'.Dispose'調用,它不應該在那裏(我已經在我的回覆中)。 –

+0

我刪除了$ Run.Dispose()調用,但沒有明顯的效果,不幸的是FTP仍然沒有寫入文件內容。我目前的思路可能是原始問題中存在的嵌套引號中的衝突/中斷,上面的問題經過編輯後添加以反映這兩種格式的完全公開和語法緩解。 – SuperSephy