Start-Job で PowerShell 5.1 のプロキシ要求を分離する
通常のバックグラウンド ジョブを使って、Windows PowerShell 5.1 の Web 要求をプロセス内の以前のネットワーク変更から切り離します。
Windows PowerShell 5.1 セッションでは、以前のコンポーネントがプロセス内の .NET ネットワーク状態を変更することがあります。通常の Start-Job バックグラウンド ジョブは、後続の Web 操作のために別の PowerShell プロセスを提供します。
$job = Start-Job -ArgumentList $uri, $proxyUri -ScriptBlock {
param($destination, $intermediary)
$response = Invoke-WebRequest -Uri $destination `
-Proxy $intermediary -UseBasicParsing -TimeoutSec 30
$response.Content
}
try {
Receive-Job -Job $job -Wait -ErrorAction Stop
}
finally {
Remove-Job -Job $job
}
uri と proxyUri はアプリケーションが指定する値です。公開 HTTP テストでは、HTTP プロキシ一覧が候補となる中間アドレスを提供します。プロセスを比較するときは、選んだエンドポイントを一定に保ってください。必要なプロキシ資格情報も、想定されたジョブ入力と要求パラメーターを通じて渡します。親プロセスのライブ Web セッション オブジェクトは自動的に再利用されません。
ジョブは独自のセッション状態を持ちます。必要な関数やモジュールはそこで読み込んでください。出力はプロセス境界を越えるため、逆シリアル化された応答が元のライブ オブジェクトと同じように振る舞うと仮定するより、内容を意図的に返すほうが単純です。
Start-ThreadJob は別の実行モデルを使い、同じプロセス分離は提供しません。また、別プロセスでも無効なプロキシ エンドポイントやネットワーク全体のポリシーは修復されません。共有プロセス状態が重要な違いである場合に、この境界を使ってください。