【问题标题】:variable, Comparison and Operators in powersehllpowershell中的变量,比较和运算符
【发布时间】:2021-06-16 20:42:31
【问题描述】:

我希望这个问题能让你身体健康,

我有一个 powershell 代码,将列出我计算机中所有内存消耗以 mb 为单位的进程,它现在工作得很好,但问题是我想添加 -gt 操作以仅查找消耗大于的进程以 100mb 为例

Get-Process | Select-Object Name,@{Name='WorkingSet(MB)';Expression={($_.ws / 1024kb)}} | format-table -autosize

这段代码的结果是:

Name                                                          WorkingSet(MB)
----                                                          --------------
AppleMobileDeviceService                                          8.85546875
ApplicationFrameHost                                                32.40625
armsvc                                                             3.6328125
atmgr                                                            38.98828125
atmgr                                                            38.83984375
audiodg                                                           11.2109375

当我尝试添加 -gt 100mb 时:

PS C:\Users\Documents> Get-Process | Select-Object Name,@{Name='WorkingSet(MB)';Expression={($_.ws / 1024kb) -gt 100}} | format-table -autosize

Name                                                          WorkingSet(MB)
----                                                          --------------
AppleMobileDeviceService                                               False
ApplicationFrameHost                                                   True
armsvc                                                                 False
atmgr                                                                  False

所以结果是真或假,这不是我的期望,因为我只想拥有内存消耗超过 100 的进程(必须提到消耗不仅是真还是假:/)


解决这个问题后,我的计划是让脚本每隔一小时运行一次,并记录输出以防有超过 100mb 的进程使用,如果是,一旦我登录笔记本电脑,就会出现弹出警告消息使用下面的代码:

powershell -WindowStyle hidden -Command "& {[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Some Services are using more than 100mb of memory','WARNING')}"

感谢任何想法或建议,

谁能帮忙,我真的很感激。

【问题讨论】:

  • 在你的select-object之后,添加| where {$_.'workingset(mb)' -gt 100}
  • 谢谢它的工作

标签: powershell powershell-2.0 powershell-3.0 powershell-4.0 powershell-remoting


【解决方案1】:

Where-Object 是一种根据属性值过滤对象的常用方法。当您通过管道传输到Select-Object 时,您会根据其选定或计算的属性输出自定义对象。您可以过滤自定义对象,就像其他 PowerShell 命令输出的任何其他对象一样。

Get-Process |
    Select-Object Name,@{Name='WorkingSet(MB)';Expression={($_.ws / 1024kb)}} |
        Where-Object { $_.'WorkingSet(MB)' -gt 100 } |
            Format-Table -AutoSize

请注意,Format-Table 命令已移至表达式的末尾。 Format-* 命令只能用于显示目的,因为它们会更改输入对象类型。

【讨论】:

    【解决方案2】:

    #你可以这样做来获取超过 100MB 的进程

    Get-Process |
        ? {(($_.ws/1mb) -ge 100) -eq $true} |
        select name, @{name = 'Memory';expression = {($_.ws/1mb)}} 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多