我从LANCOM路由器加载了sysinfo文件以获取一些信息。是否可以使用powershell将此文件转换为csv?
代码示例:
DEVICE: LANCOM 1781AW
HW-RELEASE: B
SERIAL-NUMBER: 123456789232
MAC-ADDRESS: 00a057xxxxxx
IP-ADDRESS: 192.168.0.251
IP-NETMASK: 255.255.255.0
INTRANET-ADDRESS: 0.0.0.0
INTRANETMASK: 0.0.0.0
VERSION: 10.42.0383RU2 / 03.03.2021
VERSION-GIT: 0aefbcd5f2aed7fe48f91a0232621aaaf0fed4e6
NAME: 1781AW
CONFIG-STATUS: 17440;0;bd524ad8aa0436cc571317e9bf5f3f25fa4bb961.12254905032021.2414
FIRMWARE-STATUS: 0;0.58;0.2;10.42.0383RU2.03032021.58;10.42.0280RU1.09022021.57
LOADER: 4.12.0001Rel
HW-MASK: 00001100000000000000000001110011
FEATUREWORD: 00000100001000000100000100011100
REGISTERED-WORD: 00000100001000000100000100011100前两行是空的。
更新:
我在某些机器上没有PowerShell 4.0或更高版本。如果没有转换,我就解决不了问题。
这是我的代码示例:
$content=@'
DEVICE: LANCOM 1781AW
HW-RELEASE: B
SERIAL-NUMBER: 123456789232
MAC-ADDRESS: 00a057xxxxxx
IP-ADDRESS: 192.168.0.251
IP-NETMASK: 255.255.255.0
INTRANET-ADDRESS: 0.0.0.0
INTRANETMASK: 0.0.0.0
VERSION: 10.42.0383RU2 / 03.03.2021
VERSION-GIT: 0aefbcd5f2aed7fe48f91a0232621aaaf0fed4e6
NAME: 1781AWs
CONFIG-STATUS: 17440;0;bd524ad8aa0436cc571317e9bf5f3f25fa4bb961.12254905032021.2414
FIRMWARE-STATUS: 0;0.58;0.2;10.42.0383RU2.03032021.58;10.42.0280RU1.09022021.57
LOADER: 4.12.0001Rel
HW-MASK: 00001100000000000000000001110011
FEATUREWORD: 00000100001000000100000100011100
REGISTERED-WORD: 00000100001000000100000100011100
'@
$content=$content -replace '\s{2,}' -split ':|\n'
$array=@()
for($i=0;$i -lt $content.count;$i+=2)
{
$array+=[pscustomobject]@{($content[$i]).trim() = ($content[$i+1]).trim()}
}
$array |Export-Csv sysinfo.csv -Delimiter ";" -NoTypeInformation这是sysinfo.csv中的内容
"DEVICE"
"LANCOM 1781AWHW-RELEASE"这不是CSV格式.有什么想法吗?
不需要转换的我的解决方案-字符串:
$sysinfo = Get-Content .\temp\$filename -Raw
$sysinfo=$sysinfo -split ':|\r|\n'
$sysinfo=$sysinfo -replace '\s{2,}'
$sysinfo=$sysinfo -notmatch '^\s*$'
$sysinfoParsed=@()
for($i=0;$i -lt $sysinfo.count;$i+=2) {
[array]$sysinfoParsed+=[pscustomobject]@{Name=($sysinfo[$i]).trim();Value=($sysinfo[$i+1])}
}
# Export to CSV
$sysinfoParsed |Export-Csv .\temp\sysinfo.csv -Delimiter ";" -NoTypeInformation发布于 2021-03-05 23:32:35
导出到CSV很容易(使用Export-Csv) --解析输入文件是很棘手的。
PowerShell (Version4.0及更高版本)附带了一个相当实验性的、但非常酷的cmdlet,名为ConvertFrom-String --给它一个示例模板,它将“弄清楚”如何解析输入。
这个用例非常适合于ConvertFrom-String
# Read sysinfo from disk as a single multi-line string
$sysinfo = Get-Content .\path\to\sysinfo.txt -Raw
# Pass template to ConvertFrom-String, it'll figure out the rest:
$sysinfoParsed = $sysinfo |ConvertFrom-String -TemplateContent @'
{Name*:DEVICE}: {Value:LANCOM 1781AW}
{Name*:HW-RELEASE}: {Value:B}
'@
# Export to CSV
$sysinfoParsed |Export-Csv .\path\to\output.csv -NoTypeInformation发布于 2021-03-06 00:44:17
这真的很酷,我不知道从字符串转换。由于某种原因,我在Linux上的7.1上没有那个cmdlet。
我认为这也能起作用:
$content=@'
DEVICE: LANCOM 1781AW
HW-RELEASE: B
SERIAL-NUMBER: 123456789232
MAC-ADDRESS: 00a057xxxxxx
IP-ADDRESS: 192.168.0.251
IP-NETMASK: 255.255.255.0
INTRANET-ADDRESS: 0.0.0.0
INTRANETMASK: 0.0.0.0
VERSION: 10.42.0383RU2 / 03.03.2021
VERSION-GIT: 0aefbcd5f2aed7fe48f91a0232621aaaf0fed4e6
NAME: 1781AWs
CONFIG-STATUS: 17440;0;bd524ad8aa0436cc571317e9bf5f3f25fa4bb961.12254905032021.2414
FIRMWARE-STATUS: 0;0.58;0.2;10.42.0383RU2.03032021.58;10.42.0280RU1.09022021.57
LOADER: 4.12.0001Rel
HW-MASK: 00001100000000000000000001110011
FEATUREWORD: 00000100001000000100000100011100
REGISTERED-WORD: 00000100001000000100000100011100
'@
$content=$content -replace '\s{2,}' -split ':|\n'
$array=@()
for($i=0;$i -lt $content.count;$i+=2)
{
$array+=[pscustomobject]@{($content[$i]).trim() = ($content[$i+1]).trim()}
}https://stackoverflow.com/questions/66500817
复制相似问题