Я хотел бы создать сценарий, который обнаруживает и задерживает выключение на ПК с 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)
ТНХ за помощь
почему лет проверка $ global: shuttingDown в if condition ??? вам не нужно, потому что вы устанавливаете его извне. –
У меня есть эта форма сценария, где powershell предотвращает выключение, и я это проверю на выключение системы ... Я понимаю, что вы имеете в виду, это не имеет смысла. Я хочу проверить, выключена ли система, но я не могу найти способ проверить это. Вы знаете, как это сделать? – damiguel
Я не понимаю, почему вы проверяете 'if ($ global: shuttingDown) {}'. Поскольку он получит true или false, и в обоих случаях условие приведет к истинному. Вы не можете опубликовать какой-то сценарий, взятый откуда-то, не понимая логики. Существует логическая ошибка, которая мешает вам ударить '& '$ env: SystemRoot \ System32 \ Shutdown.exe" -a; ' –