从powershell工作流捕获用户输入

时间:2016-08-10 20:24:52

标签: powershell

我有以下内容:

Workflow Test {
    $message = "Hey"
    InlineScript{
        Write-Output $using:message
        Read-Host 'Get user input before proceeding.'
    }
    InlineScript{
        Write-Output $using:message
    }
}

Test

我得到的回报:

  

一个命令,提示用户失败,因为主机程序或   命令类型不支持用户交互。

在继续操作之前,有没有办法告诉工作流暂停用户输入?我正在使用Workflows来支持并行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 - 这不是很干。

1 个答案:

答案 0 :(得分:2)

PowerShell工作流旨在无需交互即可运行。每个工作流都被安排为在单独的PowerShell实例中运行的作业。

工作流程设计得健壮且平行,允许来自工作流程中间人员的输入会增加执行过程中出错的风险。

您可以使用常规param关键字将参数传递到工作流程,这样您就可以获得预先执行工作流程所需的任何信息。

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

    ...
}

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