首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将lancom路由器文件sysinfo转换为csv

将lancom路由器文件sysinfo转换为csv
EN

Stack Overflow用户
提问于 2021-03-05 23:20:38
回答 2查看 95关注 0票数 0

我从LANCOM路由器加载了sysinfo文件以获取一些信息。是否可以使用powershell将此文件转换为csv?

代码示例:

代码语言:javascript
复制
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或更高版本。如果没有转换,我就解决不了问题。

这是我的代码示例:

代码语言:javascript
复制
    $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中的内容

代码语言:javascript
复制
"DEVICE"
"LANCOM 1781AWHW-RELEASE"

这不是CSV格式.有什么想法吗?

不需要转换的我的解决方案-字符串:

代码语言:javascript
复制
    $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
EN

回答 2

Stack Overflow用户

发布于 2021-03-05 23:32:35

导出到CSV很容易(使用Export-Csv) --解析输入文件是很棘手的。

PowerShell (Version4.0及更高版本)附带了一个相当实验性的、但非常酷的cmdlet,名为ConvertFrom-String --给它一个示例模板,它将“弄清楚”如何解析输入。

这个用例非常适合于ConvertFrom-String

代码语言:javascript
复制
# 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
票数 2
EN

Stack Overflow用户

发布于 2021-03-06 00:44:17

这真的很酷,我不知道从字符串转换。由于某种原因,我在Linux上的7.1上没有那个cmdlet。

我认为这也能起作用:

代码语言:javascript
复制
$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()}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66500817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档