2016-10-28 10 views
0

У меня есть сценарий PowerShell, который запускается при загрузке. Он предназначен для небольшого сервера сайта, работающего на малине 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

Да. Это запланированная задача, выполняемая как admin. Он работает несколько раз, но не другие, без изменений. – Zac

ответ

0

Не пробовал это на малине Pi, но вы могли бы переместить эту логику в ScriptBlock и запустить ее как Job (иначе называемый дочерний процесс), который вы могли бы контролировать для завершения и kill/retry, если это займет слишком много времени.

Пример кода:

$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. У этого есть проблема, если он вызван через запланированную задачу. Диспетчер задач показывает задачу как powershell.exe с 25% процессором. Я закончил тем, что отказался от Linux и использовал его. – Zac

1

Вы не сказали, что ОС вы (были) работает, но я буду считать Windows, так как вы не упоминаете Dotnet Сердечник

Это может быть проблемой CIM-vs-WMI, особенно если вы запрашиваете свойства оборудования на Pi. Вы можете получить лучшие результаты с помощью Get-WMIObject:

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