我使用 Write-Host 分析对象,但有时很难理解对象实际上是什么。
考虑:
Write-Host $null
Write-Host @()
Write-Host @($null, $null)
印刷:
# Actually it prints nothing
我想要这样的东西:
Null
@()
@(Null, Null)
有什么建议么?
我使用 Write-Host 分析对象,但有时很难理解对象实际上是什么。
考虑:
Write-Host $null
Write-Host @()
Write-Host @($null, $null)
印刷:
# Actually it prints nothing
我想要这样的东西:
Null
@()
@(Null, Null)
有什么建议么?
对于这个特定的示例,您可以通过将它们粘贴到对象的属性中来轻松获得所需的内容。举个例子,让我们创建一个包含三个测试的数组:
$tests = @($null,@(), @($null,$null))
function Write-Visible {
param($InputObject)
New-Object PSObject -Property @{ Object=$InputObject } |
Out-String | Out-Host
}
当然,这些Out-String | Out-Host
东西只是为了确保我们实际上不会将对象输出到管道,而是像 Write-Host 那样表现。
所以现在我们可以运行我们的测试:
PS> Write-Visible $tests[0]
Object
------
PS> Write-Visible $tests[1]
Object
------
{}
PS> Write-Visible $tests[2]
Object
------
{$null, $null}
当然,这样做的问题是它对于真实对象往往不是那么好,因为它会将它们变成对象的属性,在那里它们被渲染为“ToString()”......但是,在我的脑海中,如果没有新对象,我想不出如何调用那里发生的渲染魔法。
您可以编写一个为您进行漂亮打印的函数。类似以下内容可能会满足您的需求:
function pp($a) {
if ($a -eq $null) {
return "Null"
} elseif ($a -is [object[]]) {
$b = @()
foreach ($x in $a) {
$b += (pp $x)
}
$s = "@(" + [string]::Join(",", $b) + ")"
return $s
} else {
return $a
}
}
但是,shell 上的空数组仍然存在问题(不过,从 .ps1 文件中可以正常工作)。也不支持哈希表,但嵌套数组是。可能仍然需要一些管道,但可能会给出一个大致的方向。
阵法仿佛是一头丑陋的@($null, $null)
野兽,甚至不敢与它相比$null
。诡异的。
尝试做这样的事情会有多个问题。
get-help about_format.ps1xml
您可以从或从MSDN PowerShell 格式化文件页面获取更多信息。get-help get-host
详细信息,请参阅或访问TechNet 页面。您至少需要了解三个常见的主机:
ConsoleHost
Windows PowerShell ISE Host
PowerGUIScriptEditorHost
... 这
@( … )
操作是语法糖
[array] $( … )
所以——如果@()中的语句返回一个标量,它将被包装在一个数组中,但如果结果已经是一个数组,那么它就不会被嵌套......
我很想能够为此提供一些代码,但在这一点上它有点超出我的范围......
不适用于空数组,但您可以使用 format-xxx 命令之一。这有助于格式化没有有用的 ToString 覆盖的对象。例如
> $cmd = Get-Command -Name get-command
> $cmd
CommandType Name Definition
----------- ---- ----------
Cmdlet Get-Command Get-Command...
> write-host $cmd
Get-Command
> format-table -InputObject $cmd | out-string | out-host
CommandType Name Definition
----------- ---- ----------
Cmdlet Get-Command Get-Command...
你可以试试这个:
Write-Host '$null'
Write-Host '@()'
Write-Host '@($null, $null)'