从零开始学PowerShell(6) 获取对象信息
在编程世界里,我们一定听说过面向对象思维,根据面向对象思维我们可以抽象的把现实世界中每一个事物都看成是一个对象,每个对象都包含自己特有的属性和方法。
而在PowerShell中任何东西也都是一种对象,我们知道对象含有它的属性和方法等信息。当我们在编写脚本的时候都会想知道我们除了生成的对象外,这个对象还能实现什么功能,什么方法。
那如何查看对象的属性等信息呢,使用Get-Member
方法与管道符配合就可以用来发现指定对象的属性、方法等信息。比如我们想知道系统进程对象包含哪些属性和方法可以用,只需要像下面这样做。
PS /Users/Anders> Get-Process | Get-Member
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
Handles AliasProperty Handles = Handlecount
Name AliasProperty Name = ProcessName
NPM AliasProperty NPM = NonpagedSystemMemorySize64
PM AliasProperty PM = PagedMemorySize64
SI AliasProperty SI = SessionId
VM AliasProperty VM = VirtualMemorySize64
WS AliasProperty WS = WorkingSet64
Parent CodeProperty System.Object Parent{get=GetParentProcess;}
你会看到PowerShell返回了所有与系统进程类型相关的属性和方法等信息,首先可以看到第一条信息TypeName: System.Diagnostics.Process
,这表明Get-Member
命令是由System.Diagnostics.Process
.NET类型构建而来的。接着,我们就可以从那些返回的数据里做一些有趣的操作。比如默认情况下,当你直接键入Get-Process
命令是无法查看到VirtualMemorySize虚拟内存大小的,而通过Get-Member查看对象属性后得知进程有一个属性名为VM,代表当前进程的虚拟内存大小,那我们可以像下面这样很简单的选择出VM列数据并把它显示出来。
PS /> Get-Process | Select-Object ProcessName, VM
ProcessName VM
----------- --
ForkLift 4362297344
gamed 4590047232
Google Chrome H 6911365120
Google Chrome H 6902108160
Google Chrome H 5691969536
Google Chrome H 5730803712
Google Chrome H 5683720192
hyperkit 6827827200
iBooks 5002887168
icdd 4482146304
iconservicesage 4534165504
identityservice 4506165248
imagent 4489478144
IMAutomaticHist 4482187264
IMDPersistenceA 4455772160
imklaunchagent 4485124096
Get-Member
不仅仅可以查看某个命令的属性和方法,也可以查看所有命令的相关属性与方法。还记得前面说的吗,在PowerShell中所有的数据均为对象,所以我们也可以在查找某个命令功能所包含的对象属性等信息,像下面这样。
PS /> Get-Process -ProcessName "Thunder" | Get-Member
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
Handles AliasProperty Handles = Handlecount
Name AliasProperty Name = ProcessName
NPM AliasProperty NPM = NonpagedSystemMemorySize64
PM AliasProperty PM = PagedMemorySize64
SI AliasProperty SI = SessionId
VM AliasProperty VM = VirtualMemorySize64
WS AliasProperty WS = WorkingSet64
GetType Method type GetType()
Kill Method void Kill()
直接可以在某个命令行用管道传递到Get-Member
查看包含哪些有趣的东西,(在这里我只提取了一部分数据)其中,发现有一个Kill方法,这个方法是终止当前进程,可以这样使用。
PS /> (Get-Process -ProcessName "Thunder").Kill()
我先获取了命为Thunder的进程信息,接着调用Kill方法,奖它自动关闭。
除此之外,Get-Member
还可以配合一些特定参数获得更精准更详细的信息。
# 获得对象多有可调用的静态方法
PS /> Get-Process -ProcessName "Thunder" | Get-Member -Static
# 获得对象所有可调用的方法
PS /> Get-Process -ProcessName "Thunder" | Get-Member -MemberType Method
# 获得对象所有可调用的属性
PS /> Get-Process -ProcessName "Thunder" | Get-Member -MemberType Property
Get-Member
是一个非常实用且高频率的命令,当你需要更多的操作帮助时,记得使用它。
当然,不同对象的方法类型也有不同的操作方法,这不是本文的重点,所以就不展开了。相信,以后会写一篇PowerShell如何调用不同类型方法的文章。
上一篇: Python logger模块
下一篇: JAVA——三个数排序