欢迎转载本系列文章;转载请注明出处:www.cnblogs.com/volcanol
自从微软推出.Net以来,微软旗下的windows体系就发生了很大的变化,首先是操作系统的界面的变化,例如vista与XP的界面变化,
其次是一些应用的变化,例如在XP下就没有Aero桌面效果,而在Win7下就有Aero桌面效果(本人没有用过vista,不知道有没有Aero的效果)。
但这些都是用户直观的感受,除了这些还有更深层次的变化,如C++的CLR和CLI、以及一些时下非常流行的技术(像WPF、WCF还有什么
WorkFlow等等,这些我都不懂,只听说过这些);这里介绍的是这些变化外的另外一个变化: console shell的变化。
XP下面主要的脚本有:vbscript、javascript和batchfile批处理;这些功能均很强大,并且很多时候都有一些意想不到的效果;例如我前
两天弄的那个去除代码前导数字的批处理。而在vista之后,微软为windows开发了一个全新的console shell——PowerShell。
一、PowerShell的功能
1、与标准的windows命令和应用程序兼容
2、全新的命令格式:cmdlets
3、支持对象/面向对象
4、适合管理员应用
5、多语言支持
6、发现功能:Get-Command、Get-Help、Get-Member命令
二、启动PowerShell
1、cmd -——> powershell
2、start ——>All Program ——>附件——>Windows PowerShell——>Windows PowerShell
启动后界面如下所示:
三 Powershell基础
3、1 如何执行程序/命令
1) 直接输入命令或者程序名称以执行程序或命令
Exp:
Program.exe arguments
ScriptName.psl arguments
batchfilename.bat/cmd arguments
2) 运行命令中包含空格的命令,需要用单引号将命令括起来,同时在命令前面加: & 符号; 这在Powershell中称为调用操作
(Invoke Operator)
Exp:
& ‘C:\Program Files\Program\Program.exe’ arguments
3)运行当前目录或者路径下的命令或者程序
这一点,Powershell借鉴了Linux/Unix的经验, 当在powershell中执行非系统路径下的程序或者命令时,必须明确的指定命令
或者程序的路径。
运行当前目录或者路径下的命令或者程序通过在命令前面加上:“ .\ ”来实现。
Exp:
.\program.exe arguments
4) 运行当前目录或者路径下,命令或者程序名包含空格的程序或者命令, 则结合规则2)和规则3)来执行。
Exp:
& ‘.\show system infomation.pls’
5) Powershell中的特殊点
我们知道在cmd提示符下,双引号用于实现访问带空格的命令或者路径下的命令,而在Powershell中双引号有特殊的用途:
表示字符串。
Exp:
如果我们在PS的命令提示符下输入: “hello ” + “world” 则输出:
hello world
即在PS中双引号沿用了C语言的规范。
6) 在任意路径下输入powershell的内置cmdlet均可以执行,而不需要加上 .\ 或者& 等特殊控制符号。
Exp:
Get-Process
输入上述命令则实现cmd中tasklist的功能。
3、2 cmdlet
powershell中内置的命令称为cmdlets;cmdlet实现具有以下特点:
1)统一的命令形式
2)支持管道功能
3)输出易于管理的对象,支持面向对象的概念
3、3 自定义powershell提示符和命令别名
Powershell的出现,弥补了windows先天不足的console shell功能,在powershell中借鉴了很多bash shell 或其他linux/unix shell
的经验; 自定义命令的别名就是其中一个。
在powershell中有一个内置的变量: $profile;这个变量指示了powershell用户自定义配置文件。可以在powershell中输入 $profile
来查看这个变量的内容:
PS C:\Users\vol_20120330> $profile C:\Users\vol_20120330\Documents\WindowsPowerShell\Microsoft.PowerShell_profile. ps1 PS C:\Users\vol_20120330>
通过下面的命令来创建新的用户配置文件脚本文件:
new-item -type file force $profile
用户的自定义powershell环境配置文件通过$profile文件来引用, 可以通过下面的命令来打开然后编辑这个配置文件:
notepad $profile
通过下面的命令来获取配置文件: $profile 的信息
Exp:
get-item $profile
get-item 这个命令获取配置文件的一般信息。同样可以通过下面的命令来获取$profile的信息:
Get-childitem $PROFILE
下面我们通过一个实例来修改powershell的命令提示符形式;首先通过notepade $profile 打开用户配置脚本文件,然后输入以下信息:
Function Prompt { "PS [$env:COMPUTERNAME]>volcanol>" }
这样我们的命令提示符就会变成下面的样式:
PS [vol_20120305]volcanol>"
注意我的电脑的名称为: vol_20120305
3、4 powershell的安全执行策略
默认情况下,powershell不允许执行脚本文件,上面的用户配置文件也包括在内;如果不修改powershell的安全执行策略,则上面的用户
配置文件是不能执行的。这里不插图了,读者可以自己实验。
下面先简单的介绍一下如何修改powershell的安全执行策略。
1)以管理员的身份打开powershell的提示符窗口
2)输入下面的命令:
set-executionpolicy remotesigned
3) 然后重新以管理的员的身份启动powershell;然后就可以看到ps的提示符编程了自定义的形式。
或者可以不退出ps; 而是执行一次 $profile 用户配置脚本即可。
3、5 自定义命令别名
通过在用户配置脚本文件中自定义命令别名可以提高脚本的编辑效率,因为ps的命令比cmd命令长多了,例如
cd命令现在用set-location命令替代了;dir命令用get-childitem命令替代了。
通过: set-alias 命令来设置命令别名。
set-alias new new-objector
Exp: 设置IE浏览器启动命令的别名。
set-alias iexplorer 'c:\program files\internet explorer\iexplorer.exe'
这样就可以在powershell中用 iexplorer命令来启动IE浏览器了。当然这需要重启Powershell或者执行一次用户配置文件脚本。
3、6 查找命令
在用cmd的时候,我们有这样的经验,有时候不知道用什么命令来实现所需要的功能,这时我们就或利用help命令来大体的搜索一下;
然后看是否有我们需要的命令。在powershell中这一过程同样被支持,我们可以搜索命令;这通过 Get-Command 来实现。
1) 获取全部的可使用的命令,输入以下命令
get-command
2)获取指定命令的帮助信息
get-command command_name
例如: get-command get-process
3)利用通配符进行搜索
powershell支持通配符搜索,这一功能的完美支持,完全可以媲美linux下的正则表达式。
get-command *char*
当仅有 * 号进行搜索时相当于: get-command
get-command *
例如搜索命令中带有txt的命令: get-command *txt*
5)带参数的搜索
在powershell中利用get-command搜索的时候可以带选项参数,-verb和-noun; 其中-verb选项用来搜索带指定动词的命令,而-noun
选项则用来搜索带指定名词的命令。命令格式如下:
get-command -verb verb_name get-command -noun noun_name
例如搜索带动词get的命令: get-command -verb get
搜索带名词service的命令: get-command -noun service
3.7 cmdlets——一致的命令接口模式
powershell采用一种称为cmdlets的命令接口模式,所有的命令都遵循这样的命令模式:
动词-名词
如:get-command 命令, get就是动词,而command就是名词
get-process 命令,get是动词,而process是名词
get-eventlog 命令, get是动词,而eventlog是名词。
cmdlets中命令的动词部分取自于一个制定的动词集合,而cmdlet命令的名词部分描述了cmdlet命令要操作的对象。
3.8 获取帮助信息
在cmd中获取帮助有三种方法:a) 利用help命令, 如 help cd
b) 利用 /? 命令选项,如 cd /?
c) 查看系统帮组信息
在Powershell中则有四种方法:
a)利用 get-command 命令
b)利用 get-help 命令
c) 利用 -? 命令选项
d)查看系统帮助信息
利用get-command命令和利用get-help命令获取命令帮助信息是不同的;get-command直接从cmdlet、函数、变量
脚本或者别名中获取信息,而get-help命令则从系统帮助主题文件中获取信息, 通常get-help命令获取的帮助信息比get-command
命令详细。
1)用get-command命令获取帮助信息:
Exp : 利用get-command 获取get-help帮助信息
get-command get-help
如果需要用get-command命令获取较为详细的命令则需用到管道和format-list命令;如下所示:
get-command command_name | format-list
2) 利用get-help命令获取帮助信息:
Exp: 利用get-help 获取自身的帮助信息
get-help get-help
利用get-help命令获取帮助信息可以指定命令选项来获取不同详细程度的帮组信息:
a) -detailed 选项 ; 获取特定命令的帮助信息详情;例如: get-help -detailed get-process
b) -full 选项; 获取特定命令的全部帮助信息; 例如: get-help -full set-location
c) -examples 选项;获取特定命令的实例帮助信息; 例如: get-help -examples get-childitem
上面就是本次的所有内容,待续。