我正在阅读一篇优秀的文章 Skipping empty CSV objects
我发现这很有启发性,因为它帮助我理解了一些在 PowerShell commandlet 方面让我感到困惑的事情Import-Csv
。我有一个问题希望有人能帮助我。请允许我简要介绍一些背景。我确定我错过了一些简单的东西,所以请原谅我。
$csvFileToImport
这是我使用导入的一个小 CSV 文件 () 的内容Import-Csv
:
区域 ID、区域名称 6、《美国东北部》 7、《美国中西部》 8、《南美》 9、《美国西部》
我使用以下方法处理了这个Import-Csv
:
命令:
$csvFileContent = Import-Csv -Path $csvFileToImport
我检查了这个对象 ( $csvFileContent
) 的成员,很明显这$csvFileContent
是一个对象数组:
TypeName: System.Object[]
我验证我可以显示这个数组中的第一个元素:
命令:
Write-Host ("Count of `$csvFileContent = {0}" -f $csvFileContent.Count)
输出:
Count of $csvFileContent = 4
列出返回的对象数组的第一项:
命令:
Write-Host ("`$csvFileContent[0] = {0}"-f $csvFileContent[0])
输出:
$csvFileContent[0] = @{RegionId=6; RegionName=Northeast US}
乍一看,这在我看来就像每个数组元素都包含一个哈希表,但通过检查数组的第一个元素包含的对象详细信息,情况并非如此:
命令:
$arrayElement = $csvFileContent[0]
命令:
Write-Host ("Type of object contained in the array returned from Import-Csv and the object members:")
输出:
TypeName: System.Management.Automation.PSCustomObject
从文章中我能够确定“Value”属性实际上是一个数组:
命令:
$whatIsThisValue = $csvFileContent[0].PSObject.Properties.Value
输出:
TypeName: System.Object[]
同样,按照使用“Value”属性的示例,我可以从数组中提取正确的值:
命令:
Write-Host ("`$csvFileContent[0].PSObject.Properties.Name[0] = {0}, `$csvFileContent[0].PSObject.Properties.Value[0] = {1}" -f $csvFileContent[0].PSObject.Properties.Name[0], $csvFileContent[0].PSObject.Properties.Value[0])
输出:
$csvFileContent[0].PSObject.Properties.Name[0] = RegionId, $csvFileContent[0].PSObject.Properties.Value[0] = 6
命令:
Write-Host ("`$csvFileContent[0].PSObject.Properties.Name[1] = {0}, `$csvFileContent[0].PSObject.Properties.Value[1] = {1}" -f $csvFileContent[0].PSObject.Properties.Name[1], $csvFileContent[0].PSObject.Properties.Value[1])
输出:
$csvFileContent[0].PSObject.Properties.Name[1] = RegionName, $csvFileContent[0].PSObject.Properties.Value[1] = Northeast US
这是我的问题...
在哪里列出或注明了包含自定义对象的数组元素包含一个“名称”数组的属性和一个“值”数组的属性。我从文章中推断出有一个“价值”属性。我将其称为自定义对象的属性是否正确?在先尝试了其他一些东西(比如“Key”)之后,我能够推断出另一个属性是“Name”。“名称”或“价值”均未列为成员
System.Management.Automation.PSCustomObject
我确定我缺少一些批判性的理解,我希望有人可以帮助我?
提前感谢您的任何建议或帮助。
真挚地,
安德鲁。