Format-Table 呈现属性不可访问
Format-Table renders properties inaccessible
我想利用 Format-Table
来整齐地格式化一些属性。这工作正常,但是一旦我在一个对象上调用 Format-Table
,我就无法访问任何属性以供将来使用。
$VersionInfo = Get-ComputerInfo -Property "*version"
$VersionInfo.OsVersion
输出:
10.0.19042
$VersionInfoFT = Get-ComputerInfo -Property "*version" | Format-Table
$VersionInfoFT.OsVersion
输出:
<empty>
正如评论者所写,Format-*
cmdlet 仅用于显示目的。它们输出 格式化指令 ,只有当它在控制台或另一个“端点”(即任何 Out-*
cmdlet)结束时,才会产生格式丰富的输出。这些指令一般不能用来找回原始数据。
您通常将 未格式化的 对象保存在变量中以供进一步处理:
$VersionInfo = Get-ComputerInfo -Property "*version"
$VersionInfo.OsVersion
现在您可以像以前一样将格式化数据存储在另一个变量中 ($VersionInfoFT = $VersionInfo | Format-Table
),但这通常没有多大意义。通常,您要么立即输出格式化信息,要么将其转换为字符串。
# Format and output only the OsVersion property
$VersionInfo | Format-Table OsVersion
# Format and convert to string with indentation
$VersionInfoStr = ($VersionInfo | Format-List | Out-String -Stream) -join "`n "
Write-Verbose "All version info:$VersionInfoStr"
在最后一个示例中,将格式化输出存储为字符串是有意义的,以降低 Write-Verbose
调用的复杂性。这是通过管道传输到 Out-String
cmdlet 来完成的,它基本上会产生与您在控制台中看到的相同的输出,作为一个字符串。 -Stream
参数用于将结果字符串拆分为单独的行,因此我们可以重新加入它们以生成缩进输出。
我想利用 Format-Table
来整齐地格式化一些属性。这工作正常,但是一旦我在一个对象上调用 Format-Table
,我就无法访问任何属性以供将来使用。
$VersionInfo = Get-ComputerInfo -Property "*version"
$VersionInfo.OsVersion
输出:
10.0.19042
$VersionInfoFT = Get-ComputerInfo -Property "*version" | Format-Table
$VersionInfoFT.OsVersion
输出:
<empty>
正如评论者所写,Format-*
cmdlet 仅用于显示目的。它们输出 格式化指令 ,只有当它在控制台或另一个“端点”(即任何 Out-*
cmdlet)结束时,才会产生格式丰富的输出。这些指令一般不能用来找回原始数据。
您通常将 未格式化的 对象保存在变量中以供进一步处理:
$VersionInfo = Get-ComputerInfo -Property "*version"
$VersionInfo.OsVersion
现在您可以像以前一样将格式化数据存储在另一个变量中 ($VersionInfoFT = $VersionInfo | Format-Table
),但这通常没有多大意义。通常,您要么立即输出格式化信息,要么将其转换为字符串。
# Format and output only the OsVersion property
$VersionInfo | Format-Table OsVersion
# Format and convert to string with indentation
$VersionInfoStr = ($VersionInfo | Format-List | Out-String -Stream) -join "`n "
Write-Verbose "All version info:$VersionInfoStr"
在最后一个示例中,将格式化输出存储为字符串是有意义的,以降低 Write-Verbose
调用的复杂性。这是通过管道传输到 Out-String
cmdlet 来完成的,它基本上会产生与您在控制台中看到的相同的输出,作为一个字符串。 -Stream
参数用于将结果字符串拆分为单独的行,因此我们可以重新加入它们以生成缩进输出。