我有一个启动后台作业的PowerShell脚本(它使用kubectl进行端口转发):
$forwardjob = Start-Job -ScriptBlock{kubectl port-forward service/db 7125:7125} -Name "Database Port-Forwarder"
这很好用,但是kubectl经常会要求凭证。我想知道在这种情况下我如何捕获和插入一些用户输入?
我的想法是在下面的两行中等待一段时间,直到我们确定有响应,然后检查结果,如果有密码提示,只需输入它。然而,在这一点上,作业总是导致错误(由于缺少输入),作业完成。
$forwardjob = Start-Job -ScriptBlock{kubectl port-forward service/db 7125:7125} -Name "Database Port-Forwarder"
Start-Sleep -Milliseconds 1000
$result = Receive-Job -Job $forwardjob
因此,问题是如何捕获输入提示并正确输入它?
1条答案
按热度按时间hyrbngr71#
在
Start-Job
(PowerShell background job)上下文中,响应外部程序呈现的交互式提示的唯一方法是通过 * 管道*提前发送所有响应 *。这与您在 * 直接 * 调用中自动响应外部程序的交互式提示所使用的技术相同。但是,请注意-与直接调用不同-在使用后台作业时,您根本无法 * 交互式 * 响应交互式提示。
即:
请注意,外部程序可能会(明智地)将其提示 * 消息 * 直接打印到终端(例如,
Enter your password:
),这意味着它们不会 * 显示在后台作业通过Receive-Job
捕获和输出的内容中。以下是独立的、特定于平台的示例,展示了该技术:他们使用平台原生shell来模拟一些处理,然后提示输入“密码”并回显响应,这是通过PowerShell的管道预先提供的:* 也许不用说,以这种方式提供纯文本密码存在安全风险 *。