首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析Netsh输出

解析Netsh输出
EN

Stack Overflow用户
提问于 2020-11-11 15:27:04
回答 2查看 921关注 0票数 1

我需要在powershell中解析netsh命令提供的输出。下面是我使用的命令

代码语言:javascript
复制
Netsh advfirewall show private

它证明了下面的输出

代码语言:javascript
复制
Private Profile Settings: 
----------------------------------------------------------------------
State                                 ON
Firewall Policy                       BlockInbound,AllowOutbound
LocalFirewallRules                    N/A (GPO-store only)
LocalConSecRules                      N/A (GPO-store only)
InboundUserNotification               Enable
RemoteManagement                      Disable
UnicastResponseToMulticast            Enable

Logging:
LogAllowedConnections                 Disable
LogDroppedConnections                 Disable
FileName                              %systemroot%\system32\LogFiles\Firewall\pfirewall.log
MaxFileSize                           4096

我的要求是访问上述输出中的每个值。有点像$result.state / $result.InboundUserNotification

我对PowerShell非常陌生,我在谷歌上搜索过这件事,却什么也找不到。

EN

回答 2

Stack Overflow用户

发布于 2020-11-11 15:50:55

如果必须解析此输出,则可以执行以下操作:

代码语言:javascript
复制
$netsh = (Netsh advfirewall show private |
    Select-String -Pattern "\s{2,}") -replace '\s{2,}','=' -replace '\\','\\' -join [System.Environment]::NewLine
$result = [pscustomobject](ConvertFrom-StringData $netsh)

ConvertFrom-StringData方法的问题是哈希表输出没有排序。如果顺序很重要,您只需将每行拆分为属性/值对,就可以创建哈希表:

代码语言:javascript
复制
$hash = [ordered]@{}
Netsh advfirewall show private | Select-String -Pattern "\s{2,}" |
    Foreach-Object {
         $key,$value = $_ -split '\s{2,}'
         $hash[$key] = $value
    }
$result = [pscustomobject]$hash
票数 1
EN

Stack Overflow用户

发布于 2020-11-11 15:56:38

下面是AdminOfThings答案使用ConvertFrom-StringData以及Foreach-Object-Begin-End参数的类似方法。

代码语言:javascript
复制
Netsh advfirewall show private |
     ForEach-Object -Begin{$ht = [ordered]@{}} {
        if($_ -match '\s{10,}')
        {
            $ht += $_ -replace '\\','\\' -replace '\s{10,}','=' | ConvertFrom-StringData
        }
    } -End{[PSCustomObject]$ht} -OutVariable result

和轻微的变化

代码语言:javascript
复制
Netsh advfirewall show private | Where-Object {$_ -match '\s{10,}'} |
     ForEach-Object -Begin{$ht = [ordered]@{}} {
        $ht += $_ -replace '\\','\\' -replace '\s{10,}','=' | ConvertFrom-StringData
    } -End{[PSCustomObject]$ht} -OutVariable result
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64789327

复制
相关文章

相似问题

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