【问题标题】:Convert the lancom router file sysinfo to csv将 lancom 路由器文件 sysinfo 转换为 csv
【发布时间】:2021-03-05 23:20:38
【问题描述】:

我从 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 或更高版本。如果没有 ConvertFrom-String,我就没有解决方案。

这是我的代码示例:

    $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 格式。有什么想法吗?

我没有 ConvertFrom-String 的解决方案:

    $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

【问题讨论】:

    标签: powershell


    【解决方案1】:

    导出为 CSV 很简单(使用 Export-Csv) - 解析输入文件很棘手。

    Windows PowerShell(4.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
    

    【讨论】:

      【解决方案2】:

      那真的很酷,不知道 ConvertFrom-String。由于某种原因,我在 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()}
      }
      

      【讨论】:

        猜你喜欢
        • 2020-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-06
        • 2021-09-11
        • 2012-02-16
        • 2018-01-29
        相关资源
        最近更新 更多