2017-01-14 50 views
0

我想创建一个脚本来检测并延迟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对您有所帮助

+0

为什么哟在if条件中检查$ global:shuttingDown ???你不需要它,因为你在外部设置它。 –

+0

我得到了这种形式的脚本,其中powershell防止关机,我thoug我的方式来检查系统关机...我明白你的意思是没有任何意义。我想检查系统是否关机,但我无法找到一种方法来检查。你知道怎么做吗? – damiguel

+0

我不明白你为什么要检查'if($ global:shuttingDown){}'。因为它会收到真或假,并且在两种情况下,条件都会导致真实。您不能在不理解逻辑的情况下发布某个脚本。有一个逻辑错误,它会阻止你点击'&“$ 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

好的,首先感谢您的帮助!对此,我真的非常感激。所以,如果我运行这个代码...我看到在控制台“等待关机”几次。但是,如果我关闭我的电脑它正常关机。我不能让它中止关机。 – damiguel

+0

@damiguel:太棒了..接受答案,如果它可以帮助你 –

+0

看来你对PowerShell非常熟悉。你能否提供完整的代码来中止本地用户的关机?然后我会接受答案。我没有得到它的工作。也许这不是我最好的想法,因为我不熟悉PowerShell。我认为这很容易做到。 – damiguel

相关问题