2011-09-16 12 views
0

私はかなり面白い問題があります。Powershell FTPアップロードで再開

一部のファイルをFTPアカウントに圧縮してアップロード(再開)するスクリプトを作成しました。ローカル私のマシンでは正常に動作しますが、本番環境で私はこのエラーを取得する:「3」引数(複数可)を「置く」を呼び出す

PS> $ftp.Put($fileStream,$file.name,$true); 

例外:「ファイル「Cが見つかりませんでした:\ ByAndrew \ PowerShellを\ Transactions \ System.IO.FileStream '。 "ラインで

:1つの文字:9

  • $ ftp.Put(< < < < $ファイルストリームは、$ file.name、真$)。ここで

スクリプトです:

$xml = New-Object XML 

$xml.Load(".\settings.xml") 

[void][Reflection.Assembly]::LoadFrom("D:\Work\Projects\ProjectIndyFTP\Bin\Indy.Sockets.dll") 

$ftp = new-object Indy.Sockets.FTP 

$ftp.Host = $xml.list.ftp.server 

$ftp.Port = $xml.list.ftp.port 

$ftp.Username = $xml.list.ftp.user 

$ftp.Password = $xml.list.ftp.pass 

$ftp.ConnectTimeout = 600 

$ftp.Connect() 

$file = Get-Item "D:\Work\Projects\ProjectIndyFTP\TestFolder\TestFiles\testfile5M.bin" 
#$fileStream = $file.OpenRead() 
$fileStream = New-Object System.IO.FileStream($file,[System.IO.FileMode]::Open,[System.IO.FileAccess]::Read,[System.IO.FileShare]::ReadWrite) 
$ftp.Put($fileStream,$file.name,$true); 
$fileStream.Close() 
$ftp.Quit() 
exit 

< < < < < < < < < < < < < < < < < < < < 私はエラーを理解していません。 What's with "ファイル 'C:\ ByAndrew \ PowerShell \ Transactions \ System.IO.FileStream'が見つかりませんでした。 私は 'path \ object'を意味します 誰もこの行動をする前に遭遇しましたか?任意のヒント?

敬具、 アンドリュー


アップデートを:

今日は本番環境から参照されたアセンブリのバージョンを確認しました: [2.0.50727.1433]にMscoree.dll - 20 SP1を.NET ローカルに私は[2.0.50727.3053] - .net 20 sp2 を問題として除外するために、私は.net 20 sp1でマシンを探しました。エラーを再現しました。 - .netを2.0 sp2に更新してチェックしました。同じ問題。だから私は言った。私は "依存"が間違っているとは思わない。

よろしく、 アンドリュー

+0

質問: 'Indy.Socketsです。dllはあなたのプロダクションコンピュータで使えますか?あなたのローカルマシンと同じ場所に、すべてのアセンブリが必要ですか?あなたのローカルマシンの 'C:\ ByAndrew \ PowerShell \ Transactions'パスには何がありますか? 'Indy.Sockets.dll'によって参照されるアセンブリはありませんか? – JPBlanc

+0

はい、このパスを使用できます: "c:\ ByAndrew \ PowerShell \ Transactions \ IndyFTP \ Indy.Sockets.dll" いいえ、ローカルマシンと同じ場所にありません。 ローカルマシンのフォルダを本番環境の別のパスにコピーし、新しいパスと一致するように設定を調整しました。 参照されるアセンブリは "mscoree.dll"です。私はその組立に問題があるとは思わない。私はそれをテストし、うまく見える。 –

答えて

1

なぜあなたはfile.OpenRead()して、次の行に新しいFileStreamオブジェクトを作成します$を呼ぶのですか?また、新しいFileStreamのオーバーロードは、コンストラクタの最初の引数としてFileInfoオブジェクトを使用しません。私はプロダクト/ devの相違点に到達する前に疑わしい行を見ていますが、最初の引数として$ file.FullNameを使用しています。

指示するすべての特別な属性が必要ない場合は、 NETのファイルを開く方法、私はちょうど.OpenRead()メソッドを使用する - それは既にFileStreamオブジェクトを返します。これらのオプションが必要な場合は、OpenRead()行を削除します。

また、あなたの呼び出しの後に$ fileStream.Dispose()呼び出しを含めることをお勧めします.Close() - あるいはDisposeがストリームを閉じるようにする代わりに、これには関連するハンドルも解放するメリットがあります。

+0

答えをありがとう。 "$ file.OpenRead()"は、自分のコード#の前に#コメントがあります。 このエディターは、#で始まる行はサポートしていません。私はそれが自動的に削除されたと思う。 最初に、同じ結果/エラーの "$ file.OpenRead()"メソッドを使用しました。 "$ file.FullName"で試してみますが、同じエラーが発生すると思います。ヒントをありがとう。 –

関連する問題