1 对象:
Get-Process | ConvertTo-HTML
PowerShell 中的 4 个术语:
1) 对象 : 【表行】,代表单个事物,比如:单个进程,单个服务
2) 属性 : 【表列】,代表对象的部分信息,比如 进程名称,Process ID
3) 方法 : 【行为】 ,方法与某个对象关联,并使得对象完成某些任务,比如杀死进程
4) 集合 : 【整个对象的集合】,【表】
2 为什么 PowerShell 使用对象
为何 要使用 对象来代替数据???
原因:
1) Windows 本身就是一个面向对象的 OS
2) 会使事情比较简单,并给你 提供强大的功能和更好的灵活性
PowerShell 使用对象消除消除所有的文本操作开销,由于对象的工作机制类似于 内存中的表,因此无需告知PowerShell 信息所在的文本位置
3 探索对象 : Get-Member | gm
gm : 可以完整访问进程对象的属性和方法, 这是由于该命令还未被过滤用于显示
gm : 会查看每一个对象并构建一个包含对象属性和方法的列表
PS D: est_powershell> Get-Process | gm TypeName:System.Diagnostics.Process Name MemberType Definition ---- ---------- ---------- Handles AliasProperty Handles = Handlecount Name AliasProperty Name = ProcessName NPM AliasProperty NPM = NonpagedSystemMemorySize PM AliasProperty PM = PagedMemorySize VM AliasProperty VM = VirtualMemorySize WS AliasProperty WS = WorkingSet Disposed Event System.EventHandler Disposed(System.Object, System.EventArgs) ErrorDataReceived Event System.Diagnostics.DataReceivedEventHandler ErrorDataReceived(System.Object, System.Diagnostics.DataReceivedEventArgs) Exited Event System.EventHandler Exited(System.Object, System.EventArgs) OutputDataReceived Event System.Diagnostics.DataReceivedEventHandler OutputDataReceived(System.Object, System.Diagnostics.DataReceivedEventArgs) BeginErrorReadLine Method void BeginErrorReadLine() BeginOutputReadLine Method void BeginOutputReadLine() CancelErrorRead Method void CancelErrorRead() CancelOutputRead Method void CancelOutputRead() Close Method void Close() CloseMainWindow Method bool CloseMainWindow() CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType) Dispose Method void Dispose(), void IDisposable.Dispose() Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetLifetimeService Method System.Object GetLifetimeService()
[ Note ] PowerShell 中的 惯例, 使用 单数名词
一个 对象的属性,方法,以及 附加到 对象的东西, 都被称为 成员
4 对象标签, 也就是所谓的 “属性”
有以下几种:
ScriptProperty 、 NoteProperty 、 AliasProperty 、Property
有一个扩展类型系统 ETS,负责添加 后来的属性
对于 实现 自己的目标,这些属性都是一样的,唯一的不同,就是原本是如何创建出来的
PowerShell 中的 property 通常是 ,只读的
5 对象行为, 也就是所谓的 “方法”
如果 需要 禁止某个 进程,可以 通过 三个方法实现,
一,获取对象,并执行 kill 方法 , 二,使用一系列的 Cmdlets
【原则】 如果 无法使用 Cmdlets 完成,则回头使用 GUI
1) Get-Process -name Notepad | Stop-Process
2) Stop-Process -name Notepad
6 排序对象
PS D: est_powershell> get-process | Sort-Object -Property VM,ID -Descending
7 选择所需的属性
Select-Object 还拥有 -First / -Last 参数,这两个参数,可以保留管道中 对象的子集,但不能加 过滤条件
PS D: est_powershell> Get-Process | select Name , ID , VM ,PM -First 10 Name Id VM PM ---- -- -- -- AcroRd32 3864 272265216 60690432 AcroRd32 8344 157577216 12959744 armsvc 1908 45125632 1712128 arr_isrv 1740 84357120 2969600 arr_srvs 1932 73564160 2371584 atieclxx 3492 77225984 2891776 atiesrxx 944 30900224 2174976 CcmExec 2372 253988864 48713728 chrome 872 683159552 125206528 chrome 3264 77602816 2445312 PS D: est_powershell>
【Note】
Select-Object : 用于选择所需的属性【或列】,还可以选择输出行的任意子集 【使用 -First && -Last】
Where-Object : 基于 筛选条件从管道中移除或者过滤对象
8 在 命令 结束之前总是以对象的形式
PowerShell 管道在最后一个命令 ,执行之前,总是传递对象,在最后一个命令执行时, PowerShell将会 查看 管道中所包含的对象,并根据不同的配置文件,决定那一个属性被用于构建展示在屏幕的最终结果 ,
它 还会基于一些内部规则和配置文件确定展示是 表 还是 列表
可以使用 gm 查看管道中不同的对象,【Note】 可以在任何产生输出结果的Cmdlet 之后,使用Gm
PS D: est_powershell> get-Process | sort VM -Descending | gm
【NOTE】 可以 通过在 管道中 对 Gm 的 输出结果 再次 使用 Gm 命令证明
PS D: est_powershell> Get-Process | gm | gm TypeName:Microsoft.PowerShell.Commands.MemberDefinition Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() Definition Property string Definition {get;} MemberType Property System.Management.Automation.PSMemberTypes MemberType {get;} Name Property string Name {get;} TypeName Property string TypeName {get;}
9 常见误区
1) PowerShell 的帮助文档不 包括有关对象属性的信息, 必须 将对象利用管道 传递给 Gm[ Get-Memeber] 来查看属性列表
2) 可以在 产生结果的任意管道末尾添加 Gm, 如果不产生结果 加 Gm 也不会产生结果
3) 请注意输入的整洁性, | 两边,需要空格
4) 管道在不同阶段可以包含不同类型的 对象