gpt4 book ai didi

使用 powershell 解析/格式化字符串

转载 作者:行者123 更新时间:2023-12-02 04:09:18 25 4
gpt4 key购买 nike

这个original question不是关于powershell。我假设这些基本前提:

  • 我们正在运行 Windows 7
  • 我们要解析 Windows 7 附带的 systeminfo 实用程序的结果
  • 我们想从输出中提取有关网络适配器的信息,并将其放入一些数据结构中以进行进一步处理。

  • 现在,我知道有比运行 systeminfo 和解析输出更好的方法来获取网卡信息。我的兴趣不在这个特定的实用程序上。我正在考虑在powershell中解析/格式化一些文本的一般任务。我觉得 powershell 很适合这种任务,可能比 C# 更好(取决于具体要求)。这就是为什么我提供 my answer在原始问题的PowerShell中。

    我的问题是这个。总觉得powershell的一些语法有些繁琐。 您将如何改进我的代码? 请注意,代码不必以完全相同的结构返回完全相同的结果。 我正在寻找可以帮助进行文本解析/处理的技巧。 我一次又一次地看到社区在处理大量任务方面的独创性。我已经看到了复杂问题的简单解决方案,这些解决方案在有人向您展示之前并不明显。这就是我问的原因。

    这是代码:
    $networkCards = systeminfo | ForEach-Object {$a=0} {
    if ($_.startswith("Network Card(s)")) {$a=1} else {if ($a) {$_}}
    }

    $networkCards | ForEach-Object {$data=@{}} {
    if ($_.trim().startswith("[")) {
    $c = $_.trim(); $data[$c] = @()} else {$data[$c] += $_.trim()
    }
    }

    #Now we have a hash table with the keys as requested in the question
    #and the values are lists of separate strings, but those can be easily
    #concatenated if needed. Let's display it:
    $data

    最佳答案

    首先,请停止使用 Powershell 作为通常的脚本语言。

    PowerShell 使用对象和解析字符串绝对不是做你想做的事的好方法。我必须使你的脚本适应我的语言才能在 $data 中得到一些东西

    对我来说,这里的东西没有意义,但是你构造了一个数组的哈希表,我给你利用它的方法。

    所以要使用 $data 你可以写:

    foreach ($key in $data.keys)
    {
    write-Host ("The name is {0}, the value is {1}" -f $key, $data[$key])
    }

    就我而言,它给出了:
    The name is [02]: fe80::391a:2817:8f3e:6f2f, the value is System.Object[]
    The name is [02]: Intel(R) WiFi Link 5300 AGN, the value is System.Object[]
    The name is [02]: fe80::c70:cc38:cf64:eb27, the value is System.Object[]
    The name is [01]: 192.168.183.1, the value is System.Object[]
    The name is [01]: 192.168.0.3, the value is System.Object[]
    The name is [03]: VMware Virtual Ethernet Adapter for VMnet1, the value is System.Object[]
    The name is [05]: Microsoft Virtual WiFi Miniport Adapter, the value is System.Object[]
    The name is [02]: fe80::5d48:c4a:5987:ee73, the value is System.Object[]
    The name is [04]: VMware Virtual Ethernet Adapter for VMnet8, the value is System.Object[]
    The name is [01]: 192.168.234.1, the value is System.Object[]
    The name is [01]: Intel(R) 82567LM Gigabit Network Connection, the value is System.Object[]

    因为 $data[$key] 是一个数组。你可以写 :
    foreach ($key in $data.keys)
    {
    write-Host ("The name is {0}" -f $key)
    foreach($line in $data[$key])
    {
    Write-Host ("`t$line")
    }
    }

    对我来说,它给出了:
    The name is [02]: fe80::391a:2817:8f3e:6f2f
    The name is [02]: Intel(R) WiFi Link 5300 AGN
    Nom de la connexion : Connexion réseau sans fil
    État : Support déconnecté
    The name is [02]: fe80::c70:cc38:cf64:eb27
    The name is [01]: 192.168.183.1
    The name is [01]: 192.168.0.3
    The name is [03]: VMware Virtual Ethernet Adapter for VMnet1
    Nom de la connexion : VMware Network Adapter VMnet1
    DHCP activé : Non
    Adresse(s) IP
    The name is [05]: Microsoft Virtual WiFi Miniport Adapter
    Nom de la connexion : Connexion réseau sans fil 2
    État : Support déconnecté
    The name is [02]: fe80::5d48:c4a:5987:ee73
    The name is [04]: VMware Virtual Ethernet Adapter for VMnet8
    Nom de la connexion : VMware Network Adapter VMnet8
    DHCP activé : Non
    Adresse(s) IP
    The name is [01]: 192.168.234.1
    The name is [01]: Intel(R) 82567LM Gigabit Network Connection
    Nom de la connexion : Connexion au réseau local
    DHCP activé : Oui
    Serveur DHCP : 192.168.0.254
    Adresse(s) IP

    关于使用 powershell 解析/格式化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6054179/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com