【问题标题】:Powershell: showing value only instead of @{} in resultPowershell:在结果中仅显示值而不是@{}
【发布时间】:2017-09-12 19:36:50
【问题描述】:

我是 PWSH 的新手,对你们来说可能看起来很容易,但我找不到按预期显示结果的方法。

$vm2 = Get-VM VM1234
$vmMemUsageAvg = get-VM $vm2.Name | Select @{N="Mem.Usage.Average";E={[Math]::Round((($_ |Get-Stat -Stat mem.usage.average -Start (Get-Date).AddHours(-24)-IntervalMins 5 -MaxSamples (12) |Measure-Object Value -Average).Average),2)}}

现在,例如,当请求 $vmMemUsageAvg 的结果时,我收到以下输出:

C:\Windows\system32> $vmMemUsageAvg 
Mem.Usage.Average
-----------------
              5.9

但我只想输出值,例如: 5.9

将其放入 Excel 单元格中

$Sheet.Cells.Item($intRow, 13) = [String]$vmMemUsageAvg 

给我一​​个这样的字符串:

@{Mem.Usage.Average=5.9}

任何帮助欢迎仅显示此值

【问题讨论】:

  • 用 $Sheet.Cells.Item($intRow, 13) = [String]$vmMemUsageAvg 把它放在 Excel 单元格中给我一个这样的字符串:@{Mem.Usage.Average=5.9}
  • 您创建了一个对象,该对象具有名为“Mem.Usage.Average”的属性,该属性的值为 5.9。要仅查看该财产的价值,您必须仅要求该财产。 $vmMemUsageAvg."Mem.Usage.Average"。是的,将 5.9 包装在一个对象的属性中,然后立即解开它有点傻。
  • 是的!我试过 $vmMemUsageAvg.Mem.Usage.Average 但没有成功。报价使它起作用。谢谢!
  • @VinceD 这就是为什么您不应该在属性名称中包含. 的原因。如果没有引用它,它会在 Mem 属性中查找 Usage 属性,然后再查找 Averaged 属性。这令人困惑

标签: powershell output display


【解决方案1】:

通过使用Select-Object @{N="Mem.Usage.Average";E={...}},您正在创建一个具有Mem.Usage.Average 属性的对象,但它看起来只需要一个字符串。所以只需取出Select

$vm2 = Get-VM VM1234
$vmMemUsageAvg = [Math]::Round(((get-VM $vm2.Name | Get-Stat -Stat mem.usage.average -Start (Get-Date).AddHours(-24)-IntervalMins 5 -MaxSamples (12) | Measure-Object Value -Average).Average),2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多