批处理 - 尝试获取 systeminfo.exe 的详细信息

Posted

技术标签:

【中文标题】批处理 - 尝试获取 systeminfo.exe 的详细信息【英文标题】:Batch - trying to obtain the detail of systeminfo.exe 【发布时间】:2014-03-27 22:05:16 【问题描述】:

喜欢这个结果..

SYSTEMINFO >> RESULTS.TXT

系统信息 |找到“网卡”

但是,这仅捕获第一行条目:

Network Card(s):           2 NIC(s) Installed.

我真正想看到的是:

Network Card(s):           2 NIC(s) Installed.
                           [01]: VMware Accelerated AMD PCNet Adapter
                                 Connection Name: Production
                                 DHCP Enabled:    No
                                 IP address(es)
                                 [01]: 1.1.1.1
                           [02]: VMware Accelerated AMD PCNet Adapter
                                 Connection Name: Backup
                                 DHCP Enabled:    No
                                 IP address(es)
                                 [01]: 2.2.2.2

无需运行整个系统信息 - 我可以捕获有关网卡的详细信息吗?

也曾尝试通过 PowerShell 来推动这一点..

& systeminfo.exe | & FIND.exe "Network Card"

而且也不工作.. :(

【问题讨论】:

【参考方案1】:

如果像我一样,Network Card(s): 总是在systeminfo 的输出中出现在最后,那么以下内容应该适合你。

@echo off
set s=
for /f "delims=" %%a in ('systeminfo') do (
    if defined s echo %%a
    for /f %%b in ("%%a") do if "%%b"=="Network" echo %%a & set s=1
)

s 到达Network Card(s) 时将其设置为开关并从那里输出所有内容。

IF Network Card(s) 部分没有出现在最后,您需要更明确的方法来获取网卡信息,并且您可以接受 CSV 格式的输出,那么这应该也可以工作(尽管可能过于复杂):

@echo off
setLocal enableDelayedExpansion
set c=0
for /f "delims=" %%a in ('systeminfo /FO CSV') do (
    set line=%%a
    set line=!line:,= !
    if "!c!"=="0" for %%b in (!line!) do (
        set /a c+=1
        if "%%~b"=="Network Card(s)" echo %%~b
    ) else for %%c in (!line!) do (
        set /a c-=1
        if "!c!"=="0" echo %%~c
    )
)

【讨论】:

这太棒了!!我喜欢它并且效果很好。我真的很想摆脱使用 PowerShell。【参考方案2】:

好吧,即使我刚刚阅读了您试图摆脱 PowerShell 的其中一个 cmets,因为我让它工作了,并且它转储了您的示例所拥有的所有信息,我想我还是会发布它.. . :)

function Get-NetworkCards 
[cmdletbinding()]
param(
    [parameter(Mandatory=$false)][string]$ComputerName = "LocalHost"
)
    $adapterCfg = ( gwmi -Class Win32_NetworkAdapterConfiguration -ComputerName $ComputerName | Sort-Object Index )

    $adapter = ( gwmi -Class Win32_NetworkAdapter -ComputerName $ComputerName | Sort-Object Index )

    foreach ( $nic in $adapterCfg ) 
        if( $nic.IPEnabled -eq $true ) 
            foreach ( $settings in $adapter ) 
                if( $settings.DeviceID -eq $nic.Index ) 
                    $curr = $settings
                
            
            $props = [ordered]@
                Description = $nic.Description;
                Connection = $curr.NetConnectionID;
                DHCPEnabled = $nic.DHCPEnabled;
                IPAddresses = $nic.IPAddress;
            

            $Obj = New-Object PSObject -Property $props

            $Obj
        
    


get-networkcards

【讨论】:

非常感谢您的帮助。我能够运行 PowerShell 和 Batch。我可以运行 VBS,但必须进行代码签名。只是想摆脱运行许多技术的困扰。再次感谢! 附带说明,您的实际上并没有返回 systeminfo 所做的一切。 SystemInfo 踢回物理适配器。如果你用这个替换你的整个 ForEach 循环,它会修复它:ForEach($NIC in $adapter)If($NIC.PhysicalAdapter)$Curr = $adapterCfg|?$_.Index -eq $NIC.DeviceID;[pscustomobject]@Description = $curr.Description;Connection = $NIC.NetConnectionID;DHCPEnabled = $Curr.DHCPEnabled;IPAddresses = $Curr.IPAddress @TheMadTechnician -- 好点,我错过了那个小细节...... :)【参考方案3】:

您想在 PowerShell 中执行的操作 - http://blogs.technet.com/b/heyscriptingguy/archive/2008/09/08/how-do-i-find-information-about-the-network-adapter-cards-on-my-computer.aspx

引用他们的脚本:

Param($computer = "localhost")
function funline ($strIN)

 $num = $strIN.length
 for($i=1 ; $i -le $num ; $i++)
   $funline = $funline + "=" 
    Write-Host -ForegroundColor yellow $strIN 
    Write-Host -ForegroundColor darkYellow $funline
 #end funline

Write-Host -ForegroundColor cyan "Network adapter settings on $computer"
Get-WmiObject -Class win32_NetworkAdapterSetting `
-computername $computer |
Foreach-object `
 
  If( ([wmi]$_.element).netconnectionstatus -eq 2)
    
     funline("Adapter: $($_.setting)")
     [wmi]$_.setting
     [wmi]$_.element
     #end if
  #end foreach

【讨论】:

【参考方案4】:

PowerShell 中带有文本提取的系统信息:

$sys = systeminfo
$start = ($sys | select-string "network card" -SimpleMatch).LineNumber
$sys[($start-1)..($sys.Length-1)] | Out-File RESULTS.TXT

就我个人而言,我会使用基于 WMI 的解决方案来获取网络信息。

【讨论】:

以上是关于批处理 - 尝试获取 systeminfo.exe 的详细信息的主要内容,如果未能解决你的问题,请参考以下文章

如何获得Windows Server 2008 R2中的总虚拟内存

尝试通过错误处理获取 String[] 中元素的索引

尝试使用完成处理程序从 google firebase 获取数据时遇到问题

未处理的异常:错误状态:尝试从 Hive 获取值时没有元素

停止多处理遍历整个列表以获取 bruteforcer 的功能

当我尝试使用地理编码器获取地址时,给出“未处理的异常:PlatformException(失败,失败,null)”的运行时错误