我想創建一個腳本來檢測並延遲Windows 10 PC的關機,並顯示一條消息,如果在此刻插入USB-Stick時關掉。如何停止關機並在Windows 10上使用Powershell執行某些操作
我的問題是,我的腳本不停止關機。我對Powershell很新穎。 Sry爲我的英語。
這是我得到:
[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)
THX對您有所幫助
爲什麼喲在if條件中檢查$ global:shuttingDown ???你不需要它,因爲你在外部設置它。 –
我得到了這種形式的腳本,其中powershell防止關機,我thoug我的方式來檢查系統關機...我明白你的意思是沒有任何意義。我想檢查系統是否關機,但我無法找到一種方法來檢查。你知道怎麼做嗎? – damiguel
我不明白你爲什麼要檢查'if($ global:shuttingDown){}'。因爲它會收到真或假,並且在兩種情況下,條件都會導致真實。您不能在不理解邏輯的情況下發布某個腳本。有一個邏輯錯誤,它會阻止你點擊'&「$ env:SystemRoot \ System32 \ Shutdown.exe」-a;' –