【问题标题】:How can you add text to a PowerShell table result?如何将文本添加到 PowerShell 表结果?
【发布时间】:2018-01-15 09:01:00
【问题描述】:

我试图弄清楚如何将一些文本(例如 MHz 或 GB)添加到 PowerShell 表的结果中。是否可以使用foreach 循环?

Get-WmiObject Win32_PhysicalMmory |
    Format-Table Banklabel, Manufacturer,
        @{Label="Speed"; Expression={$_.ConfiguredClockSpeed}},
        @{Label="Capacity"; Expression={[int64]($_.Capacity/1GB)}} -AutoSize

我有另一种接近的方法,但不适用于多个结果,因为它不会将信息添加到新行中。

$Disk = Get-WmiObject -Class Win32_LogicalDisk
$DiskSpace = [int64]($Disk.Size/1GB)
$FreeSpace = [INT64]($Disk.FreeSpace/1GB)
$UsedSpace = (($DiskSpace-$FreeSpace)/$DiskSpace).ToString("P0")
$OBJ = New-Object PSObject
$OBJ | Add-Member NoteProperty "ID" ($Disk.DeviceID)
$OBJ | Add-Member NoteProperty "Name" ($Disk.VolumeName)
$OBJ | Add-Member NoteProperty "Format" ($Disk.FileSystem)
$OBJ | Add-Member NoteProperty "Capacity" ("$DiskSpace-GB")
$OBJ | Add-Member NoteProperty "Free Space" ("$FreeSpace-GB")
$OBJ | Add-Member NoteProperty "Used" ($UsedSpace)
Write-Output $OBJ | Format-Table

【问题讨论】:

    标签: powershell get-wmiobject


    【解决方案1】:

    您可以使用更复杂的表达式,请参见以下示例:

    Get-WmiObject win32_physicalmemory | Format-Table Banklabel, Manufacturer, @{Label="Speed";`
      Expression={$_.ConfiguredClockSpeed}}, @{Label="Capacity";`
      Expression={([INT64]($_.Capacity/1GB)).ToString()+" GB"}} -autosize
    

    【讨论】:

      【解决方案2】:

      根据您的要求使用串联。

      替换

      Get-WmiObject win32_physicalmemory | Format-Table Banklabel, Manufacturer, @{Label="Speed";` Expression={$_.ConfiguredClockSpeed}}, @{Label="Capacity";` Expression={[INT64]($_.Capacity/1GB)}} -autosize
      

      用这个:

      Get-WmiObject win32_physicalmemory | Format-Table Banklabel, Manufacturer, @{Label="Speed";` Expression={"$($_.ConfiguredClockSpeed) MHz"}}, @{Label="Capacity";` Expression={"$([INT64]($_.Capacity/1GB)) GB"}} -autosize
      

      希望对你有帮助。

      【讨论】:

        【解决方案3】:

        因为您已经在使用计算属性,所以很容易扩展它们。这取决于您尝试实现的目标。我建议将单元放入表头,如下所示:

        Get-WmiObject win32_physicalmemory | 
            Select-Object -Property Banklabel, Manufacturer, @{Name='Speed in MHz';Expression={$_.ConfiguredClockSpeed}}, @{Name='Capacity in GB'; Expression={[INT64]($_.Capacity/1GB)}}
        

        如果你真的需要它在表格中,你可以这样做:

        Get-WmiObject win32_physicalmemory | 
            Select-Object -Property Banklabel, Manufacturer, @{Name='Speed';Expression={"{0} MHz" -f $_.ConfiguredClockSpeed}}, @{Name='Capacity in GB'; Expression={"{0} GB" -f [INT64]($_.Capacity/1GB)}}
        

        但是这样你就失去了用你的结果进行计算的可能性。现在只是字符串。

        【讨论】:

        • 他更多地在结果中而不是在列名中查看它。
        • 这就是我发布两者的原因。 ;-)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-01
        • 1970-01-01
        • 2019-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-06
        相关资源
        最近更新 更多