从powershell工作流捕获用户输入
我有以下资料:从powershell工作流捕获用户输入,powershell,Powershell,我有以下资料: Workflow Test { $message = "Hey" InlineScript{ Write-Output $using:message Read-Host 'Get user input before proceeding.' } InlineScript{ Write-Output $using:message } } Test 我得到的回报是: 提示用户的命令失败,因为主
Workflow Test {
$message = "Hey"
InlineScript{
Write-Output $using:message
Read-Host 'Get user input before proceeding.'
}
InlineScript{
Write-Output $using:message
}
}
Test
我得到的回报是:
提示用户的命令失败,因为主机程序或
命令类型不支持用户交互
是否有任何方法可以告诉工作流在继续之前暂停以供用户输入?我正在使用工作流来支持并行foreach,但我想在操作之间暂停
我可以试试这个:
Workflow Test1 {
$message = "Hey"
InlineScript{
Write-Output $using:message
Read-Host 'Get user input before proceeding.'
}
}
Workflow Test2 {
$message = "Hey"
InlineScript{
Write-Output $using:message
}
}
Test1
// wait for user input
Test2
但是我在那里重复了一些常量-
$message
,这不是很枯燥。PowerShell工作流设计为在没有交互的情况下运行。每个工作流都计划为在单独的PowerShell实例中运行的作业
工作流被设计成健壮且并行,并且允许工作流中间人的输入会增加执行过程中出错的风险。
您可以使用normalparam
关键字将参数传递到工作流中,这将允许您获得提前执行工作流所需的任何信息
workflow DoStuff
{
param([string[]]$Value)
...
}
不需要交互的另一种方法是,考虑如何检测PowerShell何时应继续执行下一个操作,而不是要求人员执行下一个操作。PowerShell工作流设计为在没有交互的情况下运行。每个工作流都计划为在单独的PowerShell实例中运行的作业
工作流被设计成健壮且并行,并且允许工作流中间人的输入会增加执行过程中出错的风险。
您可以使用normalparam
关键字将参数传递到工作流中,这将允许您获得提前执行工作流所需的任何信息
workflow DoStuff
{
param([string[]]$Value)
...
}
另一种不需要交互性的方法是,考虑如何检测PowerShell何时应继续执行下一个操作,而不是要求某人执行下一个操作。我很确定这是不可能的。工作流可以“以交互方式”触发,但应以非交互方式运行,并且通常同时针对多台不同的机器运行。您甚至需要
InlineScript
来支持所有PowerShell命令的原因是因为它是一个不同的环境,所以您可以将这些块视为在不同的运行空间中运行。@briantist-我明白了。我想我可以做单独的工作流程,但是我必须在每一个工作流程中重复我所有的变量声明,这看起来非常混乱。有什么建议吗?正在更新问题。如果使用工作流的唯一原因是为了并行性,我建议只使用作业或。我相当肯定这是不可能的。工作流可以“以交互方式”触发,但应以非交互方式运行,并且通常同时针对多台不同的机器运行。您甚至需要InlineScript
来支持所有PowerShell命令的原因是因为它是一个不同的环境,所以您可以将这些块视为在不同的运行空间中运行。@briantist-我明白了。我想我可以做单独的工作流程,但是我必须在每一个工作流程中重复我所有的变量声明,这看起来非常混乱。有什么建议吗?正在更新问题。如果使用工作流的唯一原因是为了并行性,我建议只使用作业或。