
最近,我一直在探索 PowerShell 脚本的潜力,以了解其真正的应用范围。在一个实验中,我尝试构建我自己的 Windows 记事本版本,在此过程中使用了 Microsoft 提供的多个预制对话框,比如打开和保存文件以及选择字体的对话框。
之所以使用 Microsoft 的对话框,是因为它们为我节省了大量工作量。虽然你可以从头创建一个字体选择对话框,但这需要花费大量精力。既然 Microsoft 已经为我们完成了这些工作,何必从零开始呢?本文将向你展示如何在脚本中利用 Microsoft 的对话框。
为 PowerShell 对话框创建一个基础 GUI
首先,需要创建一个基于 GUI 的脚本。我编写了一个简单的 GUI,供我们测试各种对话框使用:
Add-Type -AssemblyName System.Windows.Forms
# 创建表单
$Form = New-Object Windows.Forms.Form
$Form.Text = "Dialog Box Demo"
$Form.Size = New-Object Drawing.Size(1024, 768)
# 显示表单对话框
$Form.ShowDialog()
代码的第一行加载 `System.Windows.Forms` 程序集,这一步至关重要。所有的 GUI 元素都在此命名空间中,因此不加载它无法构建 GUI。此外,Microsoft 的对话框也存储在 `System.Windows.Forms` 命名空间中。因此,使用任何对话框之前,必须加载该程序集。
接下来的代码段定义了一个表单,可以理解为一个窗口。此代码块创建了一个 `Windows.Forms.Form` 对象(基本上是一个空窗口),为窗口分配一个标题并定义窗口的尺寸。在代码中,窗口大小为 1024 x 768 像素,但你可以根据需要调整尺寸。
代码的最后一行显示了屏幕上的表单。窗口在此行执行之前保持隐藏。
探索 Microsoft 对话框
现在我们有一个简单的 GUI,可以了解如何访问 Microsoft 提供的各种对话框。前面提到,这些对话框都属于 `System.Windows.Forms` 命名空间。
在 .NET 中,命名空间是类的集合。这些类及其关联的方法用于执行特定任务。例如,`System.Windows.Forms` 命名空间包含用于创建复选框和显示文本框的类。
要在 PowerShell 中显示对话框,首先要确定可用的对话框以及每个对话框对应的类名称。Microsoft 提供了 `System.Windows.Forms` 命名空间中类的列表:
[https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms)
以下是该命名空间中一些常用的对话框:
– `ColorDialog`
– `CommonDialog`
– `FileDialog`
– `FolderBrowserDialog`
– `FontDialog`
– `OpenFileDialog`
– `PageSetupDialog`
– `PrintControllerWithStatusDialog`
– `PrintDialog`
– `PrintPreviewDialog`
– `SaveFileDialog`
接下来,我们将演示如何在自定义 PowerShell 脚本中使用这些对话框之一。
对话框示例:`ColorDialog` 类
本文中,我们将使用 `ColorDialog` 类(因为它在列表中的第一个)。不过,展示的技巧对所有对话框都适用。
使用对话框的第一步是查看 Microsoft 的文档。你可以访问上述链接,然后点击你感兴趣的类链接获取相关信息。快捷方式如下,为 `ColorDialog` 类的 URL:

当你访问该页面(或其他类的页面)时,会看到 Microsoft 提供了如何使用该类的示例。不幸的是,这些示例用 C# 编写,无法直接嵌入到 PowerShell 脚本中。不过,这没关系,因为显示对话框只需几行代码。
Add-Type -AssemblyName System.Windows.Forms
# 创建表单
$Form = New-Object Windows.Forms.Form
$Form.Text = "Dialog Box Demo"
$Form.Size = New-Object Drawing.Size(1024, 768)
# 创建 ColorDialog 的新实例
$ColorDialog = New-Object System.Windows.Forms.ColorDialog
# 显示表单对话框
$Form.Add_Shown({$ColorDialog.ShowDialog()})
$Form.ShowDialog()
上面的代码块与前面的示例类似,但新增了两行代码。
第一行创建了一个名为 `$ColorDialog` 的变量,并将其设置为 `System.Windows.Forms.ColorDialog` 类型的对象。换句话说,该变量包含了颜色选择对话框。
第二行使用 `$Form.Add_Shown` 显示了对话框,和显示表单的方式相同。最终效果如图 1 所示。

在了解如何显示对话框后,我们可以添加一些控件。在本系列的第 2 部分中,我将演示如何添加代码,以便你可以通过代码打开和关闭对话框。在第 3 部分中,我将解释如何将所选颜色传递给 PowerShell。











