我对使用Windows PowerShell挂起或休眠计算机感兴趣。您如何实现的?

我已经知道Stop-ComputerRestart-Computer cmdlet都是现成的,但是它们并没有实现我所追求的功能。

最佳答案

您可以在SetSuspendState类上使用System.Windows.Forms.Application方法来实现此目的。 SetSuspendState方法是静态方法。

[MSDN] SetSuspendState

有三个参数:

  • 状态[System.Windows.Forms.PowerState]
  • 强制[bool]
  • disableWakeEvent [bool]

  • 调用SetSuspendState方法:
    # 1. Define the power state you wish to set, from the
    #    System.Windows.Forms.PowerState enumeration.
    $PowerState = [System.Windows.Forms.PowerState]::Suspend;
    
    # 2. Choose whether or not to force the power state
    $Force = $false;
    
    # 3. Choose whether or not to disable wake capabilities
    $DisableWake = $false;
    
    # Set the power state
    [System.Windows.Forms.Application]::SetSuspendState($PowerState, $Force, $DisableWake);
    

    将其放入更完整的功能可能类似于以下内容:
    function Set-PowerState {
        [CmdletBinding()]
        param (
              [System.Windows.Forms.PowerState] $PowerState = [System.Windows.Forms.PowerState]::Suspend
            , [switch] $DisableWake
            , [switch] $Force
        )
    
        begin {
            Write-Verbose -Message 'Executing Begin block';
    
            if (!$DisableWake) { $DisableWake = $false; };
            if (!$Force) { $Force = $false; };
    
            Write-Verbose -Message ('Force is: {0}' -f $Force);
            Write-Verbose -Message ('DisableWake is: {0}' -f $DisableWake);
        }
    
        process {
            Write-Verbose -Message 'Executing Process block';
            try {
                $Result = [System.Windows.Forms.Application]::SetSuspendState($PowerState, $Force, $DisableWake);
            }
            catch {
                Write-Error -Exception $_;
            }
        }
    
        end {
            Write-Verbose -Message 'Executing End block';
        }
    }
    
    # Call the function
    Set-PowerState -PowerState Hibernate -DisableWake -Force;
    

    注意:在我的测试中,-DisableWake选项没有任何我知道的明显区别。即使将此参数设置为$true,我仍然能够使用键盘和鼠标唤醒计算机。

    08-06 18:03