Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
能否在PowerShell属性中指定单位?_Powershell - Fatal编程技术网

能否在PowerShell属性中指定单位?

能否在PowerShell属性中指定单位?,powershell,Powershell,我正在使用PowerShell测量网络吞吐量。我的程序的最后一行是: [pscustomobject][ordered]@{Endpoint=$ip;Time=$timeinmillizes;Bytes=$totalBytes;Rate=[math]::Round$totalBytes/$timeinmillizes} 这将返回如下输出: Endpoint Time Bytes Rate -------- ---- ----- ---- 127.0.0.1

我正在使用PowerShell测量网络吞吐量。我的程序的最后一行是:

[pscustomobject][ordered]@{Endpoint=$ip;Time=$timeinmillizes;Bytes=$totalBytes;Rate=[math]::Round$totalBytes/$timeinmillizes}

这将返回如下输出:

Endpoint       Time   Bytes   Rate
--------       ----   -----   ----
127.0.0.1:9381   15 8388608 559241
是否有一种方法可以提示用户时间和速率的单位是多少?我认为答案是否定的,这就解释了为什么像Get-Date这样的命令会有带有直观名称的字段,比如Get-Date.Second

我不想传递难以键入的难看的属性名称。例如,[pscustomobject][ordered]@{Endpoint=$ip;Time=$timeinmillizes;Bytes=$totalBytes;Rate KB/sec=[math]::Round$totalBytes/$timeinmillizes};工作并产生所需的输出

Endpoint       Time   Bytes Rate (KB/sec)
--------       ----   ----- -------------
127.0.0.1:9405    9 8388608        932068
但现在像Select和whereobject这样的操作变得杂乱无章。如果要将自定义对象保存为$x,则必须使用$x访问速率字段。'rate KB/sec'。同样,我认为没有办法做到我想要的,我应该重新考虑我的方法。

您可以使用添加一个名为Rate的别名属性,它指向更混乱的速率KB/sec:

然后,用户可以使用凌乱的版本进行显示,使用整洁的版本进行脚本编写:

$object.Rate
1024
要查看常见cmdlet中别名属性的示例,只需查看Get进程的属性:

您可以使用添加一个名为Rate的别名属性,该属性指向更混乱的速率KB/sec:

然后,用户可以使用凌乱的版本进行显示,使用整洁的版本进行脚本编写:

$object.Rate
1024
要查看常见cmdlet中别名属性的示例,只需查看Get进程的属性:


如果您希望此新标题仅用于在屏幕上显示,也可以简单地以不同的方式输出对象,而无需更改原始标题:

$object = [PsCustomObject]@{
    Endpoint = $ip
    Time     = $timeInMilliseconds
    Bytes    = $totalBytes
    Rate     = [math]::Round(($totalBytes / $timeInMilliseconds))
}

$object | Format-Table -Property Endpoint, Time, Bytes, 
                                 @{Name = 'Rate (KB/sec)'; Expression = { $_.Rate }} -AutoSize
将在控制台上显示为


如果您希望此新标题仅用于在屏幕上显示,也可以简单地以不同的方式输出对象,而无需更改原始标题:

$object = [PsCustomObject]@{
    Endpoint = $ip
    Time     = $timeInMilliseconds
    Bytes    = $totalBytes
    Rate     = [math]::Round(($totalBytes / $timeInMilliseconds))
}

$object | Format-Table -Property Endpoint, Time, Bytes, 
                                 @{Name = 'Rate (KB/sec)'; Expression = { $_.Rate }} -AutoSize
将在控制台上显示为


顺便说一句,将哈希表强制转换为[pscustomobject]永远不需要[ordered],这是一种隐含的语法糖。只需使用不包含任何问题字符(如空格)的道具名称即可。[grin]ex=KB_PerSecAs将哈希表强制转换为[pscustomobject]时不需要[ordered]旁白-这是隐含的语法糖。只需使用不包含任何问题字符(如空格)的道具名称即可。这是一个很好的解决办法。最后,我得到了名为Rate和Rate KB/sec的字段,这在查看对象时有点难看,但它直接满足了我的需要:既能操作一个单词的变量,又能在较长的描述中单独查看其单位。@WilliamJohnHolden,您可以使用Format Table仅显示输出中所需的字段,或者,您可以完全打开并使用自定义文件创建自己的默认显示。这是一个很好的解决方案。最后,我得到了名为Rate和Rate KB/sec的字段,这在查看对象时有点难看,但它直接满足了我的需要:既能操作一个单词的变量,又能在较长的描述中单独查看其单位。@WilliamJohnHolden,您可以使用Format Table仅显示输出中所需的字段,或者,您可以完全打开并使用自定义文件创建自己的默认显示。
Endpoint       Time   Bytes Rate (KB/sec)
--------       ----   ----- -------------
127.0.0.1:9405    9 8388608        932068