从PowerShell挂起或休眠

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从PowerShell挂起或休眠相关的知识,希望对你有一定的参考价值。

我有兴趣使用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

另一答案

希望你发现这些有用。

关闭%windir%\System32\shutdown.exe -s

重启%windir%\System32\shutdown.exe -r

注销%windir%\System32\shutdown.exe -l

待机%windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Standby

Hibernate %windir%\System32\rundll32.exe powrprof.dll,SetSuspendState Hibernate

编辑:正如@mica评论中所指出的,暂停(睡眠)实际上是休眠。显然,这发生在Windows 8及更高版本中。要“睡觉”,禁用休眠或获取外部微软工具(不是内置的)“微软的Sysinternals工具之一是使用命令psshutdown -d -t 0进行PsShutdown它将正确睡眠,而不是休眠,计算机”来源:https://superuser.com/questions/42124/how-can-i-put-the-computer-to-sleep-from-command-prompt-run-menu

另一答案

我在C:\ Windows \ System32中使用关闭可执行文件

shutdown.exe /h
另一答案

我尝试将其减少到单行,但是出现了错误。这是我的解决方案:

[Void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 
[System.Windows.Forms.Application]::SetSuspendState("Hibernate", $false, $false);

以上是关于从PowerShell挂起或休眠的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu16.04进入挂起或休眠状态时按任何键都无法唤醒问题解决办法

OWB 映射挂起或花费太长时间 - 可能锁定?

powershell PowerShel便利ツール

如何在不卸载powershell的情况下,有效禁用/启用powershel

使用 fork() 和信号随机挂起或停止执行程序

jquery拖放挂起或卡住Android浏览器