返回

如何在PowerShell中从@{name =xyz}格式中提取xyz值?

windows

如何从 PowerShell 中的 @{name =xyz} 提取 xyz

问题陈述

当你从 CSV 文件导入项目到 PowerShell 脚本中时,它们通常会以 @{name =xyz} 的格式显示。这可能导致在路径中包含 @{name =xyz},例如:

$path = "C:\Users\$item\Downloads"

这会导致路径类似于:

C:\Users@{name =xyz}\Downloads

这会造成不便,因为你在脚本中需要使用 xyz 的值,而不是 @{name =xyz}。

解决方案

要从 @{name =xyz} 中提取 xyz,你可以使用 Select-Object 命令。例如,以下命令将从 CSV 文件中导入项目,并仅提取 name 属性的值:

$csv = Import-Csv -Path "C:\test\CLEAN-UP.csv" -Delimiter ";" | Select-Object -ExpandProperty name

通过将 -ExpandProperty name 参数传递给 Select-Object,你可以展开 name 属性并仅提取其值。这将返回一个仅包含 xyz 和 zyx 字符串的数组。

然后,你可以使用此数组来构建路径:

Foreach ($item In $csv) {
    Write-Output $item
    $path = "C:\Users\$item\Downloads"
    Write-Output $path
}

这将产生以下输出:

xyz
C:\Users\xyz\Downloads
zyx
C:\Users\zyx\Downloads

如你所见,路径中不再包含 @{name =xyz}。

结论

通过使用 Select-Object 命令,你可以从 @{name =xyz} 中提取 xyz 的值。这将使你能够在脚本中正确使用 xyz,从而解决你最初的问题。

常见问题解答

  1. 为什么我无法直接访问 @{name =xyz} 中的 xyz?
    答:这是因为 @{name =xyz} 是一个哈希表,它的值可以通过 .name 来访问。

  2. 为什么使用 Select-Object -ExpandProperty name?
    答:这会展开 name 属性并仅提取其值。

  3. 我可以使用其他方法吗?
    答:是的,还有其他方法可以从 @{name =xyz} 中提取 xyz,例如使用 Format-Table 或 ConvertTo-Json。

  4. 这个解决方案是否适用于所有情况?
    答:这个解决方案适用于从 CSV 文件导入项目的情况,其中项目以 @{name =xyz} 的格式显示。

  5. 我在使用这个解决方案时遇到问题,该怎么办?
    答:请确保你的 CSV 文件格式正确,并且你使用正确的命令语法。如果问题仍然存在,请在 PowerShell 论坛中寻求帮助。