2016-10-28 4 views
0

Ich habe ein PowerShell-Skript, das beim Booten ausgeführt wird. Es ist für einen kleinen Site-Server gedacht, der auf einem Raspberry Pi3 läuft.PowerShell Get-Netadapter hängt

Eines der Dinge, die es tut, ist das Zurücksetzen der Netzwerkeinstellungen. Die folgenden Befehle hängen jedoch in einigen Situationen.

$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 

Ich war auf der Suche für jede Hilfe, warum es vielleicht hängen, eine andere Art der Codierung der Netzwerkadapter auf DHCP oder einen Weg zurückzusetzen, in dem ich den Dreh fangen kann (es nicht Fehler)

+0

Es hängt typischerweise auf der ersten oder der letzten Zeile der obigen Zeilen. – Zac

+0

Haben Sie als Administrator ausgeführt? –

+0

Ja. Es ist eine geplante Aufgabe, die als Administrator ausgeführt wird. Es funktioniert manchmal, aber nicht ohne Änderungen. – Zac

Antwort

0

Haben Sie das nicht auf einem Raspberry Pi versucht, aber Sie könnten diese Logik in einen ScriptBlock umwandeln und es als Job (auch Kindprozess genannt) ausführen, den Sie überwachen können, um es zu beenden und wenn es zu lange dauert.

Beispielcode:

$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

Ich habe das versucht. Habe auch versucht, eine separate ps1-Datei in einem anderen Thread aufzurufen. Egal was ich versuche, es hängt. Der Powershell.exe-Prozess wird ausgeführt und liegt bei ungefähr 25%, also nehme ich an, dass etwas passiert, kann aber nicht bestätigen, was. – Zac

+0

Sie benötigen wahrscheinlich ein Debugging (Protokollierung in Datei?), Um zu bestätigen, wann und wo das Skript hängt. –

+0

Ich war. Es würde einfach auf dem Get-Netadapater hängen. Das genaue Skript hat keine Probleme, wenn es manuell über die Powershell aufgerufen wird. Es hat nur ein Problem, wenn es über eine geplante Aufgabe aufgerufen wird. Task-Manager zeigt die Aufgabe als powershell.exe mit 25% CPU. Ich habe aufgegeben und Linux benutzt. – Zac

1

Sie sagen nicht, was OS Sie sind (waren) Laufen, aber ich werde von Windows zu übernehmen, da Sie dotNet Kern nicht erwähnen

Dies könnte ein CIM-vs-WMI-Problem sein, besonders wenn Sie Hardware-Eigenschaften auf dem Pi abfragen. Sie könnten bessere Ergebnisse mit Get-WMIObject erhalten:

Get-WmiObject -Class "Win32_NetworkAdapter" -Filter "NetConnectionStatus=2"