Win32_OperatingSystem 클래스의 Win32Shutdown 메서드
Win32ShutdownWMI 클래스 메서드는 Win32 운영 체제에서 지원하는 전체 종료 옵션 집합을 제공합니다. 여기에는 로그오프, 종료, 다시 부팅 및 강제 로그오프, 종료 또는 다시 부팅이 포함됩니다.
이 항목에서는 MOF(Managed Object Format) 구문을 사용합니다. 이 메서드를 사용하는 방법에 대한 자세한 내용은 메서드 호출을 참조 하세요.
구문
uint32 Win32Shutdown(
[in] sint32 Flags,
[in] sint32 Reserved =
);
매개 변수
-
Flags [in]
-
컴퓨터를 종료하기 위한 비트맵된 플래그 집합입니다. 명령을 강제로 적용하려면 명령 값에 Force 플래그(4)를 추가합니다. 원격 컴퓨터의 종료 또는 다시 부팅과 함께 Force를 사용하면 모든 항목(WMI, COM 등)이 즉시 종료되거나 원격 컴퓨터가 다시 부팅됩니다. 이로 인해 확정되지 않은 반환 값이 생성됩니다.
-
0(0x0)
-
로그오프 - 사용자를 컴퓨터에서 로그오프합니다. 로깅 해제는 종료 함수를 호출한 프로세스의 보안 컨텍스트와 연결된 모든 프로세스를 중지하고, 현재 사용자를 시스템에서 로그온하고, 로그온 대화 상자를 표시합니다.
-
4(0x4)
-
강제 로그오프(0 + 4) - 사용자를 컴퓨터에서 즉시 로그온하고 로그온 세션이 종료되었음을 애플리케이션에 알리지 않습니다. 이로 인해 데이터가 손실될 수 있습니다.
-
1(0x1)
-
종료 - 전원을 끄는 것이 안전한 지점까지 컴퓨터를 종료합니다. (모든 파일 버퍼는 디스크로 플러시되고 실행 중인 모든 프로세스가 중지됩니다.) 사용자에게 메시지가 표시됩니다.
It is now safe to turn off your computer.
종료하는 동안 시스템은 실행 중인 각 애플리케이션에 메시지를 보냅니다. 애플리케이션은 메시지를 처리하는 동안 모든 클린 작업을 수행하고 True를 반환하여 종료할 수 있음을 나타냅니다.
-
5(0x5)
-
강제 종료(1 + 4) - 전원을 끄면 안전한 지점까지 컴퓨터를 종료합니다. (모든 파일 버퍼는 디스크로 플러시되고 실행 중인 모든 프로세스가 중지됩니다.) 사용자에게 메시지가 표시됩니다.
It is now safe to turn off your computer.
강제 종료 방법을 사용하면 WMI를 포함한 모든 서비스가 즉시 종료됩니다. 이 때문에 원격 컴퓨터에 대해 스크립트를 실행하는 경우 반환 값을 받을 수 없습니다.
-
2(0x2)
-
다시 부팅 - 종료한 다음 컴퓨터를 다시 시작합니다.
-
6(0x6)
-
강제 다시 부팅(2 + 4) - 컴퓨터를 종료한 다음 컴퓨터를 다시 시작합니다.
강제 다시 부팅 방법을 사용하면 WMI를 포함한 모든 서비스가 즉시 종료됩니다. 이 때문에 원격 컴퓨터에 대해 스크립트를 실행하는 경우 반환 값을 받을 수 없습니다.
-
8(0x8)
-
전원 끄기 - 컴퓨터를 종료하고 전원을 끕니다(해당 컴퓨터에서 지원하는 경우).
-
12(0xC)
-
강제 전원 끄기(8 + 4) - 컴퓨터를 종료하고 전원을 끕니다(해당 컴퓨터에서 지원하는 경우).
강제 전원 끄기 방법을 사용하면 WMI를 포함한 모든 서비스가 즉시 종료됩니다. 이 때문에 원격 컴퓨터에 대해 스크립트를 실행하는 경우 반환 값을 받을 수 없습니다.
예약된 [in]
Win32Shutdown을 확장하는 수단입니다. 현재 Reserved 매개 변수는 무시됩니다.
반환 값
성공을 나타내기 위해 0을 반환합니다. 다른 모든 숫자는 오류를 나타냅니다. 오류 코드는 WMI 오류 상수 또는 WbemErrorEnum을 참조하세요. 일반적인 HRESULT 값은 시스템 오류 코드를 참조 하세요.
-
성공 (0)
-
기타 (1-4294967295)
설명
조직의 컴퓨터를 보다 효율적으로 관리하려면 관리자가 컴퓨터를 원격으로 종료하거나 다시 시작하거나 사용자를 원격으로 로그오프하는 기능이 필요합니다. 관리자는 이러한 작업을 수행할 수 있으므로 각 컴퓨터를 수동으로 종료하거나 다시 시작하지 않고도 소프트웨어를 설치하고, 컴퓨터 설정을 다시 구성하고, 네트워크에서 컴퓨터를 제거하고, 다른 작업을 수행할 수 있습니다.
예를 들어 네트워크 업그레이드를 수행하려면 특정 네트워크 세그먼트에서 실행되는 모든 컴퓨터를 종료해야 할 수 있습니다. 그룹 정책 업그레이드를 강제로 적용하려면 사용자를 컴퓨터에서 로그오프해야 합니다. 컴퓨터 바이러스가 조직 내 어디에나 있는 경우 바이러스가 확산되기 전에 가능한 한 많은 컴퓨터를 종료할 수 있습니다. 컴퓨터를 종료하고 다시 시작하고 수동으로 로그오프하는 대신 프로그래밍 방식으로 사용자를 로그오프하는 기능은 엄청난 시간 절약이 될 수 있습니다.
호출 프로세스에는 SE_SHUTDOWN_NAME 권한이 있어야 합니다.
Win32ShutdownTracker 메서드는 Win32_OperatingSystem Win32Shutdown 메서드에서 지원하는 것과 동일한 종료 옵션 집합을 제공하지만 주석, 종료 이유 또는 시간 제한을 지정할 수도 있습니다.
Win32Shutdown 메서드에는 워크스테이션을 잠그기 위한 매개 변수가 없으므로 사용자가 로그온됩니다. 그러나 다음 명령을 사용하여 명령줄에서 워크스테이션을 잠글 수 있습니다.
% windir %\System32\rundll32.exe user32.dll,LockWorkStation
예제
다음 PowerShell 예제에서는 Win32Shutdown 메서드를 사용하여 지정된 컴퓨터를 종료합니다.
$computername= "."
$win32OS = get-wmiobject win32_operatingsystem -computername $computername
$win32OS.psbase.Scope.Options.EnablePrivileges = $true
$win32OS.win32shutdown(8)
다음 PowerShell 코드 샘플에서는 get-wmiobject cmdlet의 EnableAllPrivileges를 사용하여 적절한 priviliges를 달성합니다.
$win32OS = get-wmiobject win32_operatingsystem -computername $computername -EnableAllPrivileges
$win32OS.win32shutdown(8)
다음 VB.NET 샘플 코드는 Shutdown 메서드를 사용하여 시스템을 다시 부팅하거나 로그오프합니다.
Dim
testResult AsSingle
Dim WMIServiceObject, ComputerObject AsObject
'Now get some privileges
WMIServiceObject = GetObject(
"Winmgmts:{impersonationLevel=impersonate,(Debug,Shutdown)}")
ForEach ComputerObject In WMIServiceObject.InstancesOf("Win32_OperatingSystem")
testResult = ComputerObject.Win32Shutdown(2 + 4, 0)
'reboot
'testResult = ComputerObject.Win32Shutdown(0, 0) 'logoff
' testResult = ComputerObject.Win32Shutdown(8 + 4, 0) 'shutdown
If testResult <> 0 Then
MsgBox("Sorry, an error has occurred while trying to perform selected operation")
Else
'Operation selected in statement above if condition would be carried out
EndIf
Next
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 |
Windows Vista |
지원되는 최소 서버 |
Windows Server 2008 |
네임스페이스 |
Root\CIMV2 |
MOF |
|
DLL |
|
참고 항목