簡體   English   中英

在重置之前測試無線適配器是否正常工作

[英]Test if Wireless Adapter is Working Before Resetting

是否有一種簡單的方法來證明網絡適配器是否正常工作? 也許有些像localhost(127.0.0.1)這樣的IP總是可用的,無論我連接到哪個網絡; 只有一個只顯示我的無線網絡適配器是否正常工作? 或者可能有一些簡單的診斷檢查來確認這一點?

我把這個問題標記為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腳本用於重置網絡適配器

我希望使用上面的代碼通過安排在我的計算機停止運行時運行的任務來自動解決問題(例如https://superuser.com/a/149924/156700 )。

有時我會在我的家庭網絡上,唯一可以ping通的設備是我的路由器,有時我會在我的辦公室網絡上,那里有一系列可以ping通的機器,有時候我會在其他地方......所以通過ping一些外部設備來確定一個好的目標候選者以測試我的網絡適配器是否需要重新啟動比理想情況更復雜。

我想在重置之前運行測試,以便我只在需要時重置。 如果我希望將需要網絡存在的其他任務排隊,那么在重置完成后檢查也很有用。

似乎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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM