Powershell - 从管道中提取变量

标签 powershell

这是我第一次使用 Powershell,我需要一些关于查询的帮助。

我需要远程连接到公共(public)域上的一些服务器并从每个服务器中提取内存消耗,然后将它们显示到文本文件中。所有这些都适用于这个查询:

$serverList = @("DMOBBQ-008","DCOBF1-003","DCOBF1-013","DCOBF2-005","DCOBF2-006","DCOBF2-007","DCOBF2-015","DMOBB8-007","DMOBBE-000","DMOBBQ-005","DMOBBQ-006","DMOBBQ-007","DMOBBR-007","DMOBC4-002","DMOBBR-005","DCOBBN-D06")


ForEach($server in $serverList)
{
    Write-Host $server":"
    $results = (get-process w3wp -computername $server | where-object {$_.privatememorysize -gt 1000000000} | select name, @{l="Private Memory (GB)"; e={$_.privatememorysize / 1gb}}) 
    #Write-Host $results 
    $highMem = $results | ? { $_.'Private Memory (GB)' -gt 1.6 }
    Write-Host $highMem
}

#out-file -filepath C:\Memory_Script\Results.txt -inputobject $mem -encoding ASCII -width 50

我的问题是:我需要保存从每个服务器获得的内存值。
从那里,我需要一些逻辑来确定内存是否高于 1.6GB,并在文本文件顶部显示服务器列表。

我该怎么办?

另一个问题,我从一些教程中复制了一些查询,为什么“e =”在这部分查询中?
e={$_.privatememorysize / 1gb}

感谢您的时间。

最佳答案

要回答您的第一个问题,最好有一个对象数组。您当前的命令返回一个具有各种属性的对象。要为多台服务器执行此操作,您只需创建 $results作为一个数组并为每个服务器附加到它。

假设您以某种方式填充 $servers使用正确的列表:

$servers = Get-Content ".\list-of-servers.txt"
$results = @()

foreach($server in $servers) {
  $results += ,(get-process w3wp -computername $server | where-object {$_.privatememorysize -gt 1000000000} | select name, @{l="Private Memory (GB)"; e={$_.privatememorysize / 1gb}}) 
}

$highMem = $results | ? { $_.'Private Memory (GB)' -gt 1.6 }
$results包含所有服务器的列表,然后您可以如图所示过滤它以获取内存为> 1.6的进程.

要回答您的第二个问题,e={$_.privatememorysize / 1gb}是一种对对象的属性执行计算并将其保存为新属性的方法。它通常用于使事情更具可读性,如您的案例所示。 l="Private Memory (GB)"用于为计算的属性创建标签。

关于Powershell - 从管道中提取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31880311/

相关文章:

powershell - 有条件地排除 null 或空的 cmdlet 参数

powershell - 如何使用 Powershell 跨卷移动文件/文件夹?

windows - 如何将命令行参数传递给由 doskey 调用的 PowerShell 脚本

powershell - 如何使用 Azure Powershell 模块将属性添加到 Azure 表存储行

powershell - powershell变量不会在脚本的第二部分中使用

git - 将 PowerShell 脚本作为 git hooks 运行

Powershell从文本文件中检索变量

arrays - PowerShell 数组字典?

powershell - 使用 powershell 删除 .csv 文件中的最后一行

powershell - 有没有办法以编程方式获取 Azure AD 客户端 key 的描述?