Powershell import-csv $变量正确为空

Powershell import-csv $variable properly is null

我在使用 Powershell 2.0 版时遇到了一个奇怪的问题。

以下内容适用于较新版本,但在此版本上无法正常工作。感谢任何帮助。

$DB = Import-Csv -Path "$($path)\DBExtrat.csv"

很好。 Headers 在 DBExtrat.csv ('hostname','hostip','name','type') 如果 i 运行

所有 4 header 都被重组并显示
$DB

但如果我尝试 $DB.name$DB.hostname 它 returns 注意。我需要能够这样调用它,因为我的整个逻辑都与那些特定的变量名称相关联。

我已经尝试添加 -header 选项:

$DB = Import-Csv -Path "$($path)\DBExtrat.csv" -Header 'hostname','hostip','name','type'

但它不起作用,还会使用 header 数据创建不必要的额外行。

使用 $DB.name 等表达式,您试图获取集合 所有元素 name 属性 值 $DB,通过对 集合作为一个整体执行 属性 访问

此功能称为 member-access enumeration仅在 PowerShell v3+.

中可用

PowerShell v2 等价物 需要使用 Select-Object or ForEach-Object:

# Note the use of -ExpandProperty to ensure that only the property *value*
# is returned (without it, you get a *custom object* with a 'name' property).
$DB | Select-Object -ExpandProperty name

# Slower alternative, but can provide more flexibility
$DB | ForEach-Object { $_.name }

我建议使用@mklement0 的回答;简短。或者,针对您在评论中提出的问题,您可以尝试使用自定义对象并查看以下是否有效。

$import = Import-Csv -Path "$($path)\DBExtrat.csv"
$Object = New-Object psobject -Property @{
    'hostname' = $import | Select-Object -ExpandProperty hostname
    'hostip'   = $import | Select-Object -ExpandProperty hostip
    'name'     = $import | Select-Object -ExpandProperty name
    'type'     = $import | Select-Object -ExpandProperty type   
}
    "$Object.hostname - $Object.hostip"