• PowerShell 笔记 对象


    对象

    当powershell运行任意命令时, 会在内存中完全构造用于容纳所有信息的表格。 表的概念包含:

    • 对象, 即表行, 代表单个事物, 比如单个进程或者单个服务。
    • 属性, 即表列, 代表关于对象的一部分信息, 比如进程名称, 进程ID或者服务状态
    • 方法, 方法与某个对象关联, 并使对象完成某些任务, 比如杀死进程或者启动服务
    • 集合, 整个对象的集合。 即'表'本身

    powershell 中对象会使对计算机的管理更加简单, 在linux中, 需要频繁使用grep, awk, sed 等命令用于处理字符串。 powershell中使用对象消除所有的文本操作开销, 因为可以直接提取对象的属性。

    探索对象

    在任何产生输出的命令后面使用Get-Member(简写gm), 可以查看输出对象的属性。

    Get-Process | gm
    
    
       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
    Disposed                   Event          System.EventHandler Disposed(System.Object, System.EventArgs)
    ErrorDataReceived          Event          System.Diagnostics.DataReceivedEventHandler ErrorDataReceived(System.Objec...
    Exited                     Event          System.EventHandler Exited(System.Object, System.EventArgs)
    OutputDataReceived         Event          System.Diagnostics.DataReceivedEventHandler OutputDataReceived(System.Obje...
    BeginErrorReadLine         Method         void BeginErrorReadLine()
    

    使用gm查看对象的属性时,可以看到有一些不同种类的属性

    • Property
    • NoteProperty
    • Method
    • Event
    • AliasProperty

    属性使对象有更好的一致性, 比如为原生只有类似ProcessName属性的对象添加Name属性。 不同类型的属性使用的方法都相同。
    属性用于描述对象的某些方面, 通常是只读的, 比如无法修改进程的名字。

    对象的排序

    大部分cmdlets以确定性的方式产生对象, 每次运行命令都会以相同的顺序产生对象。 例如服务和进程都按照字母表的顺序进行排序, 事件日志倾向于按照事件排序。 指定排序的属性, 可以使用Sort-Object。例如按照CPU使用倒序排序进程

    Get-Process | Sort-Object CPU -Descending
    
    Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
    -------  ------    -----      -----     ------     --  -- -----------
        286      13     7644      15440     241.78   9208   0 audiodg
       1230     109    78932      81948     184.94  15864   3 steam
       3247     132   192688     238204     126.95  14556   3 explorer
        889      55    28536      99500     119.27   1968   3 steamwebhelper
       1310     118   125700     160616     113.80  16072   3 YoudaoNote
       
    

    按照内存使用倒序排序,如果两个进程内存使用率相同,按照进程ID排序

    Get-Process | Sort-Object VM,ID -Descending
    

    只输出指定的属性

    Get-Process | Sort-Object VM,ID -Descending | Select-Object VM,CPU,ProcessName
    
               VM        CPU ProcessName
               --        --- -----------
    2239286448128     4.6875 SearchHost
    2207729041408            svchost
    2206181048320   0.515625 dllhost
    2205073539072  24.390625 PowerToys.PowerLauncher
    2204455677952    1.65625 PowerToys.ColorPickerUI
    2204347355136 128.453125 explorer
    2204224503808   7.265625 WsaClient
    2204109934592   1.015625 PowerToys.Awake
    2204046614528     33.875 powershell
    2204001726464  29.109375 WindowsTerminal
    
    

    人们经常会将 Select-Object 和 Where-Object 这两个PowerShell命令搞混,虽然目前你还没有见过 Where-Object 。 Select-Object 用于选择所需的属性(或列),还可以选择输出行的任意子集(使用 -First 和 -Last )。 Where-object 基于筛选条件从管道中移除或过滤对象。

  • 相关阅读:
    OpenCASCADE DataExchange DWG
    OpenCASCADE Conic to BSpline Curves-Circle
    OpenCASCADE Conic to BSpline Curves-Hyperbola
    Java中通过命令行启动jar包时指定编码
    VSCode来绘制流程图真是得心应手
    若依微服务版新建业务模块后提示找不到mapper的解决方法
    若依微服务版怎样实现不同业务模块下实体和mapper互相调用
    GitLab怎样实现新建仓库并允许开发者推送代码实现协同开发
    RuoYi-Process多模块activity工作流项目快速搭建
    若依微服务版手把手教你本地搭建环境并运行前后端项目
  • 原文地址:https://www.cnblogs.com/Chinori/p/16294950.html
Copyright © 2020-2023  润新知