programing

PowerShell에서 일시 중지 또는 최대 절전 모드

batch 2023. 9. 13. 22:26
반응형

PowerShell에서 일시 중지 또는 최대 절전 모드

Windows PowerShell을 사용하여 컴퓨터를 일시 중단하거나 최대 절전 모드로 전환하는 데 관심이 있습니다.이를 어떻게 달성합니까?

나는 이미 알고 있습니다.Stop-Computer그리고.Restart-Computercmdlet은 상자 밖에 포함되어 있지만, 이것들은 내가 추구하는 기능을 달성하지 못합니다.

사용할 수 있습니다.SetSuspendState메소드 온 더System.Windows.Forms.Application이것을 이루기 위한 수업. 더.SetSuspendStatemethod는 static method 입니다.

[MSDN] 중지 상태 설정

다음과 같은 세 가지 매개 변수가 있습니다.

  • [System.Windows.Forms.PowerState]
  • 힘.[bool]
  • wakeEvent 사용 안 함[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

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

편집: @mica가 코멘트에서 지적한 것처럼, 서스펜드(수면)는 실제로 동면합니다.이것은 윈도우 8 이상에서 발생하는 것으로 보입니다.'sleep'을 사용하려면 최대 절전 모드를 해제하거나 외부 Microsoft 도구(내장되지 않음)를 가져옵니다. "Microsoft의 Sysinternals 도구 중 하나는 명령을 사용하여 PsShutdown입니다.psshutdown -d -t 0동면이 아닌 올바르게 잠을 잘 수 있습니다." 출처: https://superuser.com/questions/42124/how-can-i-put-the-computer-to-sleep-from-command-prompt-run-menu

종료 실행 파일을 C:로 사용합니다.\Windows\시스템32

shutdown.exe /h

이것을 원라이너로 줄이려고 했는데 오류가 났습니다.제 해결책은 이렇습니다.

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

언급URL : https://stackoverflow.com/questions/20713782/suspend-or-hibernate-from-powershell

반응형