您在这里想要什么并不完全清楚 - 什么样的对象以及用于什么目的?
我会举一个你可以做什么的例子......
假设您想将该文本文件转换为 CSV 文件以便轻松导入 Excel,请从读取文件内容开始:
$input = Get-Content C:\TextFile.txt
现在,创建一个数组,您将在其中存储您创建的每个对象:
$array = @()
现在,我们将进入一个循环,解析文件内容。如果该行以“用户名”开头,则使用冒号作为分隔符分割该行,将第二项(0-relative 因此第二项为第一)抓取到一个变量中。
如果行以“PhoneNumber”开头,则将 $writeobj 变量设置为 true(在循环的每次迭代开始时重置为 false)并再次使用 split 将“PhoneNumber”值存储在 $PhoneNumber 中。
然后检查$writeobj 是否为真,如果是,则创建一个新对象,添加一个NoteProperty,其名称为用户名,用户名值存储在文件的前一行中。
然后添加一个名为 PhoneNumber 且值为 $PhoneNumber 的 NoteProperty。然后,将对象添加到数组中。
这会在文件内容中一直重复:
$input | foreach-object {
$writeobj = $false
$obj = New-Object System.Object
If ($_ -match 'username*') {
$Username = ($_ -split ':')[1]
}
If ($_ -match 'PhoneNumber*') {
$PhoneNumber = ($_ -split ':')[1]
$writeobj = $true
}
If ($writeobj){
$obj | Add-Member -type NoteProperty -name Username -value $Username
$obj | Add-Member -type NoteProperty -name PhoneNumber -value $PhoneNumber
$array += $obj
}
}
退出循环后,将数组导出为 CSV 文件:
$array | Export-Csv -path C:\test.csv -NoTypeInformation
所以,完整的脚本是:
$input = Get-Content C:\TextFile.txt
$array = @()
$input | foreach-object {
$writeobj = $false
$obj = New-Object System.Object
If ($_ -match 'username*') {
$Username = ($_ -split ':')[1]
}
If ($_ -match 'PhoneNumber*') {
$PhoneNumber = ($_ -split ':')[1]
$writeobj = $true
}
If ($writeobj){
$obj | Add-Member -type NoteProperty -name Username -value $Username
$obj | Add-Member -type NoteProperty -name PhoneNumber -value $PhoneNumber
$array += $obj
}
}
$array | Export-Csv -path C:\test.csv -NoTypeInformation
查看下面在 Excel 中打开的 CSV 文件的屏幕截图。