我有一个在启动时运行的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或我可以抓住挂起的方式(它没有错误)
答案 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?
}