如何解决foreach循环通过Powershell中的csv文件中的一行无法工作
我有一个脚本正在生成一些xml文件,当我在CSV中仅添加2行时,它会按预期运行,当我添加更多行时,它只是组合值而不是循环。示例的最后一行是使用12345678.xml文件保存文件,而是使用所有行中的数字对其进行命名。例 12345678 25789654 45658965 46982268.xml 它使用循环中的所有行执行此操作。 我需要帮助来遍历每一行并每行制作1个文件,而不是梳理所有行中的数据。应该循环执行4次,保存4个文件,而不是合并所有数据的1个文件。
#Define the source CSV with the list of MAC address and Phone Numbers
#$sourceCSV = Import-Csv "C:\users\bob\Desktop\phones.csv"
$xmltemp = Get-Content C:\users\bob\Desktop\xmltemp.xml
#Pull first 13 lines of the XML Temp as variable chunk1
$chunk1 = $xmltemp | Select-Object -First 11
#Select lines 15 to 20 of the XML Temp as variable chunk2
$chunk2 = $tdcxmltemp | Select-Object -First 6 -skip 10
#Select lines 22 to 116 of the XML Temp as variable chunk3
$Chunk3 = $tdcxmltemp | Select-Object -First 95 -skip 11
#Select lines 120 to eof of the XML Temp as variable chunk4
$Chunk4 = $tdcxmltemp | Select-Object -skip 119
#Loop to combine the data,and generate a MACaddress.xml for each MAC listed in the CSV file
Import-Csv "C:\users\bob\Desktop\phones.csv" | ForEach-Object {
foreach ($phone in $_.PSObject.Properties.mac){
$phonenum = $sourceCSV.number
$phonemac = $sourceCSV.mac
$update = $sourceCSV.update_server
# combine the first 13 lines of the script and Append phone number on line 13,add lines 15-20 into variable "xml2"
$xml2 = $chunk1 + ("<!-- Configuration file for Line " + $phonenum + " -->") + $chunk2
#Add Update server to xml2 variable and create xml3 variable,combine with chunk 3
$xml3 = $xml2 + (' <update_server source="STATIC">' + $updater + "</update_server>") + $Chunk3
#combine xml3 veriable with line 117 - append phone number (line_id) into variable xml4
$xml4 = $xml3 + (' <line_id>' + $phonenumr + "</line_id>")
#combine xml4 veriable with line 118 - append phone number (label) into variable xml5
$xml5 = $xml4 + (' <label>' + $phonenum + "</label>")
#combine xml5 veriable with line 119 - append phone number (sip_name) into variable xml6
$xml6 = $xml5 + (' <sip_name>' + $phonenumr + "</sip_name>")
#Combine xml6 veriable with chunk4 into variable xml7
$xml7 = $xml6 + $chunk4
#save the xml file and name with macadress
$xml7 | Out-File ('C:\users\bob\Desktop\' + $phonemac + '.xml')
}
}
CSV文件
mac,number,update_server
12345678,444-2223,192.168.1.1
25789654,1234567,192.168.1.1
45658965,7654321,192.168.1.1
46982268,99999999,192.168.1.1
解决方法
我不确定,但是我认为不是这个...
Import-Csv "C:\users\bob\Desktop\phones.csv" | ForEach-Object {
foreach ($phone in $_.PSObject.Properties.mac){
$phonenum = $sourceCSV.number
$phonemac = $sourceCSV.mac
$update = $sourceCSV.update_server
...
#save the xml file and name with macadress
$xml7 | Out-File ('C:\users\bob\Desktop\' + $phonemac + '.xml')
}
}
...您可能只想要这个:
Import-Csv "C:\users\bob\Desktop\phones.csv" | ForEach-Object {
$phonenum = $_.number
$phonemac = $_.mac
$update = $_.update_server
...
#save the xml file and name with macadress
$xml7 | Out-File ('C:\users\bob\Desktop\' + $phonemac + '.xml')
}
请注意,在您的原始示例中,$sourceCSV.mac
是一个数组,其中包含csv文件中每个记录中的mac
属性的值-即@(12345678,25789654,45658965,46982268)
-因此,当PowerShell评估'C:\users\bob\Desktop\' + $phonemac + '.xml'
时,它将获取数组并列出每个项目,并在它们之间留有空格:
$csv = @"
mac,number,update_server
12345678,444-2223,192.168.1.1
25789654,1234567,192.168.1.1
45658965,7654321,192.168.1.1
46982268,99999999,192.168.1.1
"@
$data = $csv | ConvertFrom-CSV
$phonemac = $data.mac
$phonemac
# 12345678
# 25789654
# 45658965
# 46982268
"C:\users\bob\Desktop\" + $phonemac + ".xml"
# C:\users\bob\Desktop\12345678 25789654 45658965 46982268.xml
,
有人告诉我,foreach将$ phone的数据分配给每次迭代。
将$sourceCSV.number
更改为$phone.number
解决了该问题。
详细信息:
foreach ($phone in $sourceCSV){
更改
$phonenum = $sourceCSV.number
$phonemac = $sourceCSV.mac
$update = $sourceCSV.update_server
到
$phonenum = $phone.number
$phonemac = $phone.mac
$update = $phone.update_serve
解决了该问题,现在可以正常工作
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。