在 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 使用另一种执行模型,不提供同样的进程隔离。单独的进程也无法修复无效的代理端点或整个网络的策略。当共享的进程状态才是相关差异时,可以使用这一边界。

相关文章