概述
写下本篇文章源于参加Tech.Ed的一场关于Window PowerShell的课程。虽然以前也常常关注,但从没有亲自体验过。Windows PowerShell 是一种新的命令行外壳和脚本语言,用于进行系统管理和自动化任务,它创建在 .NET Framework 的基础上,可以使 IT 专业人员和开发人员控制和自动完成Windows 和应用程序的管理。更为强大之处在于它能够调用.NET Framework中的类库,能够与COM、ADO、XML等交互。在本文中让咱们一块儿来体会一下回归Doc操做的快感,进入强大无比的Windows PowerShell世界。
在Windows PowerShell中包括了:
1. 129 个命令行工具(称为“cmdlet”),用于执行常见系统管理任务,如管理服务、进程、事件日志、证书、注册表以及使用 Windows Management Instrumentation (WMI)。
2. 采用标准命名约定和通用参数的命令行工具,易于掌握和使用;以及用于对数据和对象进行排序、筛选以及格式设置的简便工具。
3. 对现有脚本语言、现有命令行工具以及多种 Windows 版本的支持,其中包括 Windows XP、Windows Server 200三、Windows Vista 以及 Windows Server 2008。
4. 方便的功能,使用户可以浏览数据存储(如注册表和证书存储),就像面对文件系统同样。
5. 用于管理位于不一样存储中以及采用不一样格式的 Windows 数据的标准实用程序,这些数据包括 Active Directory (ADSI)、Windows Management Instrumentation (WMI)、组件对象模型 (COM) 对象、ActiveX 数据对象 (ADO)、HTML 和 XML。
6. 在命令行进行的高级表达式分析和 .NET 对象处理,其中包括对对象进行流水线处理以帮助提升 IT 专业人员的工做效率。
7. 可扩展的接口,使独立软件供应商和企业开发人员可以构建自定义 cmdlet 以知足特有的应用程序和系统管理要求。
简单示例
在开始以前,先来看一个简单的示例,在.NET中获取当前系统全部进程的一段代码:
static void Main(string[] args)
{
Process[] proceses = Process.GetProcesses();
foreach (var item in proceses)
{
Console.WriteLine(item.ProcessName);
}
Console.ReadLine();
}
很是简单的一段代码,直接获取全部进程并显示出它们的名称,以下图所示:
在安装完Windows PowerShell以后,能够看到它的界面与经常使用的命令行界面很是类似。如今再使用Windows PowerShell来获取一下当前系统全部的进程,只有一个命令就能够完成:
Get-Process
输出以下图所示:
PowerShell命令
在Windows PowerShell中,内置了129个命令供咱们使用,这些命令称之为“Cmdlet”。除了不少在Dos中的命令继续可使用以外,还有PowerShell内置的一些命令。每一个命令由两部分组成,前半部分表示动做,后半部分表示动做的标的,如Get-Help、Get-Command、Write-Host等。在Windows PowerShell中输入命令时,不须要输入所有名称,能够只输入其中几个关键字,PowerShell会自动匹配,如只输入get-he,而后按下“Tab”键,屏幕上就能够出现完整的Get-Help命令。
Get-Help、Get-Command是PowerShell中很是重要的两个命令,能够获取帮助和获取全部的命令列表,如输入:
Get-Command
结果以下图所示,列出了全部的命令:
与.NET Framework交互
Windows PowerShell更强大的地方在于它能够访问.NET Framework的类库,咱们可使用New-Object命令来建立一个.NET Framework中的类实例,并保存在变量中,以下面的命令:
$d = New-Object -TypeName System.DateTime
这里使用New-Object来建立一个DateTime对象,使用-TypeName指定类型名称,建立的对象保存在$d变量中,输出结果以下图所示:
除此以外,还可使用-ArgumentList来指定参数,以下图所示:
与COM交互
使用Windows PowerShell还能够彻底与COM交互,这使的Windows PowerShell的功能更增强大,有了上面前面提到的访问WMI、与.NET Framework交互,再加上与COM交互,能够说Windows PowerShell几乎无所不能。以下面看一个例子,使用PowerShell来访问IE,可使用以下命令来建立一个IE的对象,并让它导航到博客园首页:
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Visible = $true
$ie.Navigate("http://www.cnblogs.com")
$ie.Quit()
简单解释一下这段代码,首先建立一个IE的COM对象,并让它显示,而后导航到博客园首页,最后程序退出。以下图所示:
在这个过程当中,你们会看到系统打开了一个IE窗口,而且导航到了博客园。
访问注册表
除此以外,Windows PowerShell还能够实现对注册表的彻底控制,包括查询全部的Entry,或者修改、删除键值等,能够说是一切皆可控制,如使用下面的命令:
Get-ChildItem -Path hkcu:\
输出以下图所示,列出了HKEY_CURRENT_USER下面的信息:
建立别名
在Windows PowerShell中,还容许为命令建立本身熟悉的别名,这样对于某些太长的命令名可使用本身的缩写来表示,或者对于某些不太容易记忆的命令,使用本身喜欢的名字来表示。
Set-Alias gh Get-Help
这里设置gh为Get-Help命令的别名,这样在后面的操做中,当输入gh后,执行的命名就是Get-Help,以下图所示:
输出文件
在Windows PowerShell中,咱们还能够把操做的结果输出到一个文件中,可使用Out-File命令,另外可使用-FilePath来指定输出的路径和文件名,以下命令所示:
Get-Process | Out-File -FilePath C:\temp.txt
如今打开C盘的temp.txt文件,能够看到输出的结果以下所示:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
126 4 13272 10220 47 1204 audiodg
73 4 2936 8080 61 1.05 3580 conime
512 5 2188 4112 59 2.06 532 csrss
511 7 5704 19744 182 93.44 588 csrss
1249 109 127144 157128 561 44.67 6648 devenv
188 8 47088 73332 164 2,020.61 2508 dwm
2261 48 75040 72600 416 341.38 2548 explorer
0 0 0 24 0 0 Idle
664 28 36696 49076 173 14.78 3384 iexplore
969 35 74868 87576 328 43.92 7480 iexplore
404 10 7280 640 96 6.23 2812 kavstart
65 3 1368 3360 46 0.09 316 kissvc
80 5 6592 1012 62 1.28 496 kmailmon
以上所介绍只是Windows PowerShell强大功能的冰山之一角,除此以外,还能够与WMI交互,访问机器设备,对于输出结果格式化等等,这里再也不介绍。
总结
本文中简单介绍了一下Windows PowerShell,相信经过这些介绍你们已经看到了Windows PowerShell的强大之处,并且在微软之后的产品中,都会支持使用PowerShell进行管理。