Powershell 更改数据表中的输出 object 名称

Powershell change output object name from datatable

我正在将数据 table 中的几个 object 输出到 .csv 文件,并想更改 object 名称。

这很好用:

$dataset.tables[0] | select-object System.ItemName, System.ItemPathDisplay | Export-Csv -Path D:\SEARCH_RESULT.csv -NoTypeInformation

但是我想将 System.ItemName 更改为 SKU 并尝试了以下操作:

$dataset.tables[0] | select-object @{N='SKU';E={$_.System.ItemName}}, System.ItemPathDisplay | Export-Csv -Path D:\SEARCH_RESULT.csv -NoTypeInformation

这给出了正确的列标题但空白行。所以尝试了这个给出行但他们都说 SYSTEM.ITEMNAME:

$dataset.tables[0] | select-object @{N='SKU';E={$dataset.tables[0].Columns['SYSTEM.ITEMNAME']}}, System.ItemPathDisplay | Export-Csv -Path D:\SEARCH_RESULT.csv -NoTypeInformation

显然我没有正确引用 object。非常感谢任何帮助。

$_.System.ItemName更改为$_.'System.ItemName'

您的 属性 名称是 System.ItemName,如果 属性 名称本身包含 .,则必须 引用 - 否则,PowerShell 将其解释为 nested property access

也就是说,$_.System.ItemName 首先在名为 System 的对象 $_ 上查找 属性,然后查找 ItemName 属性第一个 属性 的值;访问 non-existent 属性时,PowerShell 默认为 $null

将此与使用 System.ItemName 作为 参数 传递给 Select-Object cmdlet 的(位置隐含的)-Property 参数进行对比,其中参数是 always 解释为 single 属性 名称(无论是否引用)。
换句话说:Select-Object直接支持嵌套 属性访问,但你可以通过calculated property,就像你的方法一样。