(转载)Windows PowerShell 讲座 (1)—指令、重导、别名

Windows PowerShell 讲座 (1)—指令、重导、别名

发布日期: 2007 年 11 月 1 日

作者: 赖荣枢
http://www.goodman-lai.idv.tw

Windows PowerShell 是微软新创的命令列「壳层」和 script 语言,而作为这个系列的第一篇文章,本文除了提及执行环境的建立,也会深入讨论指令与参数的使用与编辑,以及重新导向和别名等功能。

本页内容
安装 Windows PowerShell 1.0 安装 Windows PowerShell 1.0
与 Windows PowerShell 的第一次接触 与 Windows PowerShell 的第一次接触
Cmdlet 及列出其说明 Cmdlet 及列出其说明
指令的参数与用法 指令的参数与用法
指令的输入与编辑 指令的输入与编辑
重新导向 重新导向
别名 别名
总结 总结

Windows PowerShell 可以用在 Windows XP、Windows Vista、Windows Server 2003 和即将于明年推出的 Windows Server 2008(并且也将内建于 Windows Server 2008),而 Exchange Server 2007、System Center Operations Manager 2007、System Center Data Protection Manager V2、System Center Virtual Machine Manager 等软体也会运用 Windows PowerShell 来强化系统管理。

Windows PowerShell 可以在许多 Windows 系统执行,不过有别于 Windows XP、Windows Server 2003 或 Windows Vista,Windows Server 2008 虽然已经内建了 Windows PowerShell,但尚未安装。先让我们说明安装 Windows PowerShell 的方式。

安装 Windows PowerShell 1.0

Windows PowerShell 对 Windows Server 2008 来说,是一项『功能』 ,要安装『功能』,可以利用图形介面的『伺服器管理员』,或者命令列的 ServerManagerCmd。使用 ServerManagerCmd 最重要的是必须知道『功能』或『角色』的 ID,我们可以先查询伺服器是否已经装了 Windows PowerShell,并借此查得 Windows PowerShell 的 ID;这可以利用 -query 参数:

ServerManagerCmd –query

图 1

图 1 是 ServerManagerCmd -query 的执行结果,从中除了可以看出 Windows PowerShell 尚未安装之外,亦可从得知 ID 是 PowerShell,因此就可以利用下列指令来安装;执行之后若成功安装,会出现如图 2 的讯息:

ServerManagerCmd -install PowerShell

图 2

完成安装之后,就可以在『开始』功能表找到执行 Windows PowerShell 的捷径(如图 3),而且『伺服器管理员』也会显现 Windows PowerShell 功能(如图 4)。

图 3

除了命令列的 ServerManagerCmd,图形模式的『伺服器管理员』也可以安装 Windows PowerShell 功能,只要按下如图 4 的『新增功能』:

图 4

就会出现如图 5 的『新增功能精灵』,请点选『Windows PowerShell』再按『下一步』按钮,接著再按下如图 6 的『安装』按钮即可。

图 5

图 6

Windows PowerShell 也能在 Windows XP、Windows Vista、Windows Server 2003 执行,但必须先下载套件再安装,这部分的细节可参考《下载、安装 Windows PowerShell 1.0》。此外,本文讨论的是 Windows PowerShell 1.0,内容不仅适用 Windows Server 2008 内建的 Windows PowerShell 1.0,也适用其他 Windows 版本。

与 Windows PowerShell 的第一次接触

Windows PowerShell 是内含「script 语言」的 Windows「壳层」环境,这个壳层与 Cmd 命令提示字元关系密切,您可以将 Windows PowerShell 视为 Cmd 命令提示字元的延伸,许多 Cmd(甚至 UNIX 指令)指令都可以继续在 Windows PowerShell 执行,而且大部分的命令列工具程式也都能继续在 Windows PowerShell 使用。Windows PowerShell 与 .NET 的关系也相当密切:Windows PowerShell 需要 .NET 2.0 才能执行、Windows PowerShell 的 Cmdlet(等一下会说明)是 .NET 物件,因此综合前述,您可以将 Windows PowerShell 视为 Cmd 命令提示字元的 .NET 延伸版本。

安装 Windows PowerShell 之后,只要双按如图 3『开始』功能表里的 Windows PowerShell 捷径,就可以启动 Windows PowerShell 环境。我也建议您复制一份 Windows PowerShell 捷径到桌面、『快速启动』工具列、或任何您喜好的地方,以便能快速启动 Windows PowerShell 环境。

双按 Windows PowerShell 捷径之后,萤幕上会出现一个看似命令提示字元、但底为蓝色的视窗(如图 7),这就是 Windows PowerShell 的执行环境:您可以在这个视窗输入指令,并且看到执行结果。

图 7

刚才提到 Windows PowerShell 可以视为 Cmd 命令提示字元的延伸,许多 Cmd 或 UNIX 指令都可以继续在 Windows PowerShell 执行,而且大部分的命令列工具程式也都能继续在 Windows PowerShell 使用;您可以试著在 Windows PowerShell 视窗输入您所熟悉的 Cmd 指令或命令列工具程式,例如 cd/chdir、dir、cls、ls,或 ipconfig、甚至是刚才提及的 ServerManagerCmd。此外,不只 Windows Scripting Host 程式可以在 Windows PowerShell 执行,在 Windows PowerShell 环境输入图形介面程式的执行档名,也能启动图形介面程式。类似 Cmd 环境的是,Windows PowerShell 也不分字母大小写,因此 dir 和 Dir 都会视为相同的指令。

Cmdlet 及列出其说明

如同其他的壳层,Windows PowerShell 虽然也内建了若干指令,但重要及有用的功能是来自于外加的工具程式。若以 Cmd 来对照说明:Cmd 虽然内建了若干指令(例如 dir、cls 等),但如果无法执行外加的工具程式(例如 IPConfig、Net、NetSH、ServerManagerCmd 等等),Cmd 就失去价值及扩充的能力了。同样的,Windows PowerShell 也是如此,但不同的是,Windows PowerShell 有自己的工具程式规格,而 Windows PowerShell 的工具程式称为 cmdlet。

Cmdlet 最大的特征,就是其名称是由两个部分所组成,并以横线连结这两个部分:前为动作、后为动作的标的;例如 Get-Help 能取得线上说明、Get-Process 能取得行程资讯。Windows PowerShell 1.0 提供了 129 个 cmdlet,而且也提供了一个可以列出所有 cmdlet 的 cmdlet:Get-Command,这个 cmdlet 会列出所有 cmdlet 的指令类型(都是 Cmdlet)、名称,以及节录的语法说明;如果要完整显示语法说明,需要利用管线的技巧(管线是后续文章的主题,现在暂不说明细节):

Get-Command | Format-List

如果想要知道某个 cmdlet 的使用说明,利用 Get-Help cmdlet 以及以下 3 种方法,都可以达到相同的目的:

Get-Help <cmdlet 名称>

Help <cmdlet 名称>

<cmdlet 名称> -?

以上第 3 种方式最方便,但前两种还可用来显示「概念主题」(所有概念主题都是以 about 开头),例如以下指令会列出 foreach 陈述式的说明(可用在 script 程式):

Help about_foreach

Get-Help(或 Help)还可以透过万用字元列出相关主题,例如:

Get-Help *			→列出所有说明主题
Get-Help set-*			→列出所有 set- 开头的主题
Get-Help *object*			→列出所有名称里有 object 的主题
Get-Help about*			→列出所有概念主题
Get-Help about_redirection		→列出『重新导向』概念主题的说明内容

Get-Help 和 Help 也不是全然相同,例如 Get-Help 会一次显示完所有的说明,因此如果要显示的内容多过视窗所能呈现,您就得以卷动轴往回卷动,才能看到说明内容;而如果内容超过视窗所能呈现,Help 会在显示满一个视窗范围后便自动暂停,等到使用者按下空白键才会显示下一页,或者以 Enter 键显示下一行。

前述 3 种方法所列出的是 cmdlet 的简略说明,有些主题或 cmdlet 还可以利用 Get-Help/Help 的 -detailed 或 -full 参数,列出包含范例的详细或所有说明,而 -examples 参数则可以列出范例;例如:

Get-Help Get-Help -detailed		→列出 Get-Help 的详细说明
Help dir -full			→列出 dir 的完整说明
Help dir -examples			→仅列出 dir 的范例

指令的参数与用法

除了 cmdlet,Windows PowerShell 的指令还包括别名、函式、程式、script 档案,输入指令的同时,有时候必须输入适当的参数。不同类型的指令,其参数的格式亦略有差异。对 Cmdlet 及别名来说,有些参数包含成对的参数名称及参数值,有些参数则只有参数名称或参数值,而参数名称是以短横线作为前置符号;例如以下的 -name dir 就是成对的参数名称(-name)和参数值(dir),-examples 则没有参数值:

Get-Help -name dir -examples

指令的参数分成必要参数和可以省略的选用参数两类,查询指令用法的说明会以一对半形的方括号括住选用参数,必要参数则不会有符号括住;以方括号括住表示可以省略。例如 Get-Help 的用法(节录):

Get-Help [[-name] <string>]
[-component <string[]>] 
[-functionality <string[]>] 
[-role <string[]>] 
[-category <string[]>] 
[-examples] 
[<CommonParameters>]

查询指令的用法时,经常会看到以上用法说明,其中:

一共有 7 个选用参数,并没有必要参数(因为这7个参数都以方括号括住)。

前 5 个参数包含了成对的参数名称和参数值。

前 5 个参数包含了成对的参数名称和参数值。

[<CommonParameters>] 参数只有参数值;这个参数意指每个 cmdlet 都支援的共同参数。

第 1 个参数的参数名称也以方括号括住,表示这个参数名称可以省略,所以我们可以只输入 Get-Help dir。

第 1 个参数的参数值是 <string>,表示这个参数值为字串;以角括号括住,表示必须输入适当的参数值,而不是输入 string。

使用 cmdlet 经常要输入许多参数名称,为了能少按一些按键,Windows PowerShell 提供了一套 cmdlet 的参数名称简略输入法则:

可以尽可能的取其参数名称的前面最短字母来代表参数名称

如果与同一 cmdlet 的其他参数名称混淆,就要多取字母,直到不会混淆为止(但如果继续多取字母,也可以执行)

横线前置符号不能省略

我们以实例来说明参数名称的简略输入法则,例如以下的指令:

Get-Help -name dir -examples

上述指令经过 cmdlet 的参数名称简略输入法则可以变成:

Get-Help -n dir –ex
或
Get-Help -nam dir -exa

-name 不会与其他参数名称混淆的最简略形式为 -n;但实际上整个 -name 均可省略,简略成 -n 只是为了说明这套法则。

-examples 不能简略成 -e,因为这会与 -ErrorAction、-ErrorVariable(这些是 cmdlet 的共同参数)混淆,因此至少要再多取 e 之后的一个字母,才不会混淆。同样的 Get-Help,-ErrorAction、-ErrorVariable 要如何输入才能最简略呢?答案是 -ErrorA、-ErrorV。

指令的输入与编辑

为了简化指令的输入,Windows PowerShell 也提供了相当方便且实用的指令输入辅助功能。借由这些功能,您可以重复执行过的指令,而不需要重新输入;或者也可以取出执行过的指令,进而编修再执行。当您开启 Windows PowerShell 之后,您在 Windows PowerShell 视窗所输入过的所有指令都会被记录下来(称为「历程」),而 Windows PowerShell 也提供了许多快速键,让您快速取得曾经输入过的指令,减少指令输入的工作。不过一旦您结束 Windows PowerShell,Windows PowerShell 的历程也因没有存档而消失了,也就是说,历程的有效期限仅止于 Windows PowerShell 的执行阶段。

这些快速键包括了上下左右方向键、功能键、以及一些组合键,要提醒您的是,这些快速键必须在 Windows PowerShell 历程记录了您所输入的指令才有作用,而且当您以这些快速键取回并执行历程里的指令之后,再次执行的指令也会被历程所记录。您可以将指令历程想像成「0 起始的一维阵列」,每次输入执行的指令,会加到阵列之后,而这个阵列有一个指标指向最近执行的指令,利用方向键就可以移动指标,并将指标指向的指令显示在提示字元,这时只要按下 Enter 键,就可以直接执行。

我们假设历程已经依序记录了以下的指令,并以此例来说明这些快速键的用法:

0. Get-Help *
1. Help dir -full
2. Help dir -examples
3. dir d:\folder1 > folder.txt
4. dir d:\folder2 >> folder.txt
5. Get-Help about* > msh-aboutTopics.txt
6. Get-Process
7. Get-Process -name "explorer"
8. cd c:\windows\system32
9. dir vb*.dll

↑ 方向键

按一次 ↑ 方向键,会在提示字元显示最近执行过的指令;实际上,按一次 ↑ 方向键会将历程的指标往回移动一个指令,并将指令显示在提示字元。如果最近输入执行的是上述第 10 个指令,按一次 ↑ 方向键会在提示字元显示第 10 个指令;如果最近执行的是上述第 6 个指令,那么按两次 ↑ 方向键之后,提示字元会显示第 6 个指令。

↓ 方向键

与 ↑ 方向键相反,按一次 ↓ 方向键会将历程的指标往前移动一个指令,并将指令显示在提示字元。

PgUp 键

会将历程的指标往前移到第1个指令,并将指令显示在提示字元。

PgDn 键

会将历程的指标往前移到最后一个指令,并将指令显示在提示字元。

→ 方向键

如果游标右侧没有字元,按一次会显示目前指标所指指令的一个字元,并将游标往右移动,直到显示完指令所有的字元,就无法再移动游标;如果游标右侧有字元,就只会向右移动游标。举例来说,假设现在历程指标指向第 6 个指令,但提示字元空无一物,这时按 5 次 → 方向键,会依序显示 G、e、t、-、P。

← 方向键

将游标往左移动,可以用来编辑指令。呈上例,游标在 P 的右侧,按 ← 方向键 3 次,游标会移到 t;这时若再按 → 方向键两次,游标会移到 P。

Home 键

将游标移到提示字元指令的开头。

End 键

将游标移到提示字元指令的结尾(最后一个字元之后)。

Ctrl + → 方向键

向右移动提示字元指令的游标,但一次移动一个字(而非字元)。

Ctrl + ← 方向键

向左移动提示字元指令的游标,但一次移动一个字(而非字元)。

Ctrl + C

取消目前的指令,并出现新的空白提示字元。

F2 功能键

能将您最近的指令复制到提示字元,并且可以根据您的指示来决定要复制多少字元。举例来说,假设最近的指令是上述第 7 个,且提示字元空无一物,若按下 F2 功能键,视窗正中央会出现『输入复制字元』的讯息,此时若按下 "(双引号),提示字元会显示 Get-Process -name(最后一个 e 之后还有一个空白字元,游标会在空白字元之后);也就是说,会将您所输入字元之前的所有字元,都复制到提示字元的指令行。同样的例子,如果您输入 e,则只会复制 G。按下 F2 功能键之后,可按下 Enter 键取消这项功能。

F3 功能键

显示最近一次执行过的指令。

F4 功能键

能删除提示字元指令行里指定的字元。这个功能键的用法和 F2 功能键有些类似,假设提示字元里的指令是上述第 7 个,而且我们利用 ← 方向键将游标移到 c,此时按下 F4 功能键,视窗正中央会出现『输入删除字元』的讯息,这时候如果按下 -(横线),那么从 c 到横线之前的字元都会被删除,也就是说,指令的变化如下:

Get-Process –name "explorer"
变成
Get-Pro-name "explorer"

F4 功能键有一项使用技巧:如果想删除游标之后所有的字元,可以直接按下 Enter 键。

F5 功能键

功能如同 ↑ 方向键。

F7 功能键

如果不喜欢盲目的按著 ↑、↓ 方向键来找寻指令,可以利用按下 F7 功能键所出现的列示窗(如图 8),这个列示窗显示了历程里的指令及其输入顺序的编号。您可以利用 ↑、↓ 方向键来选取列示窗里的指令(犹如指向指令的指标),再按下 Enter 键即可执行选取的指令(并且也会关闭列示窗);或者按下 ←(或 →)方向键,可以在提示字元显示所选取的指令,您可进而编修指令再按 Enter 键执行。若要关闭列示窗,可以按下 Esc 键。

图 8

F8 功能键

如果提示字元空无一物,按下 F8 功能键会让历程指标往回指向上一个指令,并将指令显示在提示字元。如果提示字元输入了部分指令,情况又有点不同,让我们以实例说明。假设现在历程指标指向第 8 个指令,并且在提示字元输入 dir,然后按下 F8 功能键,提示字元会显示第 4 个指令,因为第 4 个指令是距离原本指标(第 8 个指令)最近的上一个有 dir 的指令;若再按 F8 功能键,会再显示上一个有 dir 的指令,并继续循环。

F9 功能键

按下 F9 功能键之后,视窗正中央会出现让您输入指令编号的交谈窗(如图 9),输入编号并按下 Enter 键,该编号的指令会出现在提示字元,您可进而编修指令再按 Enter 键执行。。若要关闭交谈窗,可以按下 Esc 键。

图 9

重新导向

如同 Cmd(以及其他许多壳层),Windows PowerShell 预设也是将执行结果显示在视窗,例如前述许多范例就是如此。但有时或许因为执行结果较多、较长,显示在视窗并不容易检阅,也或许想要保留执行结果,如果有这种情形,可以利用 cmdlet 的重新导向功能,将执行结果「重导」到指定的文字档。

重新导向必须利用重新导向运算子 >,并且也要指定完整的档名,例如我们可以利用下列方式,将列出的所有概念主题重新导向 msh-aboutTopics.txt 文字档:

Get-Help about* > msh-aboutTopics.txt

cmdlet 加了重新导向运算子,Windows PowerShell 视窗就不会显示执行结果。为了方便能以文字编辑器开启,应该替档名加上诸如 .txt 之类的副档名,而如果指定的档案名称并不存在,Windows PowerShell 会自行建立,但如果指定的档案名称已存在,以上的例子则会覆盖旧档案的内容。此外,以上的例子并没有指定档案的路径,因此会在目前的工作路径建立 msh-aboutTopics.txt 文字档。

有时候您并不希望档案内容被重新导向覆盖,这种情形可以改用另一种重新导向运算子 >>:

dir d:\folder1 > folder.txt		→ 第 1 次重新导向,建立新的档案
dir d:\folder2 >> folder.txt	→ 第 2 次重新导向,内容会附加到档案

上述例子的第 1 次重新导向会将 folder1 资料夹的内容加入新建立的档案 folder.txt;如果 folder.txt 档案已存在,重导的内容会覆盖 folder.txt 档案原本的内容。第2次重新导向会将 folder2 资料夹的内容附加到 folder.txt 第 1 次加入的内容之后,不会覆盖原本的内容。

别名

您可以在 Windows PowerShell 继续使用原本熟悉的 Cmd 指令,但是这些指令实际上都有相对应的 cmdlet,也就是说,这些指令是某些 cmdlet 的别名(alias),例如 cd 和 chdir 指令是 Set-Location cmdlet 的别名,而 dir 指令是 Get-ChildItem cmdlet 的别名。

Windows PowerShell 的 Get-Alias cmdlet 可以列出目前所有的别名,甚至 Get-Alias 本身也有别名,那就是 gal。别名的好处之一,是能以缩写来替代原本较为冗长的 cmdlet 名称(例如以 gal 替代 Get-Alias);此外,利用别名将其他壳层的指令对应到 Windows PowerShell cmdlet,则可以让您更快的开始使用新环境。Windows PowerShell 还允许您自行定义别名,这留待后续的文章另行说明。

总结

Windows PowerShell 是微软为 Windows 新创的壳层,这个壳层也包含 script 语言。相较于原本的 Cmd 和 WSH,Windows PowerShell 结合了壳层与 script 语言,并且也融合了 .NET 技术。「全面的一致性」是 Windows PowerShell 的优点之一,举凡指令及参数的用法、取得说明的方式,都比 Cmd 有更好的一致性,这能 Windows PowerShell 更容易学会,也更容易使用。

Windows PowerShell 的执行环境也提供了方便且实用的指令输入功能,借由这些功能,您更能重复使用执行过的指令,或者取回执行过的指令并进一步编修而再执行。重新导向和别名也是许多壳层都具备的功能,前者能更弹性的运用执行结果,而后者能让您以原本熟悉或易记的指令名称来取代新的、冗长(但符合一致性)的指令。

相较于 Cmd 和 WSH,Windows PowerShell 的另一项优势,是 Windows PowerShell 正持续不断的发展;虽然 Cmd 和 WSH 目前的使用者较多、虽然 Windows PowerShell 不会于此刻马上取代 Cmd 和 WSH,但是您总得为明天预作准备。

参考资料

Windows PowerShell 线上说明

Windows PowerShell Owner's Manual

Windows PowerShell 1.0 Documentation Pack

1根据台湾微软所释出的 Windows Server 2008 RC0 的繁体中文版,许多如 Server Manager、Feature 等术语,也有了『伺服器管理员』、『功能』等官方的正式中文名称,因此本文及后续文章将会改用官方的中文名称(例如之前文章所谓的『特征』,在后续文章就会改用『功能』)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章