从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实例中运行的作业

工作流被设计成健壮且并行,并且允许工作流中间人的输入会增加执行过程中出错的风险。

您可以使用normal
param
关键字将参数传递到工作流中,这将允许您获得提前执行工作流所需的任何信息

workflow DoStuff
{
    param([string[]]$Value)

    ...
}

不需要交互的另一种方法是,考虑如何检测PowerShell何时应继续执行下一个操作,而不是要求人员执行下一个操作。

PowerShell工作流设计为在没有交互的情况下运行。每个工作流都计划为在单独的PowerShell实例中运行的作业

工作流被设计成健壮且并行,并且允许工作流中间人的输入会增加执行过程中出错的风险。

您可以使用normal
param
关键字将参数传递到工作流中,这将允许您获得提前执行工作流所需的任何信息

workflow DoStuff
{
    param([string[]]$Value)

    ...
}

另一种不需要交互性的方法是,考虑如何检测PowerShell何时应继续执行下一个操作,而不是要求某人执行下一个操作。

我很确定这是不可能的。工作流可以“以交互方式”触发,但应以非交互方式运行,并且通常同时针对多台不同的机器运行。您甚至需要
InlineScript
来支持所有PowerShell命令的原因是因为它是一个不同的环境,所以您可以将这些块视为在不同的运行空间中运行。@briantist-我明白了。我想我可以做单独的工作流程,但是我必须在每一个工作流程中重复我所有的变量声明,这看起来非常混乱。有什么建议吗?正在更新问题。如果使用工作流的唯一原因是为了并行性,我建议只使用作业或。我相当肯定这是不可能的。工作流可以“以交互方式”触发,但应以非交互方式运行,并且通常同时针对多台不同的机器运行。您甚至需要
InlineScript
来支持所有PowerShell命令的原因是因为它是一个不同的环境,所以您可以将这些块视为在不同的运行空间中运行。@briantist-我明白了。我想我可以做单独的工作流程,但是我必须在每一个工作流程中重复我所有的变量声明,这看起来非常混乱。有什么建议吗?正在更新问题。如果使用工作流的唯一原因是为了并行性,我建议只使用作业或。