欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

从零开始学PowerShell(6) 获取对象信息

程序员文章站 2022-05-28 13:09:40
...

在编程世界里,我们一定听说过面向对象思维,根据面向对象思维我们可以抽象的把现实世界中每一个事物都看成是一个对象,每个对象都包含自己特有的属性和方法。

而在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如何调用不同类型方法的文章。