3. Powershell关键命令介绍
我们将在这介绍三种简单的但是很关键的命令,这些命令能够让你的 Powershell之旅更加顺利。
当你学习的时候,请记住一条军规,那就是Powershell的动词-名词(Verb-noun)结构, 就如get-PSProvider命令,get是动词,PSProvider是名词。
今天要介绍的三条关键命令是:get-comand, get-help, get-member
1. Get-Command
我们就从get-command开始,它是用来列出Powershell所有的动词-名词结构,当然,这些也被称为内置的cmdlets。
假设你已经打开了Powershell窗口,上面有提示,类似PS>;, 现在你只要输入一个带连字符号的语句:
get-command
我们可以使用通用符 星号 * 来过滤该列表,比如:
Get-command out*
Get-command add*
Get-command get-*
下面就是显示以set开头的cmdlets
Get-command set* -commandtype cmdlet
我们可以把这些输出以表格形式来显示,(Format-table), 这里将用到 Powershell的管道符号 |, 具体语句是:
Get-command | format-table name,definition –auto
我们现在只是体会、测试和感觉Powershell, 因此你完全可以按照建议进行任何的自我体验。 当你看到诸多内置命令时,随便选定一个cmdlet作为研究对象,比如
Get-psprovider
下面就是我运行这个命令的结果
家庭作业: 使用PSProvider
get-psprovider | Get-member
命令: PSSnapin
PSSnapin向我们展示内置cmdlets的来源于哪里
Get-pssnapin
Get-PSSnapin |ft name, description –autosize
你可能也注意到,
- . 每个Powershell的名词都是唯一的,PSSnapin,command,PSProvider。
- . 每个管道符|后面连着FT 意思是将输出格式作为一个表格形式(Format-Table),相对的是,把输出作为清单形式那就是使用 fl (Format-list). FT后面连着属性的名称,每个名称以分号分开。
- . 命令的最后是-autosize, 他让Powershell每列的宽度自动调整适应。
- . 当你使用 format-table 或者ft, 试着在后面加上-autosize,或者-auto,会让你的输出更紧凑、美观。
下面这个例子,我使用了ft来省略Description属性,只是显示名称
Get-PSSnapin |ft name
2. Get-Help
拒绝傲慢,把骄傲丢在一边,求助Powershell的内置帮助吧。 我们所需要学习的是如何寻求Powershell内置的帮助以及它能给我们带来的好处。
也许老的DOS系统的帮助的经历,让我们不太愿意再求助内置的帮助,但是,难道我需要建议大家都使用互联网的搜索来得到吗?幸好,这个现象没有在Powershell中出现。
Powershell的帮助有很多很有趣的开发,比如-full和-example, 一般来说-examples也可以工作,这是在Powershell里面非常少见的一个名词的复数。
尝试下面这个例子:
Get-help get-wmiobject
请注意: get-help不需要管道符号。事实上,管道符只会妨碍到get-help。
对下面的语句,Powershell会直接报错
Get-help | get-wmiobject cim_chip
因此,我们还是按照简单的模式来输入
Get-help get-wmiobject
我的经验之谈
对于初学者而言,Powershell的帮助是最爱;然而对于中级高手而言,却会忽略掉Powershell帮助;对于大师而言,他又会回归到使用get-member。 Powershell大师之所以是大师,是因为他们知道如何使用、什么时候使用合适的工具,比如get-help工具。
隐藏的Powershell 关于About文件
在Powershell文件夹里面(又被称为 $PSHome **), 你会发现全部的关于(about)文件。在这些文件里面,都是以About_开头,你将会发现很多的内容,比如foreach。
我的经验是,通过输入get-hep foreach你不能直接的得到帮助,但是你可以通过直接读该文件而得到大量帮助信息 $PSHome\about_foreach.help.txt
下面这个cmdlet向我们展示了About文件的名称
# List all the About help files
$i=0
$Homes = get-ChildItem "$PSHome\about*.*" -recurse
foreach ($About in $Homes) {$About.name; $i++}
$i=0
$Homes = get-ChildItem "$PSHome\about*.*" -recurse
foreach ($About in $Homes) {$About.name; $i++}
结果: 55个文件清单(根据版本不同数字可能不同)
**在我的系统里面, $PShome就是在 C:\WINDOWS\system32\WindowsPowerShell\v1.0
3. Get-Member
从我以前犯的错误得出来的教训,希望你能够铭记Get-member用法。关键点就是我们要把对象放在开头,而不是在命令的后面,另外一个教训就是我经常忘了管道符。
正确的格式是:
Get-process | get-member
错误
- get-Member | get-Process (顺序错误)
- get-Process get-Member (忘记了管道符)
家庭作业
Get-process | Get-Member -Membertype property
Get-process | Get-Member -Membertype method
从上面来看,所有的命令都不区分大小写的,比如get-Process, Get-Process 和get-Process, 三者的结果都一样。在Powershell里面, 大写的命令语句不会影响命令执行。
Tab键的自动完成
可能是考虑到我们比较懒,Powershell也提供了支持tab键自动完成的功能。 一旦你输入了足够的命令来确保该语句唯一,即不会被别的重复的时候,你可以直接按tab键,powershell就会自动完成接下来的命令。
Get-process get-mem(tab键)会自动扩展成:get-process get-member.
你可能也知道了,tab键的自动完成不但对某个命令起作用,对于所有的命令都起作用。
同样,当你使用Powershell的参数的时候,你也可以使用相同的自动填写功能。比如
-auto就等同于-autosize, -f就是相当于-filter.
Powershell里面有太多的自动完成了。
总结:Powershell命令行
如果你和一位经验丰富的Powershell用户,或者和某位专家聊天,他们都会告诉你,成功的秘诀就是简单。
请坚守这个定律直到你成功了。而这个基本定律的三大帮手就是,get-command, get-member和get-help