gpt4 book ai didi

powershell - PSObject 如何在显示为对象时将大小显示为 GB,但在作为属性调用时显示为字节?

转载 作者:行者123 更新时间:2023-12-03 23:33:22 24 4
gpt4 key购买 nike

当我使用 Get-Volume 时

$Volume = Get-Volume
$Volume

我得到结果

DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining      Size
----------- ------------ -------------- --------- ------------ ----------------- ------------- ----
R Recovery NTFS Fixed Healthy OK 482.8 MB 499 MB

当我调用属性 Size 我得到

$Volume.Size

我得到结果

523235328

我调用对象的时候属性Size怎么会显示499MB,但是当我直接调用属性时它显示的是字节的int。

我已查找脚本属性或别名,但在 $Volume.PSObject.Properties$Volume.PSObject.Methods

最佳答案

Trace-Command -Name * -Expression {Get-Volume C | Format-Table} -PSHost 返回很多的信息,包括:

DEBUG: 2021-03-02 10:18:20.5439 FormatViewBinding Information: 0 :         MATCH FOUND Table NAME: VolumeTableView  TYPE: Microsoft.Management.Infrastructure.CimInstance#MSFT_Volume

现在,有些人可能会对我获取格式化程序的笨拙方式提出异议,但这里是:

Get-FormatData -TypeName Microsoft.Management.Infrastructure.CimInstance#MSFT_Volume |
Select -Expand FormatViewDefinition |
Select -Expand Control |
Select -Expand Rows |
Select -Expand Columns |
Select -Expand DisplayEntry |
Select -Expand Value

(猜你也可以这样做 (Get-FormatData -TypeName Microsoft.Management.Infrastructure.CimInstance#MSFT_Volume).FormatViewDefinition.Control.Rows.Columns.DisplayEntry.Value,但我不是确信这样会好很多。)

显示以下列条目的脚本值:

 $size = $_.Size;
$postfixes = @( "B", "KB", "MB", "GB", "TB", "PB" )
for ($i=0; $size -ge 1024 -and $i -lt $postfixes.Length; $i++) { $size = $size / 1024; }
return "" + [System.Math]::Round($size,2) + " " + $postfixes[$i];

因此,Format-Table 会在您的 Size 列上调用一个预定义的格式化程序,而您在直接选择值时不会得到该格式化程序。

关于powershell - PSObject 如何在显示为对象时将大小显示为 GB,但在作为属性调用时显示为字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66443544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com