代码之家  ›  专栏  ›  技术社区  ›  Andrew Strong

如何在powershell中检索vista的网络状态(例如“仅本地”、“本地和Internet”)。

  •  2
  • Andrew Strong  · 技术社区  · 16 年前

    我有一个片状的NIC,它会时不时地脱落,特别是在从冬眠中恢复后。退出对应于vista的网络状态,在通知区域显示为“仅本地”。是否有方法以编程方式检索这些状态值(例如“有限连接”、“仅本地”、“本地和Internet”)。

    我正在编写一个powershell脚本,它将轮询以查看连接是否断开,如果断开,则重置适配器。目前我正在尝试通过ping我的isp的dns服务器来检测连接状态。但是,由于操作系统已经正确地识别了这个条件,所以如果我能检索这个值,就会简单得多。

    谢谢!

    1 回复  |  直到 16 年前
        1
  •  2
  •   stej    16 年前

    尝试此功能:

    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 你会发现一些更有用的方法。

    推荐文章