我正在阅读一篇优秀文章跳过空的CSV对象
我发现这很有启发性,因为它帮助我了解了一些事情
让我对PowerShell命令行开关Import-Csv
感到困惑。我有一个
我怀疑有人会帮助我。请允许我简要提供
一些背景。我确信我错过了一些简单的东西,请原谅我。
以下是使用$csvFileToImport
导入的小型CSV文件(Import-Csv
)的内容:
RegionId,RegionName 6, "Northeast US" 7, "Midwest US" 8, "South US" 9, "West US"
我使用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”),我能够推断出另一个
财产是“名称”。 “名称”或“值”均未列为成员
System.Management.Automation.PSCustomObject
我确信我错过了一些批判性的理解,我希望有人可以帮助我?
提前感谢您的任何建议或帮助。
此致
安德鲁。
答案 0 :(得分:0)
我认为你正在努力。请考虑以下事项:
$a = "id, region", "6, Northeast US", "7, Midwest US", "8, South US", "9, West US"
$b = ConvertTo-Csv $a
$b | Get-Member
这应该向您显示$ b是一个System.Management.Automation.PSCustomObject,其中包含NoteProperty'id'和'region'。现在您可以输入
$b[0].region
你应该回到“美国东北部”。你真的不想使用$ b [0] .PSObject.Properties.Value [0]。只需使用原始csv文件中的“标题名称”。
您可以将任何对象传递给Get-Member(或别名'gm')以查找属性和方法等。花一些时间以交互方式使用PowerShell,这是值得的。