networking - 如何在Powershell中检索Vista的网络状态(例如 “Local Only”, “Local and Internet”)

标签 networking powershell windows-vista wmi

我的网卡不稳定,尤其是从休眠状态恢复后,有时会掉线。退出对应于Vista的网络状态,在通知区域中显示为“仅限本地”。是否可以通过编程方式检索这些状态值(例如“有限连接”,“仅本地”,“本地和Internet”)?

我正在编写一个powershell脚本,该脚本将轮询以查看连接是否断开,如果连接断开,则重置适配器。目前,我正在尝试通过ping我的ISP的DNS服务器来检测连接状态。但是,由于操作系统已经正确识别了这种情况,因此,如果我可以检索此值,它将更加简单。

谢谢!

最佳答案

试试这个功能:

PS> function Get-NetworkStatus {
  $t = [Type]::GetTypeFromCLSID([Guid]"{DCB00C01-570F-4A9B-8D69-199FDBA5723B}")
  $networkListManager = [Activator]::CreateInstance($t)
  $connections = $networkListManager.GetNetworkConnections() 
  function getconnectivity {
    param($network)
    switch ($network.GetConnectivity()) {
       0x0000  { 'disconnected' }
      { $_ -band 0x0001 } { 'IPV4_NOTRAFFIC' }
      { $_ -band 0x0002 } { 'IPV6_NOTRAFFIC' }
      { $_ -band 0x0010 } { 'IPV4_SUBNET' }
      { $_ -band 0x0020 } { 'IPV4_LOCALNETWORK' }
      { $_ -band 0x0040 } { 'IPV4_INTERNET' }
      { $_ -band 0x0100 } { 'IPV6_SUBNET' }
      { $_ -band 0x0200 } { 'IPV6_LOCALNETWORK' }
      { $_ -band 0x0400 } { 'IPV6_INTERNET' }
    }
  }
  $connections | 
    % { 
      $n = $_.GetNetwork(); 
      $name = $n.GetName();
      $category = switch($n.GetCategory()) { 0 { 'public' } 1 { 'private' } 2 { 'domain' } }
      $connectivity = getConnectivity $n
      new-object PsObject -property @{Name=$name; Category=$category; Connectivity=$connectivity } 
    }
}

PS> Get-NetworkStatus
Name                                 Connectivity                         Category
----                                 ------------                         --------
Neznámá síť                          {IPV4_NOTRAFFIC, IPV6_NOTRAFFIC}     public
stefan                               {IPV6_NOTRAFFIC, IPV4_INTERNET}      private

如果通过管道传输$connections并将其从GetNetwork()输出到Get-Member,您会发现一些更有用的方法。

关于networking - 如何在Powershell中检索Vista的网络状态(例如 “Local Only”, “Local and Internet”),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2396054/

相关文章:

c++ - token 桶的实现

networking - TCP中的流量控制和拥塞控制有什么区别?

c# - Citrix 7.6 代理 SDK C#/Powershell

powershell - 在 NuGet 包安装/初始化期间运行的 Powershell 脚本有哪些安全限制?

windows-vista - 在 Windows Vista 上,我可以使用任何帐户将数据写入何处,并且可以从所有其他帐户查看?

python - Scapy 嗅探过滤器不起作用

java - Retrofit 从重定向 URL 获取参数

具有 InvariantCultureIgnoreCase 的 PowerShell HashSet 包含仍区分大小写

asp.net - 在 VS 2005 中启动调试时 w3wp 崩溃

python - wxPython 在 Vista 下崩溃