PowerShell相当新,并想知道是否有人可以提供以下内容。基本上我有一个.txt文档,其中包含一些由特殊字符($)(例如)
分隔的记录 ID
输入日期
姓名
标题
地址
电话
$
ID
输入日期
姓名
标题
地址
电话
$
我想将$中的每个项目分成单个“记录”,以便我可以循环遍历每个记录。例如,我可以检查上面的每条记录,并返回所有没有输入电话号码的记录的记录ID。
提前致谢
答案 0 :(得分:1)
如果每条记录包含固定数量的属性,您可以采用此方法。它会在跳过美元符号行的同时循环创建自定义对象。
$d = Get-Content -Path C:\path\to\text\file.txt
for ($i = 0; $i -lt $d.Length; $i+=7) {
New-Object -TypeName PsObject -Property @{
'ID' = $d[$i]
'Date Entered' = $d[$i+1]
'Name' = $d[$i+2]
'Title' = $d[$i+3]
'Address' = $d[$i+4]
'Phone' = $d[$i+5]
}
}
答案 1 :(得分:1)
我曾经有同样的要求......这就是我做的方式
$loglocation = "C:\test\dump.txt"
$reportlocation = "C:\test\dump.csv"
$linedelimiter = ":"
$blockdelimiter = "FileSize"
$file = Get-Content $loglocation
$report = @()
$block = @{}
foreach ($line in $file)
{
if($line.contains($linedelimiter))
{
$key = $line.substring(0,$line.indexof($linedelimiter)).trimend()
$value = $line.substring($line.indexof($linedelimiter)+1).trimstart()
$block.Add($key,$value)
if ($block.keys -contains $blockdelimiter)
{
$obj = new-object psobject -property $block
$report += $obj
$block = @{}
}
}
}
$report
$report | Export-Csv $reportlocation -NoTypeInformation
因此,您循环遍历每一行,定义键和值,并将对象添加到哈希表中。一旦密钥包含blockdelimiter,新对象就会被写入数组并且哈希表被清除。
在我的情况下,linedelimiter是一个冒号,blockdelimiter是一个有效的记录,所以你必须做一些改变。如果这种方法适合您的需求,请告诉我,您无法找到该做什么。
P.S。默认情况下,只显示数组中第一个对象的noteproperties,因此您必须将数组传递给Select-Object并添加所需的所有属性。
GRTS。