我有两个PS脚本(1个主脚本,1个作为模块)。
主脚本使用如下代码:
Write-Host "Press Y to continue"
Execute (ConstructSshSessions)
其中Execute
是一个函数,要求问题继续并在函数ConstructSshSessions
中执行脚本。如果用户未键入Y
,则主脚本会跳过函数ConstructSshSessions
。
模块使用如下代码:
Function Execute($function)
{
$response = read-host
Write-Host "You typed: $response"
if ($response -eq "Y")
{
$function
}
Remove-Variable response
}
当我执行代码Excecute (ConstructSshSession)
时,它首先运行创建SSH会话的脚本,然后要求用户继续。所以这显然不是我的意图,但我没有看到错误。
我希望它询问用户是否可以继续,然后执行作为参数发送到函数Execute
的脚本。
答案 0 :(得分:1)
我不建议将实际读取响应的响应提示分开。我不建议将函数名称传递给某些Exec
- 就像调用例程一样。
将确认例程包装在一个返回布尔值的函数中,并调用该函数作为if
语句的条件。
function ConfirmStep($msg) {
$title = 'Confirm Step'
$yes = New-Object Management.Automation.Host.ChoiceDescription '&Yes'
$no = New-Object Management.Automation.Host.ChoiceDescription '&No'
$options = [Management.Automation.Host.ChoiceDescription[]]($no, $yes)
$default = 1 # $yes
[bool]$Host.UI.PromptForChoice($title, $msg, $options, $default)
}
if (ConfirmStep "Construct SSH sessions?") {
ConstructSshSessions
}