1

Есть ли простой способ доказать, работает сетевой адаптер? Возможно, какой-то IP-адрес, например localhost (127.0.0.1), который всегда доступен независимо от того, с какой сетью я подключен; только тот, который показывает только, работает ли мой беспроводной сетевой адаптер? Или, может быть, есть простая диагностическая проверка, чтобы подтвердить это?Проверьте, работает ли беспроводной адаптер перед сбросом

Я отметил этот вопрос как PowerShell, так как это мой предпочтительный язык; но я могу найти способы интегрироваться с любыми другими решениями, которые могут быть предложены.

Пробовал до сих пор

Я думал о проверке свойств адаптера и нашел там статус и IP; Я полагал, что если бы был назначенный IP или связанный статус, который бы доказывал, что все работает; К сожалению, эти свойства: blank и unknown, поэтому я не могу их использовать. не

$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 является мой маршрутизатор, иногда я буду в своей офисной сети, где есть множество машин, на которых я могу пинговать, а иногда я буду в другом месте ... поэтому определение хорошего кандидата-кандидата для проверки того, нуждается ли мой сетевой адаптер в перезагрузке, пинговать какое-то внешнее устройство, является более сложным, чем идеальный.

Я хочу запустить тест перед сбросом, чтобы я только сбросил при необходимости. Также будет полезно проверить, как завершится сброс, если я захочу поставить в очередь другие задачи, требующие завершения работы сети.

+0

NB: Я только понял, что хотя статья, в которой говорилось мне о статусе 2 = неизвестно, в статье говорилось «статус», но изображение говорило «доступность»; это свойство, в котором я нуждаюсь !. http://rickgaribay.net/archive/2008/09/26/using-powershell-to-manage-network-interfaces-and-windows-services.aspx – JohnLBevan

ответ

0

Кажется, класс WMI Win32_NetworkAdapter имеет свойство Availability. https://msdn.microsoft.com/en-us/library/aa394216(v=vs.85).aspx

Существует ряд значений, которые могут представлять собой «рабочие»; пока у меня только статус 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 
} 
Смежные вопросы