重置前测试无线适配器是否正常工作
Test if Wireless Adapter is Working Before Resetting
有没有一种简单的方法可以证明网络适配器是否正常工作?也许一些像 localhost (127.0.0.1) 这样的 IP,无论我连接到哪个网络,它总是可用的;只有一个只显示我的无线网络适配器是否正常工作?或者也许有一些简单的诊断检查来确认这一点?
我已将此问题标记为 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
背景
我有一个问题,我的笔记本电脑在插接时休眠,然后将其恢复联机,不再插接,它失去了无线连接,需要重新启动适配器。这个post中提到了同样的问题:Command/Powershell script to reset a network adapter
我希望在我的计算机停止运行时(例如 https://superuser.com/a/149924/156700)通过将任务安排到 运行 来使用上面的代码自动解决问题。
有时我会在我的家庭网络上,那里唯一可以 ping 的设备是我的路由器,有时我会在我的办公室网络上,那里有很多我可以 ping 的机器,有时我会其他地方...因此确定一个好的目标候选者来测试我的网络适配器是否需要通过 ping 某些外部设备重新启动比理想情况更复杂。
我想 运行 在重置前进行测试,这样我只在需要时才重置。如果我希望将需要网络存在才能完成的其他任务排队,检查重置完成后也将很有用。
WMI class Win32_NetworkAdapter
似乎有一个 Availability
属性。
https://msdn.microsoft.com/en-us/library/aa394216(v=vs.85).aspx
有一个数值范围可以表示 "working";现在我只带了 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
}
有没有一种简单的方法可以证明网络适配器是否正常工作?也许一些像 localhost (127.0.0.1) 这样的 IP,无论我连接到哪个网络,它总是可用的;只有一个只显示我的无线网络适配器是否正常工作?或者也许有一些简单的诊断检查来确认这一点?
我已将此问题标记为 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
背景
我有一个问题,我的笔记本电脑在插接时休眠,然后将其恢复联机,不再插接,它失去了无线连接,需要重新启动适配器。这个post中提到了同样的问题:Command/Powershell script to reset a network adapter
我希望在我的计算机停止运行时(例如 https://superuser.com/a/149924/156700)通过将任务安排到 运行 来使用上面的代码自动解决问题。
有时我会在我的家庭网络上,那里唯一可以 ping 的设备是我的路由器,有时我会在我的办公室网络上,那里有很多我可以 ping 的机器,有时我会其他地方...因此确定一个好的目标候选者来测试我的网络适配器是否需要通过 ping 某些外部设备重新启动比理想情况更复杂。
我想 运行 在重置前进行测试,这样我只在需要时才重置。如果我希望将需要网络存在才能完成的其他任务排队,检查重置完成后也将很有用。
WMI class Win32_NetworkAdapter
似乎有一个 Availability
属性。
https://msdn.microsoft.com/en-us/library/aa394216(v=vs.85).aspx
有一个数值范围可以表示 "working";现在我只带了 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
}