如何在 PowerShell 中确认提示

  1. 在 PowerShell 中使用 -Confirm 开关进行确认提示
  2. 在 PowerShell 中使用 if 语句进行确认提示
  3. 在 PowerShell 中使用 PromptForChoice() 方法进行确认提示
  4. 使用基于函数的方法进行 PowerShell 中的确认提示
  5. 结论
如何在 PowerShell 中确认提示

确认提示的总体想法是创建一个在不同操作之间切换的选项。例如,当用户选择时,脚本应继续运行,当用户选择时,脚本应退出。

PowerShell 可以在执行任何操作之前自动向用户询问确认,使用 -Confirm 开关。本教程将介绍在 PowerShell 中询问用户确认以继续执行任何操作的不同方法。

在 PowerShell 中使用 -Confirm 开关进行确认提示

PowerShell 有一组影响其操作环境的首选项变量,允许您自定义其行为。$ConfirmPreference 是一个首选项变量,决定 PowerShell 在运行 cmdlet 或函数之前是否自动提示您进行确认。

它有助于在运行低、中或高风险的 cmdlet 或函数之前提示确认。由于大多数 cmdlet 和函数的风险为中,因此如果变量的值设置为 High,则不会要求确认。

$ConfirmPreference

输出:

High

您必须在命令中使用 -Confirm 开关以提示用户进行确认。它强制命令在 PowerShell 中显示确认提示。

使用 -Confirm 开关的一个更简单的方法是将其用于 Remove-Item cmdlet,它可以在一个简单的命令中产生一个确认操作。以下命令展示了其用法的例子。

命令:

Remove-Item test.txt -Confirm

输出:

Confirm
Are you sure you want to perform this action?
Performing the operation "Remove File" on target "C:\Users\rhntm\test.txt".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): N

在输出中,-Confirm 开关强制 PowerShell 显示一个确认提示。这种方法简单明了,适用于您想要提示用户简单的'是''否'确认的情况。

在 PowerShell 的 GUI 中,它看起来像这样。

在 PowerShell 中确认切换提示

在 PowerShell 中使用 if 语句进行确认提示

您还可以使用 if 语句并提供继续的条件给用户。例如,以下命令询问用户是否要继续确认。

命令:

$confirmation = Read-Host "Do you want to continue?"
if ($confirmation -eq 'y') {
    Write-Host "Welcome to DelftStack."
}

输出:

Do you want to continue?: y
Welcome to DelftStack.

Read-Host cmdlet 用于读取用户的输入,并将输入存储在变量 $confirmation 中。if 语句检查用户输入($confirmation)是否等于'y',如果为真,则执行指定的操作。

这种方法提供了额外的选项来定制显示给用户的消息以及他们做出选择后发生的事情。

在 PowerShell 中使用 PromptForChoice() 方法进行确认提示

在 PowerShell 中,您还可以使用 PromptForChoice() 方法提示用户确认。它显示一个对话框,让用户从一组选项中选择一个选项并根据他们的选择继续执行操作。

以下命令是一个示例,提示用户输入是/否。我们定义了 $title$question$choices 用于确认提示。

命令:

$title = 'Confirm'
$question = 'Do you want to continue?'
$choices = '&Yes', '&No'

$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
if ($decision -eq 0) {
    Write-Host 'Your choice is Yes.'
}
else {
    Write-Host 'Your choice is No.'
}

这一行代码 $decision = $Host.UI.PromptForChoice($title, $question, $choices, 1) 使用 PromptForChoice() 方法向用户呈现一个对话框。在 if 语句中,它检查存储在 $decision 变量中的值是否等于 0(在 $choices 数组中第一个选项的索引)。

第一个输出:

Confirm
Do you want to continue?
[Y] Yes  [N] No  [?] Help (default is "N"): Yes
Your choice is Yes.

在第一个输出中,用户选择了"是"。结果,输出"您的选择是是。" 被打印。

第二个输出:

Confirm
Do you want to continue?
[Y] Yes  [N] No  [?] Help (default is "N"): No
Your choice is No.

在第二个输出中,用户选择了"否",并且括号中的第二个命令将被执行。因此,"您的选择是否。"被打印。

这种方法提供了更互动和可定制的确认体验,适合复杂场景。

如果您在 PowerShell 的 GUI 版本中运行上述脚本,您可以查看确认对话框。

在 PowerShell 中的 PromptForChoice 确认提示

使用基于函数的方法进行 PowerShell 中的确认提示

您可以创建自定义的 PowerShell 函数,其中包含确认逻辑。这允许您在函数中封装确认逻辑并在脚本中重复使用它们。

命令:

Function Confirm-Action {
    param (
        [string]$Message,
        [scriptblock]$Action
    )
    $confirmation = Read-Host $Message
    if ($confirmation -eq 'y') {
        & $Action
    }
}

Confirm-Action -Message "Do you want to continue?" -Action {
    Write-Host "Action executed."
}

Function Confirm-Action { ... } 这一行定义了一个名为 Confirm-Action 的 PowerShell 函数。该函数接收两个参数:$Message$Action

这一行 $confirmation = Read-Host $Message 使用 Read-Host cmdlet 提示用户输入,并将输入存储在变量 $confirmation 中。$Message 参数指定显示给用户的消息。

if 语句检查存储在 $confirmation 中的用户输入是否等于字符'y'

输出:

Do you want to continue?: y
Action executed.

当您运行该命令时,它将提示用户确认("您要继续吗?"),如果用户选择'y',则执行消息"操作已执行"

结论

在 PowerShell 中,确认提示对于用户控制和安全至关重要。在本文中,我们探索了四种实现确认提示的方法;-Confirm 开关简化了基本的'是/否'提示,带有 Read-Hostif 语句允许自定义,PromptForChoice() 方法提供了高级互动选项,以及使用基于函数的方法创建自定义函数,包括确认逻辑,确保在脚本中的高效和安全用户交互。

我们希望本教程能帮助您了解如何在 PowerShell 中提示用户进行'是/否'确认。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website