Powershell 学习: 对象,数据的另一个名称
如果说对象像一个表,而powershell 仅仅在屏幕上展示表的一部分,如果你想知道对象的更多内容(相当于表的每一个列),你可以通过命令:get-member (Alias: gm) 来获取。
当一个命令产生一个对象集合时,整个集合一直到管道末尾之前都可以被访问。在最后以一个命令运行完之前,powershel 都不会将对象的标签或属性过滤掉。
例如运行 Get-Process | gm
当Get-Process 运行之后,Gm 可以完整的访问进程对象的属性和方法,因为该命令还未被过滤用于显示。Gm会查看每一个对象,并构建一个包含对象属性方法的列表。
在命令结束之前总是对象的形式
Powershell 管道在最后一个命令执行之前总是传递对象, 在最后一个命令执行时,Powershell 会查看管道中所包含的对象,并根据不同的配置文件决定显示哪些属性在屏幕上。
在一个命令行中,管道可以包含不同类型的对象, 如: Get-Process | Sort-Object vm -Descending | Out-File c:\procs.txt
Get-Process |
Sort-Object vm -Descending |
Out-File c:\procs.txt
首先运行 Get-Process, 该命令将进程对象放入管道。
在下一个命令Sort-Object 中,并不会改变管道中的内容,仅仅改变了对象的顺序,一直到该命令结束,管道中依然时进程对象。
最后一个命令Out-File, 在这里,Powershell 生成输出结果,也就是管道中所包含的内容 -- 进程对象,并将结果按照一定的格式存入指定的文件。
再比如:Get-Process | Sort-Object vm -Descending | Select-Object Name, Id, VM
Get-Process |
Sort-Object vm -Descending |
Select-Object Name, Id, VM
首先运行 Get-Process, 该命令将进程对象放入管道。
在下一个命令Sort-Object 中,并不会改变管道中的内容,仅仅改变了对象的顺序,一直到该命令结束,管道中依然时进程对象。
在运行Select-Object时, 他并不会删除你不需要的列(属性)来减少属性列表,因为这样的话,结果就不再是进程对象了。 Select-Object会创建一个PSObject 的自定义对象,Powershell使用这个对象将所需要挑选出来的属性从进程对象中复制出来,结果是自定义对象被放入管道。
Powershell 发现光标已经到达命令行结尾时,必须知道如果处理输出结果,因为管道中的对象不再是进程对象,而是PSObject. 然而微软并没有为PSObject提供任何规则或配置,因此产生表的形式并不一定美观。
你可以通过GM命令来查看管道中不同的对象, Get-Process | Sort-Object vm -Descending | Select-Object Name, Id, VM | gm
因为在运行gm之前,管道中不再是进程对象,而是另外一种类型的对象,包含了: Name, Id, vm 以及另外一些由系统生成的成员。
Note: 你可以在任何命令的结尾添加Gm 命令,单是有些命令运行结束之后并不会产生结果,因此将 |gm 放置在命令结尾并不会有结果输出。