2016-10-28 70 views
0

我有一個在啓動時運行的PowerShell腳本。它專爲運行在Raspberry Pi3上的小型站點服務器而設計。PowerShell Get-Netadapter掛起

它所做的一件事是重置網絡設置。但是在某些情況下,以下命令仍然存在。

$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

它通常掛在第一或以上各行的最後一行。 – Zac

+0

你是否以管理員身份運行? –

+0

是的。這是一個以管理員身份運行的計劃任務。它有時會奏效,但不會有其他變化。 – Zac

回答

0
以不同的方式

在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? 
} 
+0

我試過了。也嘗試在另一個線程中調用單獨的ps1文件。無論我嘗試什麼,都會掛起。 Powershell.exe進程正在運行,並在25%左右,所以我假設發生了一些事情,但無法確認。 – Zac

+0

您可能需要進行一些調試(記錄到文件?)以確認腳本掛起的時間和位置。 –

+0

我當時是。它只會掛在get-netadapater上。如果通過PowerShell手動調用,確切的腳本沒有問題。它只有通過計劃任務調用纔會有問題。任務管理器將任務顯示爲具有25%CPU的powershell.exe。我最終放棄並使用Linux。 – Zac

1

你沒有說什麼操作系統你(是)上運行,但我要承擔的Windows,因爲你不提的dotNet核心

這可能成爲CIM-vs-WMI問題,尤其是在查詢Pi上的硬件屬性的情況下。你可能會使用Get-WMIObject取得更好的成績:

Get-WmiObject -Class "Win32_NetworkAdapter" -Filter "NetConnectionStatus=2" 
相關問題