1

ネットワーク アダプタが機能しているかどうかを証明する簡単な方法はありますか? おそらく、接続しているネットワークに関係なく常に利用できる localhost (127.0.0.1) のような IP。ワイヤレス ネットワーク アダプタが動作しているかどうかだけを示すのは 1 つだけですか? それとも、これを確認するための簡単な診断チェックがありますか?

この質問に PowerShell というタグを付けたのは、それが私の好みの言語だからです。しかし、提案される可能性のある他のソリューションと統合する方法を見つけることができます。

これまでに試した

アダプターのプロパティを確認しようと考えたところ、ステータスと IP があることがわかりました。割り当てられた IP または接続状態があれば、すべてが機能していることを証明できると考えました。残念ながら、これらのプロパティはblankunknownであるため、使用できません。

$adapter = Get-WmiObject -Class Win32_NetworkAdapter | Where-Object {$_.Name -like '*Wireless*'}
$adapter.Status #returns 2; i.e. unknown
$adapter.NetworkAddresses #is blank

バックグラウンド

ドッキング中にラップトップを休止状態にしてからオンラインに戻すと、ドッキングされなくなり、ワイヤレス接続が失われ、アダプターの再起動が必要になるという問題があります。この投稿でも同じ問題が言及されています: Command/Powershell script to reset a network adapter

上記のコードを使用して、コンピューターのサスペンドが解除されたときに実行するタスクをスケジュールすることで、問題を自動的に解決したいと考えています (例: https://superuser.com/a/149924/156700 )。

ping を実行できる唯一のデバイスがルーターである自宅のネットワークにいる場合もあれば、ping できる範囲のマシンがあるオフィス ネットワークにいる場合もあり、別の場所にいる場合もあります...外部デバイスに ping を実行して、ネットワーク アダプタの再起動が必要かどうかをテストするための適切なターゲット候補を決定することは、理想よりも複雑です。

必要な場合にのみリセットするように、リセットする前にテストを実行したいと考えています。完了するためにネットワークの存在を必要とする他のタスクをキューに入れたい場合は、リセットが完了したら確認することも役立ちます。

4

1 に答える 1

0

WMI クラスWin32_NetworkAdapterにはAvailabilityプロパティがあるようです。 https://msdn.microsoft.com/en-us/library/aa394216(v=vs.85).aspx

「動作中」を表す値の範囲があります。今のところ、私は status だけで行きました3。つまり、すべてが期待どおりに 100% 機能している場合、劣化の可能性についての懸念はありません。シナリオによっては、修正する価値があるかもしれません。

function Test-NetworkAdapter {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string]$AdapterNameMask     
        ,
        [Parameter(Mandatory = $false)]
        [int[]]$HealthyStatusses = @(3) #100% working on full power; for list of other possible values, see https://msdn.microsoft.com/en-us/library/aa387884(v=vs.85).aspx
    )
    process {
       Get-WmiObject -Class Win32_NetworkAdapter `
        | Where-Object {$_.Name -like $AdapterNameMask} `
        | Select-Object @{Name='Working';Expression={$healthyStatusses -contains $_.Availability}}
    }
 }
function Reset-NetworkAdapter {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string]$AdapterNameMask 
    )
    process {
        Get-WmiObject -Class Win32_NetworkAdapter `
        | Where-Object {$_.Name -like $AdapterNameMask} `
        | %{ #in case multiple matches, loop through all
            $_.Disable()
            $_.Enable()    
        }
    }
}

[string]$wirelessAdapterMask = '*Wireless*'
#I could probably improve this to cope better should there be multiple matches / only resetting those with issues... but for now this meets my requirement
if (-not (Test-NetworkAdapter $wirelessAdapterMask)) {
    Reset-NetworkAdapter $wirelessAdapterMask
}
于 2016-08-03T08:38:12.243 に答える