2017-01-14 13 views
0

Я хотел бы создать сценарий, который обнаруживает и задерживает выключение на ПК с Windows 10 и показывает сообщение, если USB-Stick подключен к моменту неисправность.Как остановить остановку и сделать что-то с Powershell в Windows 10

Моя проблема заключается в том, что мой сценарий не останавливает выключение. Im довольно новый для Powershell. Прыгай за мой английский.

Это то, что я получил:

[System.Reflection.Assembly]::Load("System.Management, Version=2.0.0.0, 
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") 

$Man = New-Object System.Management.ManagementClass("Win32_USBHub") 
[System.Management.ManagementObjectCollection]$Devs = $Man.GetInstances() 

$global:shuttingDown = $false 
$sysevent = [microsoft.win32.systemevents] 
Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnding" -Action {$global:shuttingDown = $true; Write-Host " SessionEnding"} 
Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnded" -Action {$global:shuttingDown = $true; Write-Host " SessionEnded"} 

do { 
    Start-Sleep -Seconds 1 
     if ($global:shuttingDown) { 
      & "$env:SystemRoot\System32\Shutdown.exe" -a ; 

      $Devs | ForEach-Object { 
      if($_.GetPropertyValue("Name").ToString() -eq "USB-Massenspeichergerät"){ 

       Add-Type -AssemblyName PresentationCore,PresentationFramework 
       $ButtonType = [System.Windows.MessageBoxButton]::Ok 
       $MessageboxTitle = “USB-Stick gefunden” 
       $Messageboxbody = “Es wurde ein USB-Stick gefunden. Nicht vergessen mitzunehmen ;)” 
       $MessageIcon = [System.Windows.MessageBoxImage]::Warning 
       [System.Windows.MessageBox]::Show($Messageboxbody,$MessageboxTitle,$ButtonType,$messageicon) 

       Write-Output "" 
       Write-Output $_.GetPropertyValue("Name").ToString() 
       Write-Output "" 
      } 
      $Devs.Dispose() 
      $Man.Dispose() 
     } 
    } 
    Write-Host " Waiting for Shutdown" 
} while ($true) 

ТНХ за помощь

+0

почему лет проверка $ global: shuttingDown в if condition ??? вам не нужно, потому что вы устанавливаете его извне. –

+0

У меня есть эта форма сценария, где powershell предотвращает выключение, и я это проверю на выключение системы ... Я понимаю, что вы имеете в виду, это не имеет смысла. Я хочу проверить, выключена ли система, но я не могу найти способ проверить это. Вы знаете, как это сделать? – damiguel

+0

Я не понимаю, почему вы проверяете 'if ($ global: shuttingDown) {}'. Поскольку он получит true или false, и в обоих случаях условие приведет к истинному. Вы не можете опубликовать какой-то сценарий, взятый откуда-то, не понимая логики. Существует логическая ошибка, которая мешает вам ударить '& '$ env: SystemRoot \ System32 \ Shutdown.exe" -a; ' –

ответ

0

поэтому в основном, если $ глобальный: shuttingDown имеет значение, а затем использовать перерыв

do { 
    Start-Sleep -Seconds 1 
    if ($global:shuttingDown) {break} 
    Write-Host " Waiting for Shutdown" 
} while ($true) 
+0

Хорошо, сначала спасибо за помощь! Я очень ценю это. Итак, если я запустил этот код ... я несколько раз вижу в консоли «Waiting for Shutdown». Но если я выключу свой компьютер, он отключится нормально. Я не могу заставить его прекратить выключение. – damiguel

+0

@damiguel: great .. Примите ответ, если он вам поможет –

+0

Кажется, вы очень хорошо знакомы с powershell. Можете ли вы предоставить мне полный код, чтобы прервать выключение локальных пользователей? Тогда я приму ответ. Я не собираюсь работать. Может быть, это была не моя лучшая идея, потому что я не знаком с powershell. Я думал, что это очень легко сделать. – damiguel

 Смежные вопросы

  • Нет связанных вопросов^_^