Powershell从数据表更改输出对象名称

发布于 2025-01-16 14:03:35 字数 732 浏览 1 评论 0原文

我正在将数据表中的几个对象输出到 .csv 文件,并希望更改对象名称。

这工作正常:

$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

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

I'm outputting a couple of objects from a data table to a .csv file and wanted to change the object names.

This works fine:

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

However I'd like to change System.ItemName to SKU and have tried the following:

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

This gives the right column heading but blank rows. So tried this which give rows but they all say 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

Clearly I'm not referencing the object correctly. Any help greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

弥枳 2025-01-23 14:03:35

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

您的属性名称是 System.ItemName,并且如果属性名称本身包含 .,必须引用 - 否则,PowerShell 将其解释为嵌套 属性访问

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

将此与使用 System.ItemName 作为传递给 Select-Object cmdlet,其中参数是始终解释为单个属性名称(无论您是否引用它)。
换句话说:Select-Object直接支持嵌套属性访问,但您可以通过计算属性,如您的方法所示。

Change $_.System.ItemName to $_.'System.ItemName'

Your property name is System.ItemName, and if a property name itself contains ., it must be quoted - otherwise, PowerShell interprets it as a nested property access

That is, $_.System.ItemName looks for a property on object $_ named System first, and then for an ItemName property on the first property's value; PowerShell defaults to $null when accessing non-existent properties.

Contrast this with the use of System.ItemName as an argument passed to the (positionally implied) -Property parameter of the Select-Object cmdlet, where the argument is always interpreted as a single property name (whether you quote it or not).
In other words: Select-Object doesn't directly support nested property access, but you can do it via a calculated property, as in your approach.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文