将输出值存储在变量中并在powershell中执行算术运算

时间:2015-01-05 14:35:20

标签: powershell

我正在使用powershell脚本获取PowerShell中某些进程的内存值,我还需要将值除以1024以转换KB / MB。

例如

  

PS>> $ memory = Get-Process nginx | Select-Object WS |格式范围 - 第1列

     

PS>> $ memory

     

62541824

此值以字节为单位。我需要将此值转换为KB / MB。所以我在那之后进行了div操作。

  

PS>> $ memory = $ memory / 1024

方法调用失败,因为[System.Object []]不包含名为' op_Division'的方法。

  

在C:\ script \ tomcat-mem.ps1:3 char:13   + $ mem = $ mem /<<<< 1024       + CategoryInfo:InvalidOperation:(op_Division:String)[],RuntimeException       + FullyQualifiedErrorId:MethodNotFound

任何人都可以帮我解决此错误。

1 个答案:

答案 0 :(得分:0)

因为您要管道format-wide,所以您返回一个对象而不是一个可以简单地转换为int的类型。以下更合适:

$memory = Get-Process nginx | Select-Object -ExpandProperty WS
$memory / 1024

证明:

$m = get-process explorer | select -expandproperty ws
$m.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType


$m = get-process explorer | select ws | format-wide -Column 1
$m.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

您可以看到第一个版本已隐式转换为Int32,因此可以在其上运行除法运算。