在本文中,将探讨如何将Windows PowerShell与Microsoft.NET库进行集成。PowerShell的一个显著特性是其与.NET Framework库的集成能力。本文将介绍如何在PowerShell脚本中使用.NET类,并展示如何在PowerShell中编写自定义类。这是一系列文章的一部分,如果错过了之前的文章,可以通过以下链接查看。
PowerShell快速指南:
如果已经熟悉了之前的内容,那么就开始吧。
.NET Framework是一个包含公共语言运行时和基础类库的软件框架,提供了许多功能。PowerShell与.NET Framework的2.0、3.0和3.5版本兼容。
System.Windows.Forms命名空间包含了创建基于Windows的应用程序所需的类,这些应用程序充分利用了Microsoft Windows操作系统提供的丰富用户界面功能。
下面是一个PowerShell脚本示例,它将显示一个带有显示消息和退出按钮的Windows窗体。
$psScriptName = "ScriptWinForm.ps1"
$psScriptAuthor = "作者名"
$psScriptDate = "日期"
# 加载.NET命名空间
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
# 创建窗体实例
$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "代码项目"
$objForm.Size = New-Object System.Drawing.Size(350,150)
$objForm.StartPosition = "CenterScreen"
# 添加按键事件
$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") {$objForm.Close()}})
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") {$objForm.Close()}})
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,20)
$objLabel.Size = New-Object System.Drawing.Size(280,40)
$objLabel.Text = "不会说失败了1000次;会说发现了1000种导致失败的方法。——托马斯·爱迪生。"
$objForm.Controls.Add($objLabel)
# 创建按钮
$OkButton = New-Object System.Windows.Forms.Button
$OkButton.Location = New-Object System.Drawing.Size(150,75)
$OkButton.Size = New-Object System.Drawing.Size(75,23)
$OkButton.Text = "好的"
$OkButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($OkButton)
$objForm.Topmost = $True
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
以上脚本将创建一个带有文本标签和按钮的窗体,点击按钮将关闭窗体。
System.Drawing命名空间提供了对GDI+基本图形功能的访问。更高级的功能在System.Drawing.Drawing2D、System.Drawing.Imaging和System.Drawing.Text命名空间中提供。
以下是一个PowerShell脚本示例,它将创建SolidBrush和Pen对象以执行绘图操作。
$psScriptName = "ScriptSystem.Drawing.ps1"
$psScriptAuthor = "作者名"
$psScriptDate = "日期"
# 加载.NET命名空间
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
# 创建窗体实例
$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "代码项目"
$objForm.Size = New-Object System.Drawing.Size(250,150)
$objForm.StartPosition = "CenterScreen"
# 添加按键事件
$objForm.KeyPreview = $True
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") {$objForm.Close()}})
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") {$objForm.Close()}})
# 创建按钮
$OkButton = New-Object System.Windows.Forms.Button
$OkButton.Location = New-Object System.Drawing.Size(150,75)
$OkButton.Size = New-Object System.Drawing.Size(75,23)
$OkButton.Text = "好的"
$OkButton.Add_Click({$objForm.Close()})
$formGraphics = $objForm.createGraphics()
$objForm.add_paint(
{
$myBrush = New-Object System.Drawing.SolidBrush green
$myPen = New-Object System.Drawing.Pen red
$myPen.color = "red"
$myPen.width = 10
$Point1 = new-object Drawing.Point 10, 10
$Point2 = new-object Drawing.Point 100, 30
$Point3 = new-object Drawing.Point 170, 10
$Point4 = new-object Drawing.Point 200, 60
$formGraphics.DrawBezier($myPen, $Point1, $Point2, $Point3, $Point4)
}
)
$objForm.Controls.Add($OkButton)
$objForm.Topmost = $True
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
以上脚本将在窗体上绘制一个贝塞尔曲线。
System.Collections命名空间包含定义各种对象集合的接口和类,例如列表、队列、位数组、哈希表和字典。
以下是一个PowerShell脚本示例,它将创建一个哈希表和一个数组列表,并为它们分配一些值。
$psScriptName = "ScriptSystem.Collection.ps1"
$psScriptAuthor = "作者名"
$psScriptDate = "日期"
### 变量声明 ###
### 哈希表 ###
$DictionaryEntry = new-object system.collections.DictionaryEntry;
$myHashTable = new-object system.collections.hashtable
### 数组列表 ###
$myArrayList = new-object system.collections.ArrayList
## 分配一些值
$myHashTable = @{"" = 1; "代码项目" = 2; "是" = 3; "酷" = 4}
$myArrayList = @{"" = 1; "代码项目" = 2; "是" = 3; "酷" = 4}
foreach($entry in $myHashTable)
{
write-host ($entry.Keys , $entry.Values)
}
foreach($entry in $myArrayList)
{
write-host ($entry.Keys , $entry.Values )
}
以上脚本将输出哈希表和数组列表中的键和值。
Get-Help cmdlet显示有关Windows PowerShellcmdlets和概念的信息。还可以使用"Help {
Microsoft Development Network