批处理 - 尝试获取 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中的总虚拟内存
尝试使用完成处理程序从 google firebase 获取数据时遇到问题
停止多处理遍历整个列表以获取 bruteforcer 的功能
当我尝试使用地理编码器获取地址时,给出“未处理的异常:PlatformException(失败,失败,null)”的运行时错误