2016-08-10 38 views
0

我有以下幾點:捕獲用戶輸入

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 - 這是不是很乾。

+0

我相當確定這是不可能的。工作流程可以通過「交互式」觸發,但預計將以非交互式方式運行,並且通常會一次對多臺不同的機器運行。你甚至需要'InlineScript'支持所有PowerShell命令的原因是因爲它是一個不同的環境,所以你可以將這些塊想象成在不同的運行空間中運行。 – briantist

+0

@briantist--我明白了。我想我可以做單獨的工作流程,但是我必須在每一個重複我所有的變量聲明,這似乎很混亂。有關於此的任何提示?現在更新問題。 – RobVious

+0

如果您使用工作流程的唯一原因是爲了並行性,我建議您只使用作業或[PoshRsJob](https://github.com/proxb/PoshRSJob)。 – briantist

回答

1

PowerShell工作流被設計爲無需交互即可運行。每個工作流都按照在單獨的PowerShell實例中運行的作業進行安排。

工作流被設計爲健壯和平行,並允許來自工作流中的人的輸入會增加在執行過程中出現錯誤的風險。

您可以通過使用正常的param關鍵字將參數傳遞到工作流中,這將允許您獲取任何需要的信息以預先執行工作流程。

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

    ... 
} 

另一種方法是不需要交互會想想你如何能檢測何時PowerShell中應該移動到下一個操作,而不是需要一個人來的。