PowerShellリモートファイル転送8

3506 ワード

背景
ローカルでSCOMに管理パッケージ(MP)を書き終わったら、手動でリモートデスクトップを通して遠隔テストマシンにコピーして、SCOMのコンソールを開けて、MPを導入して、何度も繰り返してから、これらの作業が自動化されることを発見しました。二つのステップに分けます。
PowerShellはリモートマシンにファイルをコピーします。 (重点)Invoke-CommmandコマンドによるMP導入(省略)ステップ1で問題が発生しました。どうやってファイルをパワーシェルを通じてリモートマシンの共有ディレクトリにコピーしますか?前後3つの方法を試しました。
Copy-Intem
Copy-Intemは最も直接的で、欠点は一つの-credentialパラメータがありますが、これは同じ配列のパラメータで、運行後のエラーメッセージが提示されます。
The FileSystem provider supports credentials only on the New-PSDrive cmdlet. Perform the operation again without specifying credentials.
Credentialパラメータを使わないと、ユーザー名とパスワードが違っています。ピットさんも私にユーザー名とパスワードを書く機会がありません。
Copy-Item : The user name or password is incorrect.
これもだめです。それもだめです。死にたいです。ここではCopy-Intemに対して、ここで二つの融通方法を提供します。
事前にパスワードを入力してください
リソースマネージャを開けて、共有ディレクトリ/psp.net/share/にアクセスして、パスワードを入力するように注意してください。また、PowerShell命令のCopy-Intemを実行するには、ユーザーを指定する必要がありません。一日の危険性を保証できます。翌日にコンピュータを再起動する可能性があります。どう自動化しますか?cmdkey.exeを使ってください。
1cmdkey /add:targetname /user:username /pass:passwordマッピングネットワークパス
リモートフォルダとローカルのディスクをマッピングしてアクセスするのがとても便利です。どう自動化しますか?comオブジェクトWScript.Networkを使用してください。
1
2
3
4$netNew-Object -com WScript.Network$drive"Z:"$path"\\pstips.net\logs"$net.mapnetworkdrive($drive$path$true$username$password)Start-Bits Transfer
Start-Bits Transferの利点は同期と非同期をサポートし、プログレスバーが表示されます。したがって、より多くのファイルをダウンロードするために使用されます。例えば、HTTPダウンロード、FTPダウンロード。しかし、テストの結果、共有フォルダへのアクセスはサポートされていません。アップロードします。しかし、このコマンドにはパラメータ-TransferTypeがあります。「Upload」をサポートしています。つまり「HTTP」プロトコル(非FTP)をサポートしてファイルをアップロードしました。具体的には、リモートマシンにIISを配置して仮想ディレクトリupladを新規作成します。以下のコマンドを実行してみます。
1
2
3$source"Test.MP.xml"$target'http://pstips.net/upload/Test.MP.xml'Start-BitsTransfer  $source $target -Credential (Get-Credential) -TransferType Upload実行に失敗しました。エラーメッセージ:
Start-BitsTransfer : HTTP status 405: The method used is not allowed.
明らかにリモートサーバーはuploadをサポートしていません。ステップが足りないからです。
サーバーの追加機能にチェックを付けて、「Background Intelligent Transfer Service(BITS)」と以下の「IIS Server Extension」を有効にします。IISマネージャを再起動し、Other分類で「BITS Uploads」の構成がもう一つ増えました。「クライアントにファイルをアップロードできるようにする」を開いて配置し、アクションバーで変更を適用します。振り向けばStart-Bits Transferを実行し、ファイルをアップロードすれば成功します。
サーバー側に同名のファイルが既に存在している場合、非常に不友好なヒントがあります。バグを計算するべきだと思います。
Access is denied.
Send-File
これは外国人が書いた関数です。使用の場合は、PowerShellを使って遠隔管理している時に、PSSessionを作成しました。このSesionを使ってファイルを転送することを期待しています。ファイルがテキストファイルであれば、ファイルの長さは大きくなく、Invoke-Commmandでファイルの内容を文字列パラメータとしてリモートマシンに伝えることができます。ユーザーは思わず質問します。バイナリファイルならどうすればいいですか?もちろんbase 64文字列が使えます。ファイルが大きすぎると、どうすればいいですか?もちろんファイルをバイトで分割します。これもSend-Fileの原理です。
1
2$sessionNew-PsSession pstips.netSend-File c:\temp\test.exe c:\temp\test.exe $session 
本論文のリンク:  http://www.pstips.net/powershell-transform-file-remotely.html