Powershell学习笔记——Powershell控制台和脚本文件
安装Powershell
如果是Windows 7,那么Powershell 2.0已经预装了。不过Windows XP就没那么幸运了,需要自己安装Powershell。Windows XP的Powershell 2.0集成在Windows Management Framework Core中,下载地址有点长,在这里:http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=60cb5b6c-6532-45e0-ab0f-a94ae9ababf5#QuickDetails。如果搜索的话,就搜KB968930。
如果想知道是否已经安装了Powershell,有个很简单的办法:用[Win+R]打开“运行”窗口,输入“powershell”,回车。如果打开了Powershell控制台,那就是已经安装了Powershell啦。如果想查看Powershell的版本,有好几种办法,比如
- PS F:\> $Host.Version.ToString()
- 2.0
- PS F:\> $PSVersionTable
- Name Value
- ---- -----
- CLRVersion 2.0.50727.4961
- BuildVersion 6.1.7600.16385
- PSVersion 2.0
- WSManStackVersion 2.0
- PSCompatibleVersions {1.0, 2.0}
- SerializationVersion 1.1.0.1
- PSRemotingProtocolVersion 2.1
- PS F:\> Get-Host
- Name : ConsoleHost
- Version : 2.0
- InstanceId : 6632b7de-43d1-4ad1-8fcf-f632bdbd8387
- UI : System.Management.Automation.Internal.Host.InternalHostUserInterface
- CurrentCulture : zh-CN
- CurrentUICulture : zh-CN
- PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
- IsRunspacePushed : False
- Runspace : System.Management.Automation.Runspaces.LocalRunspace
- PS F:\>
设置Powershell控制台
从开始菜单启动“Windows Powershell”,或者通过“运行→powershell”打开的就是Powershell的控制台窗口。默认的控制台是80字符x25字符大小,黑底白字的窗口,不过这些都可以自定义。
和CMD控制台窗口一样,右键单击Powershell控制台窗口的顶部标题栏位置,在弹出的菜单中选择“属性”,即可打开控制台窗口的属性对话框。这个对话框有4个标签页:“选项”、“字体”、“布局”、“颜色”。
设置完并“确定”之后,设置的内容被保存,同时窗口会根据设置立即改变。关闭控制台窗口之后,下次以同样的方式打开Powershell控制台窗口,那么这些设置都会自动加载并应用。
为什么要说“同样的方式打开”?如果常用CMD的话,这原因是一样的,所以这些设置的保存都与Powershell的快捷方式有关。不用知道Windows是通过什么样的方式让设置与快捷方式相关的,但效果就是,通过不同的快捷方式打开的Powershell控制台,应用的是不同的设置。比如,通过开始菜单打开的Powershell和通过“运行”窗口打开的Powershell,两个控制台窗口的设置就是不同的。
Powershell控制台的快捷键
Powershell控制台的快捷键和CMD控制台的快捷键一样,常用的有如下一些:
← →
|
左右移动光标
|
↑ ↓
|
在命令历史中滚动选择历史中的命令,便于重复执行命令,当然也可以先修改再执行
|
Home
|
将光标移动到当前命令的第1个字符位置
|
End
|
将光标移动到当前命令的最后1个字符之后
|
Ctrl+Home
|
从当前位置开始,清除当前命令中前面所有字符
|
Ctrl+End
|
从当前位置开始,清除当前命令中后面所有字符
|
Backspace
|
向前删除1个字符
|
Del
|
向后删除1个字符
|
Esc
|
清除当前已经输入的命令
|
F3
|
显示上次执行的命令。如果通过↑和↓键选择了历史命令,并通过Esc、Backspace、Del清除或删除了部分内容,则F3可以恢复显示这条历史命令。如果按F3之前输入了部分内容,那F3显示的历史命令中相应的位置由输入的字符替代。(这个说起来很麻烦,自己试试就知道了)
|
Tab
|
输入命令时补全命令、文件,或者对象成员
|
Powershell脚本文件
Powershell脚本文件是以.ps1作为扩展名的。曾经以为.ps1是Powershell 1.0的脚本文件扩展名,而Powershell 2.0的脚本文件扩展名是.ps2,但经过试验,Powershell目前不管哪个版本,都不认.ps2这个扩展名。
Powershell只认识ANSI编码(在简体中文Windows下就是GBK)的脚本文件。如果你把脚本文件用UTF-8格式保存,而脚本中又正好有中文的话,Powershell在执行脚本的时候会将中文都显示成乱码,偶尔还会报告语法错误。
示例说话,先来个Hello World:
- #hello.ps1
- "Hello World"
脚本中的第1句注释不是必须的——对了,Powershell脚本使用#号来标记行注释,#可以出现在一行的行首,也可以是其它位置,总之,一行内在它之后的内容都被认为是注释内容了——回头来说,这个脚本只干了一件事情,就是输出Hello World。
是不是有点疑惑,因为这里没有看到任何一个命令。是的,Powershell就是这么神奇,常量值、变量值或者通过表达式运行出来的值,可以直接输出到控制台。所以Powershell可以用作计算器,比如,在控制台中输入命令:
- PS F:\>1 + 3 * 4 # 这将会直接输出运算结果13
- 13
扯远了。现在回过头来运行hello.ps1,不过很遗憾,如果你是第一次执行Powershell脚本,那么有可能会得到一个错误消息:
- PS F:\> .\hello.ps1
- 无法加载文件 F:\hello.ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 "get-help about_signing"。
- 所在位置 行:1 字符: 12
- + .\hello.ps1 <<<<
- + CategoryInfo : NotSpecified: (:) [], PSSecurityException
- + FullyQualifiedErrorId : RuntimeException
错误报告说系统禁止执行脚本——因为Powershell的执行策略阻止了这个被它认为不安全的脚本运行。
Powershell的执行策略有4个:
当前使用的什么执行策略,可以通过“Get-ExecutionPolicy”查看;默认情况下,Powershell的执行策略是Restricted。为了方便进行练习,可以通过“Set-ExecutionPolicy”命令将执行策略改为“RemoteSigned”,就像这样
- PS F:\> Get-ExecutionPolicy # 查看当前的执行策略
- Restricted
- PS F:\> Set-ExecutionPolicy RemoteSigned # 回车后会有确认提示,当然选Y
- 执行策略更改
- 执行策略可以防止您执行不信任的脚本。更改执行策略可能会使您面临 about_Execution_Policies
- 帮助主题中所述的安全风险。是否要更改执行策略?
- [Y] 是(Y) [N] 否(N) [S] 挂起(S) [?] 帮助 (默认值为“Y”): Y
- PS F:\>
现在,Hello World终于运行出来了
- PS F:\> .\hello.ps1
- Hello World
- PS F:\>
知道为什么要在hello.ps1前面加上“.\”么?如果有研究精神,就该试试不加“.\”的hello.ps1。虽然执行会出现错误,但错误信息里说得很清楚,包括为什么这样不行,以及应该怎么样。
寻求帮助
既然已经开始使用Powershell,那么有两个伙伴会一直陪伴你的Powershell生涯:错误信息和Help。
中文Windows下的Powershell,其大部分错误信息都包含有中文的说明,请不要忽略它,因为如果不了解错误原因,就不清楚该如何去更正。而错误信息正是了解错误原因最直接的途径。
如果不清楚该怎么做,Help通常会提供给你非常有效有信息。比如,直接在控制台里输入Help并回车,控制台里就会出现一大段文字说明Help可以干什么,并在备注里提供了一些有效的参考信息。然后就可以根据提示尝试一下“help get-command”,从新的信息中你就可以接触到Powershell中的各种命令了——哦,在Powershell中它们叫Cmdlet。