我希望远程收集数据,然后在xml文件的帮助下调整表头。这应该在一个循环中发生,看起来像这样:
foreach($tableheader in $table) {
$table.$tableheader = $xmlFile.$tableheader
}
除此之外,我尝试了以下方法:
$x = 0
$sitesonfig = Get-ConfigSite -AdminAddress localhost
foreach($Prop in ($siteconfig |get-member -MemberType Property | select -Property name))
{
$x += 1;
$siteconfig = $siteconfig | Select-Object * | format-table @{l="Smile$x";e={$_.$Prop}}
}
是的,我知道这看起来很傻,但我真的不知道,如何逐个更改标题,而不是每次都列出所有其他标题。
答案 0 :(得分:0)
一种可能性是使用循环来创建传递给Format-Table的标题映射。
这是您修改的第二个示例,用于演示此概念。您应该能够对此进行调整以从XML文件中获取标头信息。
$x = 0
$siteconfig = Get-ConfigSite -AdminAddress localhost
$headerMap = @()
foreach($Prop in ($siteconfig |get-member -MemberType Property | select -ExpandProperty name))
{
$x += 1;
$headerMap += @{
l="Smile$x";
e={ $_.$Prop }.GetNewClosure()
}
}
$siteconfig | Format-Table $headerMap
要点
Select -Property name
需要更改为Select -ExpandProperty name
。原因是PowerShell中的Select-Object
将返回一个过滤到所选成员的对象,但是您需要一个字符串来按名称获取属性值。 -ExpandProperty
参数会将其扩展为字符串值。 GetNewClosure()
调用它来捕获创建脚本块时的$Prop
值与调用时的值$Prop
。如果您对闭包和PowerShell的范围规则的概念不熟悉,这可能会有点混乱。如果没有这个,由于PowerShell的范围规则,$Prop
将在Format-Table
使用它时评估GetNewClosure()
的值。通过调用$Prop
,在调用GetNewClosure()
时会捕获struct message
的值,这就是我们在这种情况下所需的内容。