4. Windows PowerShell 命令: Get-Membe r
Get-Member是一条很实用的命令,它用来发现Powershell对象的属性信息。在命令行中,我们不能右键点击对象然后再检查它的属性;但是你可以输入:get-objectXYZXYZ | get-member 来查看属性。
Powershell 有些时候被认为是种可以自我解释(self-describing)的语言。确实,由于get-member,我们能够查看到任何给定对象的属性(Property)和方法(Method)。

Get-Member的概念

我基本上每次使用Powershell, 都会使用Get-Member,原因是我可以从中找到“句柄(handles)”,它能够帮助我完成一个指定的任务。这些句柄(Handles)或者MemberTypes分为方法和属性。
学习Get-member的合适对象可以为service, Process, Eventlog或Wmiobject.

在你在一个大型的脚本编程中,使用Get-Member是一个非常有用的办法。比如,如果你的目标就是停止(或者启动)一个服务,那么你就需要调查服务的属性以及可能的值。通过使用Get-Member,你会发现有一个属性是“状态Status”,里面的值是“运行”或者“停止”。 有这些信息,那问题就基本解决了。
这里有三个例子
1)
Get-Service
显示Windows 服务

clip_p_w_picpath002

2)
get-service | get-member
显示Windows服务对象的属性和方法

clip_p_w_picpath004

3)
get-Service netman
显示了netman服务有一个属性“状态Status",值是“停止”(或者“运行”)

clip_p_w_picpath006

3a)Get-Service messenger | get-member

Get-Service messenger | get-member
显示了有关Messenger服务的更多属性信息

clip_p_w_picpath008

提示
请使用“Tab”来尝试自动完成功能,比如,get-p(tab),如果你再按一次Tab键,Powershell会从头开始显示以get-p开头的,比如Get-Process, get-PSDrive

get-objectXYZ | get-Member基本用法

一般来说,Get-Member结构不会发现变化,典型的一次学习终生适用。你要记住中间的减号-,当然还要记住中间没有空格。请注意get-objectXYZ是我取的一个名字,只是用来解释Get-Member的。
正确的格式: get-Member
不正确的格式:get member (没有减号) 或get -member 或get - member (多了空格)
正确的格式: get-objectXYZ | get-Member
不正确的格式:get-Member | get-objectXYZ (顺序错误)或get-objectXYZ get-objectXYZ (缺少管道符)
更多关于 Get-Member 的任务

get-wmiobject Win32_processor | get-Member

clip_p_w_picpath010
注意:在使用Wmiobject时,Get-Member 变得更好用。因为这种类型的变量对象比Service, Process, Eventlog多得多。
Tips
尝试使用别名,比如使用GWMIC来取代get-Wmiobject, 很多人使用GM而不用get-member。

Get-Process | GM

clip_p_w_picpath012

Get-Eventlog system | get-member

clip_p_w_picpath014
注意:如果你不告诉Powershell你需要那个Eventlog, 命令就不完整而不会执行

使用-Membertype来过滤

即使我们使用很简单命令get-member, 我们也会产生很多的成员类型(MemberType),这样我们可以使用-membertype来过滤输出,比如:

Get-Process | Get-Member -Membertype Property

clip_p_w_picpath016
或者

Get-Process | Get-Member -Membertype method

由于参数—MemberType,输出的结果被分为四组,AliasProperty, Method, Property和ScriptProperty. 如果你再研究下去,你会发现很多新的东西,比如

get-Process | group Company

clip_p_w_picpath018
严格来讲,上面的命令应该是 “get-process | Group-object company", 然而“Group-object”有一个别名,你可以简写为“Group”
这里有种办法来阐释“company”其他信息

get-process | sort company | format-Table -group company name, description -autosize

clip_p_w_picpath020
整篇关于-Member的例子,阐述了一个何时使用减号- 的宝贵经验。比如 -Membertype经常有减号开头,而属性Property就不需要任何的减号。

Get-Member寻求帮助

使用下面的命令你可以拿到被Get-Member帮助的完全清单 ?
Help get-member

clip_p_w_picpath022
可能也许只是我有这个问题,但是我经常使用-method而不是-member,所以也犯了不少的错。
如果你是用好的学习方法,你总是会从错误中学到更多。
好的学习办法有:a)仔细阅读错误信息 B)尝试那些你知道可以运行的例子
比如,我犯过如下的错误
Get-wmiobject win32_Computersystem | get-method
错误信息是"Get-method is not recognized" , 嗯,我就使用老朋友Process来看看
Get-Process | Get-method
也是错误的。嗯,这是怎么回事,get-method是错误的,那么我就尝试get-member。哈哈,如我所料,它生效了。

Get-Help 和Get- Member

请记住,Get-Help和Get-Member都是很实用的。一方面,Get-help反映了你可以用在命令行的有关参数(Parameter)和开关(Switch)的信息.另一方面,Get-Member反映了属性Properties 和方法method, 比如,extension, fullname, 两者对get-childitem都很有用。
我的意见是,Get-help和get-member各自提供了不同的信息,也不能互换。如果你是新手,花时间学习两个命令,如果你是中高手,那就专攻一个。

结:Powershell Get-Member

如果你对一个Powershell对象(Object)的方法(Method)和属性(Perproty)需要更多帮忙的时候,那就是用Get-Member。 你会使用到减号- 和管道符(|)。不过请记住正确的顺序
get-objectXYZ | get-Member