我有一个我正在编写的脚本,它依赖于导入模块中的函数.由于IO(Web请求),这个脚本需要一段时间,我想为脚本块的数十万次迭代进行并行化.
在尝试了几种不同的方法(由于限制Start-Job和其他方面很少成功)之后,当前的实现依赖于预创建通过创建的powershell"shell"池$shell = [Powershell]::Create().
我必须调用引导shell的模块方法之一(因此它处于正确的状态)中有一个调用Write-Host.当我调用$shell.Invoke()时出现以下错误:
Write-Host:一个命令,提示用户失败,因为主机程序或命令类型不支持用户交互.尝试支持用户交互的主机程序(如Windows PowerShell控制台或Windows PowerShell ISE),并从不支持用户交互的命令类型(如Windows PowerShell工作流)中删除与提示相关的命令.
现在,由于模块是自定义的,我可以删除Write-Host调用,但是当最终用户直接运行时,这会降低用户友好性.switch如果参数为true,我可以创建一个不执行Write-Host的参数,但要做到这一点是很好的工作(可行,但我宁愿不这样做).
Write-Host在这种情况下,我有什么方法可以避免错误吗?我实际上并不关心这种情况下的输入,我只是不想要错误.
x0n*_*x0n 18
使其工作的最快方法是write-host在脚本中定义虚函数,或者在运行脚本之前单独在运行空间中定义它.
$ps.addscript("function write-host {}").invoke()
$ps.commands.clear()
# now you can invoke scripts that use write-host
# feel free to implement a write-host that writes to a log file
Run Code Online (Sandbox Code Playgroud)
就那么简单.您收到该错误的原因是因为程序化调用不期望用户交互.有一些方法可以使这项工作,但它采用不同的API.
小智 6
如果需要输出,可以使用:
$ps.addscript("function write-host($out) {write-output $out}").invoke()
$ps.commands.clear()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12218 次 |
| 最近记录: |