我有一个我正在编写的脚本,它依赖于导入模块中的函数。由于IO(Web请求),这个脚本需要一段时间,我想为脚本块的数十万次迭代进行并行化。
尝试了几种不同的方法(由于Start-Job
和其他事情的限制而没有成功),当前的实现依赖于预先创建一个PowerShell池和#34; shell"通过$shell = [Powershell]::Create()
创建。
我必须调用一个模块方法来引导shell(因此它处于正确的状态),其中有一个Write-Host
的调用。当我呼叫$shell.Invoke()
时,会发生以下错误:
Write-Host:一个命令,提示用户失败,因为主机程序或命令类型不支持用户 相互作用。尝试支持用户交互的主机程序,例如Windows PowerShell控制台或Windows PowerShell ISE,并从不支持用户交互的命令类型中删除与提示相关的命令,例如 Windows PowerShell工作流。
现在,由于模块是自定义的,我可以删除Write-Host
调用,但是当最终用户直接运行时,这会降低用户友好性。如果参数为true,我可以创建一个不执行Write-Host的switch
参数,但要做到这一点是一项很好的工作(可行,但我不想)。 / p>
在这种情况下,有什么方法可以让Write-Host
没有错误输出?在这种情况下,我实际上并不关心输入,我只是不想要错误。
答案 0 :(得分: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
这很简单。您收到该错误的原因是因为程序化调用不期望用户交互。有一些方法可以使这项工作,但它使用不同的API。
答案 1 :(得分:6)
如果您需要输出,可以使用:
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
答案 2 :(得分:0)