PowerShell Get-Netadapter挂起

时间:2016-10-28 05:24:11

标签: powershell raspberry-pi windowsiot

我有一个在启动时运行的PowerShell脚本。它专为在Raspberry Pi3上运行的小型站点服务器而设计。

它所做的一件事是重置网络设置。但是在某些情况下,以下命令会挂起。

$Adapter = Get-NetAdapter | ? {$_.Status -eq "up"}
$Interface = $Adapter | Get-NetIPInterface -AddressFamily "IPv4"
$Interface | Set-NetIPInterface -DHCP Enabled | Out-Null
$Interface | Set-DnsClientServerAddress -ResetServerAddresses | Out-Null

我正在寻找任何有关它可能挂起的帮助,一种不同的编码方式将网络适配器重置为DHCP或我可以抓住挂起的方式(它没有错误)

2 个答案:

答案 0 :(得分:1)

您没有说出您正在运行的操作系统,但我会假设Windows,因为您没有提及dotNet Core

这可能是CIM-vs-WMI问题,尤其是在查询Pi上的硬件属性的情况下。使用Get-WMIObject

可能会获得更好的结果
Get-WmiObject -Class "Win32_NetworkAdapter" -Filter "NetConnectionStatus=2"

答案 1 :(得分:0)

Haven没有在Raspberry Pi上尝试过这个,但你可以将这个逻辑转换为ScriptBlock并将其作为Job(也就是子进程)运行,你可以监视它完成并杀死/重试它是否也需要长。

示例代码:

$ResetAdapter = {
    ... your code here ...
}

$job = Start-Job -Name ResetAdapter -ScriptBlock $ResetAdapter

do {
  Start-Sleep -Seconds 1

  $Elapsed = ((Get-Date)-$job.PSBeginTime).TotalSeconds
} while (($job.State -eq "Running") -and ($Elapsed -lt 60))

if($job.State -eq "Running"){
  Stop-Job $job
  Remove-Job $job

  # try again?
}