我是ConvertFrom String的新手,需要能够完成以下工作。这只是一个基本的样本,但这正是我所需要的。
我有以下数据需要解析为CSV。
FirstName: John
LastName: Doe
Email: jdoe@hotmail.com
Tel: 666555444
FirstName: Robert
LastName: Smith
url: www.smith.com
两组数据都有"FirstName"one_answers"LastName",但其中一组有电子邮件和电话,另一组没有后者,但有url。在使用ConvertFrom字符串解析为CSV后,我应该得到:
FirstName LastName Email Tel url
Johhn Doe jdoe@hotmail.com 666555444
Robert Smith www.smith
但我得到的却是:
FirstName LastName Email Tel
Johhn Doe jdoe@hotmail.com 666555444
Robert Smith www.smith.com www.smith.com
我使用的模板:
$template=@'
FirstName: {FirstNameNombre*:John}
LastName: {LastName:Doe}
Email: {Email:jdoe@hotmail.com}
Tel: {Tel:666555444}
FirstName: {Nombre*:Robert}
LastName: {Apellidos:Smith}
url: {url:www.smith.com}
'@
$listContacts = Get-Content -Path "C:UsersUsuarioDesktopConversor_ABK2CVSPbas.txt"
$listContacts | ConvertFrom-String -TemplateContent $template
我在谷歌上搜索过论坛,但我发现最接近解决这个问题的方法是:
https://foxdeploy.com/2015/01/13/walkthrough-part-two-advanced-parsing-with-convertfrom-string/
它在哪里提到使用?和用于指示解析器变量是可选的或不需要的,但我不清楚如何使用它们。我在第一个模板集中尝试过{url?:},但在运行脚本时不断出错。
有什么想法可以让它发挥作用吗?这只是一个基本的示例,但其想法是使用我在这里学到的内容来促进>在6个MFP(佳能(到一个新的MFP(夏普(的几个地址簿中的300个联系人。佳能旧型号不提供CSV导出,而是提供与示例类似的格式(有电子邮件和文件夹地址(。
提前感谢您的建议!
--Jorge
我是ConvertFrom-String
的超级粉丝,尽管很多人说它有问题。它也已从较新版本的powershell中删除。抛开这些不谈,我认为这不是这份工作的合适工具。您需要相对一致的数据。我想提供一个替代方案。您的示例显示了由空行分割的数据。如果不是这样,请告诉我,我可以调整答案。
样本数据
$text = @'
FirstName: John
LastName: Doe
Email: jdoe@hotmail.com
Tel: 6665554444
FirstName: Robert
LastName: Smith
url: www.smith.com
'@
首先,我们将用空线把各段分开。我们将使用基于呼叫系统[Environment]::newline
的两条空线。然后,对于每个部分,我们将使用switch语句基于regex匹配捕获所需的数据。我们需要清除变量,以确保不会从前面的章节中遗留任何内容。最后,在pscustomwobject创建中填充所有匹配项。
$nl = [environment]::NewLine
$data = $text -split "$nl$nl"| foreach {
Remove-Variable first,last,email,tel,url -ErrorAction Ignore
switch -Regex ($_){
'FirstName: (.+)' {$first = $matches.1}
'LastName: (.+)' {$last = $matches.1}
'Email: (.+)' {$email = $matches.1}
'Tel: (.+)' {$tel = $matches.1}
'URL: (.+)' {$url = $matches.1}
}
[PSCustomObject]@{
FirstName = $first
LastName = $last
Email = $email
Tel = $tel
URL = $url
}
}
$data
的内容
FirstName : John
LastName : Doe
Email : jdoe@hotmail.com
Tel : 666555444
URL :
FirstName : Robert
LastName : Smith
Email :
Tel :
URL : www.smith.com
$data
输出为表
$data | Format-Table
FirstName LastName Email Tel URL
--------- -------- ----- --- ---
John... Doe... jdoe@hotmail.c... 666555444
Robert... Smith... www.smith.com
剩下的就是导出到CSV
$data | Export-Csv -Path somepathto.csv -NoTypeInformation
编辑
如果从文件中读取,重要的是它都是一个字符串,也是如此
$mydata = Get-Content -Path "C:UsersUsuarioDesktopConversor_ABK2CVSsample2.txt" -Raw