我想创建一个脚本来检测并延迟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;' –