2017-01-14 49 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

相關問題