是为了能够测试以查看是否安装了 PowerShell v6(可以),如果是,则为某些 CmdLet 调用该 shell。这将在 PowerShell v5.1 中运行的脚本中调用。我无法完全转移到 v6,因为还有其他依赖项在此环境中尚不可用,但是,v6 对某些 CmdLet 进行了重大优化,从而将操作改进了 200 多倍(具体而言,Invoke-WebRequest调用将导致下载一个大文件 - 在 v5.1 中,一个 4GB 的文件需要 1 小时以上才能下载,在 v6 中,使用同一子网上的相同机器,这将需要大约 30 秒。
但是,我还建立了一组动态参数,用于插入 CmdLets 参数列表。例如,构建的参数列表将类似于:
$SplatParms = @{
Method = "Get"
Uri = $resource
Credential = $Creds
Body = (ConvertTo-Json $data)
ContentType = "application/json"
}
Run Code Online (Sandbox Code Playgroud)
并且运行 CmdLet 通常会按预期工作:
Invoke-RestMethod @SplatParms
Run Code Online (Sandbox Code Playgroud)
在过去的几天里,我查看了这个论坛和其他地方的各种帖子。我们可以创建一个简单的脚本块,它可以被调用并按预期工作:
$ConsoleCommand = { Invoke-RestMethod @SplatParms }
& $ConsoleCommand
Run Code Online (Sandbox Code Playgroud)
但是,尝试在Start-ProcessCmdLet 中传递相同的东西失败了,因为我猜参数哈希表没有被评估:
Start-Process pwsh -ArgumentList "-NoExit","-Command &{$ConsoleCommand}" -wait
Run Code Online (Sandbox Code Playgroud)
结果是: …