腾讯云3年/5年主机:点击抢每日限量秒杀名额 | 阿里云主机99元/年:速抢优惠名额 |
腾讯云双十一:点击速抢9999元代金券 | 阿里云双十一:点击速抢5580元满减券 |
腾讯云新客无门槛满减券:限量速抢 | 阿里云活动中心代金券:点击速抢 |
PowerShell 脚本通常会运行直到完成,但构建一种机制以便脚本在完成其预期任务后正常终止可能会很有用。
1、退出基于文本的脚本
如果您的脚本是基于文本的,那么添加终止机制非常简单。只需在 PowerShell 中使用Exit命令就会提示脚本终止。
例如,假设您有一个包含以下命令的脚本:
Write-Host ‘Line 1’
Write-Host ‘Line 2’
Exit
Write-Host ‘Line 3’
该脚本将显示短语“Line 1”和“Line 2”,但永远不会显示“Line 3”,因为 exit 命令会导致脚本在到达“Line 3”命令之前终止。
最后一行代码不执行,因为脚本在到达该点之前终止。
当然,您通常不会在 PowerShell 脚本中的随机点插入 Exit 命令。相反,您可以根据用户输入使用退出命令。例如,您可以显示类似“按 Y 继续或 N 退出”的提示。
用于创建此类提示的代码可能如下所示:
$Prompt = Read-Host 'Do you want to continue? Press Y for Yes or N to exit'
Switch ($Prompt)
{
Y {Write-Host 'The script is continuing'}
N {Exit}
}
Write-Host 'The script executes yet another instruction'
在这种情况下,Read-Host 命令会提示用户输入。如果用户按 Y,则将执行几个Write-Host 命令。如果用户按 N,则脚本终止。
您可以创建一个提示,为用户提供退出脚本的选项。
2、退出基于 GUI 的脚本
正如您所看到的,终止基于文本的脚本很简单 – 只需在所需的终止点插入 Exit 命令即可。不过,让我们看看如何终止基于 GUI 的脚本。
以下是一个简单的基于 GUI 的脚本的源代码:
Add-Type -AssemblyName System.Windows.Forms
# Create the form
$form = New-Object Windows.Forms.Form
$form.Text = “Hello World Popup”
$form.Size = New-Object Drawing.Size(500, 500)
$form.FormBorderStyle = [Windows.Forms.FormBorderStyle]::FixedDialog
$form.StartPosition = [Windows.Forms.FormStartPosition]::CenterScreen
$Form.KeyPreview = $True
$Form.Add_KeyDown({if ($_.KeyCode -eq “Escape”)
{$Form.Close()}})
# Create the label to display “Hello World”
$label = New-Object Windows.Forms.Label
$label.Text = “Hello World”
$label.Font = New-Object Drawing.Font(“Arial”, 14, [Drawing.FontStyle]::Bold)
$label.AutoSize = $true
$label.Location = New-Object Drawing.Point(100, 40)
$label.ForeColor = [System.Drawing.Color]::Black
$Button1 = New-Object System.Windows.Forms.Button
$Button1.Location = New-Object System.Drawing.Size (200,250)
$Button1.Size = New-Object System.Drawing.Size(80,30)
$Button1.Font=New-Object System.Drawing.Font(“Lucida Console”,14,[System.Drawing.FontStyle]::Regular)
$Button1.BackColor = “LightGray”
$Button1.Text = “Exit”
$Button1.Add_Click({
$Form.Close()
})
# Add the label to the form
$form.Controls.Add($label)
$Form.Controls.Add($Button1)
# Display the form
$form.ShowDialog()
该脚本在 GUI 界面中显示“Hello World”一词。它与您之前见过的任何其他 Hello World 脚本的唯一不同之处在于 GUI 还包含一个退出按钮,如下图所示。
这个简单的 Hello World 脚本包含一个退出按钮。
在功能层面上,该脚本非常简单,并且与任何其他基于 PowerShell GUI 的脚本一样工作。我首先加载必要的程序集。从那里,我创建了一个表单对象、一个标签对象(Hello World 文本)和一个按钮对象。然后,我告诉 PowerShell 将标签对象和按钮对象添加到表单并显示表单。
现在我已经概述了脚本的工作原理,让我们检查一下退出按钮。每当您在 PowerShell 中创建按钮对象时,您都可以选择将单击操作与按钮关联。以下是与单击操作相关的命令:
$Button1.Add_Click({
$Form.Close()
})
换句话说,当用户单击“退出”按钮时,PowerShell 只是执行一条指令来关闭表单。通常,这足以终止脚本,但如果您创建了一个运行大量非 GUI 相关指令的高度复杂的脚本,则可能还必须在右括号之前包含 exit 命令。这样做看起来像这样:
$Button1.Add_Click({
$Form.Close()
出口
})
3、退出键终止
脚本中还有一个我尚未讨论的附加功能。我已将其配置为在用户按下键盘上的转义键时终止。此功能是通过创建表单对象部分中的三行代码来实现的。下面是三行代码:
$Form.KeyPreview = $True
$Form.Add_KeyDown({if ($_.KeyCode -eq "Escape")
{$Form.Close()}})
第一行告诉表单监视按键操作。您会注意到这是表单本身的函数,而不是表单上的对象。换句话说,不需要提示用户输入或创建与输入相关的对象。
第二行告诉 PowerShell 我们对哪个键感兴趣。在本例中,我们希望在用户按下 Escape 键时采取操作。
第三行告诉 PowerShell 在按下转义键时要做什么。我们将再次关闭该表单。
正如您所看到的,您可以通过多种不同的方式优雅地终止 PowerShell 脚本。您使用的技术很大程度上取决于脚本是基于文本的还是基于 GUI 的。
版权声明:xxxxxxxxx;
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态