リモートコンテキストで実行されるスクリプトを作成するためのベストプラクティスにはどのようなものがありますか?
たとえば、 $Profile
リモート実行中に組み込みのvarが存在しないことを発見しました。
リモートコンテキストで実行されるスクリプトを作成するためのベストプラクティスにはどのようなものがありますか?
たとえば、 $Profile
リモート実行中に組み込みのvarが存在しないことを発見しました。
構成されていないという1つの主な違いを発見しました$profile
。
ここにMSDNに埋め込まれているのは、リモートPowerShellに関するいくつかのFAQですget-help about_Remote_FAQ
。
「私のプロフィールはどこにありますか?」(へー)それは説明します:
たとえば、次のコマンドは、$sのセッションでローカルコンピューターからCurrentUserCurrentHostプロファイルを実行します。
invoke-command -session $s -filepath $profile
次のコマンドは、$sのセッションでリモートコンピューターからCurrentUserCurrentHostプロファイルを実行します。$ profile変数は設定されていないため、コマンドはプロファイルへの明示的なパスを使用します。
invoke-command -session $s {. "$home\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"}
影響を与える可能性のあるもう1つの違いは、コマンドによって返される.NETオブジェクトが直接返されるのではなく、リモートで実行して返すと、ネットワーク上でシリアル化および逆シリアル化されることです。多くのオブジェクトはこれをうまくサポートしますが、サポートしないものもあります。Powershellは、「フックアップ」されなくなったオブジェクトのメソッドを自動的に削除します。これらは基本的にデータ構造ですが、などの一部のタイプではメソッドを再フックしますDirectoryInfo
。
通常、これについて心配する必要はありませんが、パイプを介して複雑なオブジェクトを返す場合は、...
スクリプト ブロックは、通常のようにクロージャーとしては機能しません。
$var = 5
$sb={ $var }
&$sb # 5
Start-Job $sb | Wait-Job | Receive-Job # nothing