Psexec: 실제 예제와 함께 한층 더 자세히 알아보기

robocopy와 유용성 면에서 경쟁할 수 있는 명령줄 유틸리티가 있다면, 그것은 PsExec입니다. Sysinternals PsExec 유틸리티는 IT 관리자의 무기처럼 어디에나 존재합니다. 이 도구를 사용하면 관리자는 로컬 컴퓨터에서 작업하는 것처럼 원격으로 명령을 실행할 수 있습니다.

PsExec 도구를 자세히 다루기 위해 이 간헐적인 도구를 ATA 최종 가이드에서 다루는 것이 적절했습니다. 이 가이드에서는 psexec가 무엇인지, 이 유용한 도구를 사용하는 방법에 대한 여러 예제를 배울 수 있습니다.

PsExec.exe란 무엇인가요?

IT에 처음 접하는 분들이거나 아직 원격 컴퓨터에서 명령과 도구를 실행할 필요가 없는 분들은 psexec가 무엇인지 모를 수도 있습니다.

PsExec 또는 psexec.exe는 Windows용 명령줄 유틸리티입니다. 이 도구를 사용하면 관리자는 로컬 및 일반적으로 원격 컴퓨터에서 프로그램을 실행할 수 있습니다. 이것은 Mark Russinovich가 많은 시간 전에 만든 Sysinternals pstools 스위트의 무료 도구입니다.

이는 포트를 열고 보안 취약점을 도입하는 telnet과 같은 도구를 대체하기 위해 만들어졌습니다. 요즘에는 PowerShell Remoting 및 Invoke-Command PowerShell cmdlet과 같은 다른 옵션이 있지만 PsExec는 여전히 자리를 지키고 있습니다.

PsExec는 어떤 소프트웨어도 설치하지 않고도 콘솔 애플리케이션에 대한 완전한 상호 작용을 제공합니다. 이 최종 가이드를 통해 PsExec은 대화형 명령 프롬프트를 실행하고 원격 컴퓨터에서 로컬 시스템으로 실행하며 한 번에 여러 컴퓨터에서 명령을 실행할 수 있습니다.

PsExec은 Windows XP부터 모든 버전의 Windows를 지원합니다. 즉, Windows 10에서도 PsExec을 사용할 수 있습니다. 이 도구는 거의 모든 것에서 작동하는 간단한 도구이지만 그 간단함을 그 능력과 혼동하지 마십시오!

전제 조건

로컬 컴퓨터에서 PsExec을 실행하려면 최신 Windows 운영 체제를 실행하고 있어야합니다. 그러나 원격 컴퓨터에서 psexec을 실행하려면 몇 가지 항목을 확인해야합니다.

현재 이러한 항목이 준비되어 있지 않거나 확실하지 않다면 걱정하지 마십시오. 다음 섹션에서는 원격 컴퓨터를 테스트하기 위해 PowerShell을 작성하는 방법에 대해 설명합니다.

  • A modern Windows computer (local)
  • 파일 및 프린터 공유 열려 있음 (원격 컴퓨터, TCP 포트 445)
  • admin$ 관리 공유가 사용 가능함 (원격 컴퓨터)
  • 로컬 계정의 자격 증명을 알고 있음 (원격 컴퓨터)

본 글 작성 시점에서 PsExec은 v2.2이며 이 글에서 다룰 버전입니다.

PsExec 설치 (원격 컴퓨터 설정 포함)

기술적으로는 PsExec을 설치하지 않습니다. 단지 명령줄 유틸리티일 뿐이지만 거의 유사합니다. 설치가 필요하지 않으므로 PsTools 압축 파일에서 다운로드하고 추출하기만 하면 됩니다. PsExec은 독립 실행형 유틸리티로 제공되지 않으며, PsTools 스위트의 일부입니다.

PSExec 다운로드

ZIP 파일을 수동으로 추출하거나 다음 PowerShell 코드를 사용하여 PsExec을 다운로드하고 추출할 수 있습니다. 이렇게 하면 다른 PsTools 도구들이 모두 제거됩니다. 많은 도구가 유용하지만 이 글에서는 다루지 않을 것입니다.

PS> Invoke-WebRequest -Uri 'https://download.sysinternals.com/files/PSTools.zip' -OutFile 'pstools.zip'
PS> Expand-Archive -Path 'pstools.zip' -DestinationPath "$env:TEMP\pstools"
PS> Move-Item -Path "$env:TEMP\pstools\psexec.exe" .
PS> Remove-Item -Path "$env:TEMP\pstools" -Recurse

원격 컴퓨터 구성

PsExec을 다운로드한 후 실행할 원격 컴퓨터가 열려 있는지 확인해야 합니다. PsExec은 간단한 요구 사항이 있습니다. 파일 및 프린터 공유가 활성화되어 있고 admin$ 관리 공유가 가능해야 합니다.

원격 컴퓨터의 Windows 방화벽 앱을 열고, 아래와 같이 모든 컴퓨터에서 허용된 앱으로 이동하여 파일 및 프린터 공유를 활성화할 수 있습니다.

파일 및 프린터 공유는 알려진 보안 위협이므로 개인용 방화벽 프로필만 활성화되도록 해야 합니다.

Allowing File and Print Sharing in the Windows Firewall

또는 각 컴퓨터를 방문하여 다음 명령을 사용하여 넷쉬 유틸리티를 실행하여 방화벽을 열 수 있습니다:

> netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=Yes

또는 PowerShell의 Set-NetFirewallRule cmdlet을 사용할 수도 있습니다.

PS51> Set-NetFirewallRule -DisplayGroup "File And Printer Sharing" -Enabled True -Profile Private

각 컴퓨터를 방문하지 않고도 PowerShell Remoting을 사용할 수 있으며 Active Directory 도메인에 있으면 Invoke-Command cmdlet을 사용하여 한 번에 여러 컴퓨터의 방화벽을 열 수도 있습니다.

PS51> Invoke-Command -ComputerName PC1, PC2, PC3 -ScriptBlock { Set-NetFirewallRule -DisplayGroup "File And Printer Sharing" -Enabled True -Profile Private }

PsExec 사용하기

실행하기 전에 걷기를 배워야 합니다. PsExec을 이전에 사용해 본 적이 없다면 재미있는 경험이 될 것입니다! 이 문서를 먼저 읽어 기본 개념을 익히신 다음, 이 문서의 후반부에서 더 깊게 파고들기 전에 기초를 익히세요.

새 시스템에서 PsExec을 처음 실행하면 바로 PsExec 라이선스 동의서가 표시됩니다. 사용하려면 동의 단추를 클릭해야 합니다.

PSExec license agreement (EULA)

라이선스 동의서가 표시되지 않도록 하려면 아래와 같이 /accepteula 스위치를 사용하여 무음으로 동의할 수 있습니다.

> psexec /accepteula

이 문서의 후반부에서 로컬 및 원격 컴퓨터에서 이 EULA 팝업을 조용히하는 몇 가지 요령을 배울 수 있습니다.

도움말 찾기

PsExec을 탐색할 때는 어떤 스위치도 사용하지 마십시오. 스위치 없이 psexec을 실행하면 모든 옵션과 각각의 간단한 설명이 표시됩니다. 편의를 위해 모든 옵션은 아래 표에 나와 있습니다.

Switch Explanation
-a Separate processors on which the application can run with commas where 1 is the lowest numbered CPU. For example, to run the application on CPU 2 and CPU 4, enter: “-a 2,4”
-c Copy the specified program to the remote system for execution. If you omit this option the application must be in the system path on the remote system.
-d Don’t wait for process to terminate (non-interactive).
-e Does not load the specified account’s profile.
-f Copy the specified program even if the file already exists on the remote system.
-i Run the program so that it interacts with the desktop of the specified session on the remote system. If no session is specified the process runs in the console session. Some have reported best results always using the -s switch with -i due to windows being unintelligible.
-h If the target system is Vista or higher, has the proc
-l Run process as limited user (strips the Administrators group and allows only privileges assigned to the Users group). On Windows Vista the process runs with Low Integrity.
-n Specifies timeout in seconds connecting to remote computers.
-p Specifies optional password for user name. If you omit this you will be prompted to enter a hidden password.
-r Specifies the name of the remote service to create or interact. with.
-s Run the remote process in the System account.
-u Specifies optional user name for login to computer.
-v Copy the specified file only if it has a higher version number or is newer on than the one on the remote system.
-w Set the working directory of the process (relative
-x Display the UI on the Winlogon secure desktop (local system only).
-arm Specifies the remote computer is of ARM architecture.
-priority Specifies -low, -belownormal, -abovenormal, -high or
-realtime run the process at a different priority. Use
-background run at low memory and I/O priority on Vista.
computer Direct PsExec to run the application on the computer or computers specified. If you omit the computer name PsExec runs the application on the local system, and if you specify a wildcard (\*), PsExec runs
@file PsExec will execute the command on each of the computers listed in the file.
-accepteula This flag suppresses the display of the license dialog.
-nobanner Do not display the startup banner and copyright message.

간단한 원격 명령 실행

가장 기본적으로, PsExec은 두 개의 매개변수를 필요로 합니다: 컴퓨터 이름과 실행할 명령어입니다. 만약 hostname과 같이 인자를 필요로 하지 않는 원격 컴퓨터에서 실행할 명령어가 있다면, 컴퓨터 이름 뒤에 간단히 추가하면 됩니다.

파일 경로를 지정하지 않는다면, 실행할 명령어는 사용자 또는 시스템 경로에 있어야 합니다. 또한, 이름에 공백이 있는 프로그램인 경우에는 항상 따옴표로 감싸면 됩니다. 예를 들어, “my application.exe”와 같이요.

> psexec \\REMOTECOMPUTER hostname

아래에서 볼 수 있듯이, CONTOSODC1 컴퓨터에서 hostname 명령어를 실행하기 위해 UNC 경로를 정의한 다음 명령어를 추가합니다. 그러면 PSExec은 원격 컴퓨터에 안전하게 연결하여 명령어를 실행하고 결과를 반환합니다. 이 경우에는 hostname 명령어가 컴퓨터의 호스트 이름인 CONTOSODC1을 반환했습니다.

만약 명령어가 cmd나 다른 콘솔이 아닌 경우, PsExec은 빠르게 원격 세션을 종료하고 원격 프로세스가 반환한 종료 코드를 반환합니다.

참고: psexec에서 반환하는 오류 또는 종료 코드는 PsExec 자체에서 나오는 것이 아닙니다. 대신, psexec이 원격 컴퓨터에서 실행한 명령어에서 나온 것입니다.

Successful psexec remote command execution

원격 컴퓨터에서 PsExec 동작 방식

PsExec은 원격 컴퓨터에서 프로그램을 실행하기 위해 몇 가지 단계를 거칩니다.

  1. PSEXESVC.exe 파일을 C:\Windows에 생성합니다.
  2. 원격 컴퓨터에 PsExec라는 이름의 Windows 서비스를 생성하고 시작합니다.
  3. 프로그램을 psexesvc.exe의 부모 프로세스로 실행합니다.
  4. 완료되면 PsExec Windows 서비스가 중지되고 제거됩니다.

프로세스가 100% 정확하게 작동하지 않을 경우 sc 명령어를 사용하여 서비스를 수동으로 제거해야 할 수도 있습니다.

간단한 로컬 명령 실행

PsExec은 원격 컴퓨터에서 명령을 실행하는 데 가장 잘 알려져 있지만, 로컬로도 명령을 실행할 수 있습니다.

아래와 같이 컴퓨터 이름을 제공하지 않으면 로컬로 명령을 실행할 수 있습니다.

> psexec <local command or EXE file>

왜 이렇게 하는 걸까요? 하나의 이유는 로컬 SYSTEM 계정으로 명령을 실행하는 것입니다. 나중에 자세히 알아보겠지만, -s 스위치를 사용하여 명령을 로컬 또는 원격으로 SYSTEM으로 실행할 수 있습니다.

아래의 짧은 비디오를 확인해보세요. psexec을 사용하여 새로운 명령 세션을 NT AUTHORITY\SYSTEM으로 시작하기 위해 단순히 -s 스위치와 명령 해석기 실행 파일을 제공하면 됩니다.

Running Psexec as SYSTEM

PsExec 명령어 (더 고급 기능)

기본 사항을 익힌 후에는 psexec의 고급 기술을 배울 수 있습니다. PsExec은 단일 컴퓨터에서 단일 명령어를 실행하는 것 이상의 기능을 제공합니다.

여러 컴퓨터에서 명령 실행하기

PsExec은 한 번에 하나의 원격 컴퓨터에서 명령을 실행하는 것에만 제한되지 않습니다. 이 도구는 프로그램을 복사하고 여러 컴퓨터에서 명령을 실행하는 기능도 제공합니다.

여러 컴퓨터에서 PsExec을 동시에 실행하는 방법은 몇 가지가 있습니다.

쉼표로 구분된 컴퓨터 이름들

일반적으로 단일 원격 컴퓨터에서 명령을 실행할 때는 \\REMOTECOMPUTER와 같이 하나의 컴퓨터 이름을 지정합니다. 쉼표로 구분하여 여러 대의 컴퓨터도 지정할 수 있습니다.

> psexec \\REMOTECOMPUTER1,REMOTECOMPUTER2,REMOTECOMPUTER3

Active Directory 도메인의 모든 컴퓨터

Active Directory 도메인에 가입된 컴퓨터에서 PsExec을 실행하고 해당 도메인의 모든 컴퓨터에서 명령을 실행하려면 와일드카드를 사용하세요.

PsExec은 전체 Active Directory 도메인을 검색하고 모든 컴퓨터에서 명령을 실행하려고 시도합니다. 아래는 PsExec이 실행 컴퓨터가 속한 도메인의 모든 컴퓨터에 연결하고 hostname 명령을 실행하려고 시도하는 예제 구문입니다.

> psexec \\* hostname

PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

Enumerating domain...

로컬 컴퓨터가 워크그룹에 속해 있을 때 와일드카드를 사용하여 도메인의 모든 컴퓨터를 찾으면 A system error has occurred: 6118 오류가 발생합니다.

와일드카드를 사용하면 PsExec이 사실상 명령 net view /all을 실행하여 먼저 도메인의 모든 컴퓨터를 찾습니다. 이는 NetBIOS에 의존하므로 컴퓨터 정보를 찾는 구식 방법입니다.

파일에서 읽기

한 번에 여러 대의 컴퓨터에서 명령을 실행하는 또 다른 방법은 텍스트 파일을 사용하는 것입니다. @<filename.txt> 구문을 사용하면 PsExec이 텍스트 파일의 각 줄을 컴퓨터 이름으로 읽습니다. 그런 다음 각 컴퓨터를 개별적으로 처리합니다.

아래에서는 PowerShell을 사용하여 줄 구분된 컴퓨터 이름의 텍스트 파일을 생성하고 이를 psexec에 입력으로 사용하는 예제를 볼 수 있습니다.

PS51> (Get-AdComputer -Filter *).Name | Out-File computers.txt
PS51> psexec @computers.txt hostname

로컬 프로그램을 원격 컴퓨터로 복사하기

-c 스위치를 사용하면 psexec은 실행 전에 로컬 프로그램을 원격 컴퓨터로 복사합니다.

로컬 컴퓨터의 C:\Tools 폴더에 EXE 파일이 있고 원격 컴퓨터에서 실행하려면 다음 구문을 사용할 수 있습니다:

> psexec \\REMOTECOMPUTER -c C:\Tools\program.exe

-c 스위치를 사용하고 실행 파일을 지정하지 않으면 PsExec은 파일을 복사하지만 “지정된 파일을 찾을 수 없습니다.“라는 오류가 발생합니다. 이는 PsExec이 복사한 파일을 실행하려고 시도하기 때문에 발생합니다.

PsExec을 사용하기 전에 원격 컴퓨터로 파일을 복사해야 하는 경우, 대신 Copy-Item PowerShell cmdlet을 사용하십시오.

대체 자격 증명에서 원격 프로세스 실행

PsExec의 다른 인기있는 사용 사례는 대체 계정에서 명령을 실행하는 것입니다. 기본적으로 PsExec은 현재 로그인된 계정으로 원격 컴퓨터에 연결을 시도합니다. 구체적으로는 원격 컴퓨터에서 귀하의 계정을 흉내냅니다.

-u와 선택적 -p 스위치를 사용하면 대체 사용자 계정으로 원격 컴퓨터에 연결할 수 있습니다. PsExec은 사용자 이름과 암호를 암호화하여 원격 컴퓨터로 보내 인증을 수행합니다.

예를 들어, 워크그룹에 있는 경우 원격 컴퓨터에 인증하기 위해 항상 사용자 이름을 지정해야 합니다.

> psexec \\REMOTECOMPUTER hostname -u localadmin -p secret-p@$$word

두 컴퓨터가 Active Directory의 구성원인 경우 사용자 계정 앞에 도메인 이름을 붙여야 합니다.

> psexec \\REMOTECOMPUTER hostname -u contoso.local\domainadmin -p secret-p@$$word

-u 스위치를 사용하지 않을 경우, psexec은 원격 컴퓨터에서 현재 로그인한 계정으로 위장합니다. 어떠한 네트워크 자원에도 접근할 수 없습니다.

로컬 시스템 계정으로 프로세스 실행하기

대체 계정으로 PsExec을 실행하는 가장 유용한 기능 중 하나는 -s 스위치를 사용하는 것입니다. 이 스위치를 사용하면 PsExec(및 원격으로 실행되는 응용 프로그램)이 원격(또는 로컬) 컴퓨터의 로컬 시스템 계정으로 실행될 수 있습니다.

아래 예시에서는 원격 컴퓨터 이름을 포함하지 않았습니다. PsExec은 로컬 컴퓨터에서도 문제 없이 실행될 것입니다. 이 경우에는 -s 옵션을 사용하여 PsExec이 로컬 시스템 계정으로 로컬 명령 프롬프트를 실행하도록 지시합니다.

Running psexec as LOCAL SYSTEM

원격 컴퓨터에서 로컬 시스템으로 명령 프롬프트를 실행하려면 아래와 같이 컴퓨터 이름을 참조에 추가하십시오:

> psexec -s \\REMOTECOMPUTER cmd

GUI 응용 프로그램 원격으로 실행하기

PsExec의 또 다른 유용한 스위치는 -i입니다. 기본적으로 PsExec은 원격으로 실행되는 명령어가 원격 컴퓨터에 어떠한 창도 띄우지 못하게 합니다. 이는 원격으로 명령을 실행하는 경우 화면을 보지 못하기 때문에 도움이 됩니다.

하지만 사용자를 위해 프로그램을 실행해야 할 수도 있습니다. 개인적으로는 응용 프로그램을 사용하지 않을 것이지만 최종 사용자가 사용할 것입니다. 이 경우 -i 스위치를 사용하십시오.

원격 컴퓨터에서 메모장 창을 열어야 할 수도 있습니다. 문제 없습니다. -i 스위치와 함께 notepad.exe를 실행하면 PsExec이 메모장을 엽니다.

> psexec -i \\REMOTECOMPUTER notepad
Running psexec in interactive mode

인터랙티브 창이 나타날 때 -d 스위치를 사용하여 연결을 끊는 것도 잊지 마십시오. 기본적으로 PsExec은 실행한 프로세스가 완료될 때까지 기다립니다. 이 경우 원격 프로세스(이 경우 메모장)가 계속 실행되면 PsExec은 제어를 반환하지 않을 것입니다.

-d 스위치를 -i와 함께 사용하면 PsExec은 원격 프로세스가 완료될 때까지 기다리지 않고 연결을 끊고 제어를 반환합니다.

출력 리디렉션

PsExec은 원격 프로세스에서 보낸 모든 출력을 로컬 세션으로 전달합니다. 일반적으로 이 출력은 직접 로컬 콘솔로 전달됩니다. 그러나 리디렉션을 원한다면 일반적인 리디렉션 연산자를 사용하여 리디렉션 할 수 있습니다.

예를 들어, 명령을 실행하고 모든 출력을 무음으로 만들고 싶다면, 출력과 오류를 ^> nul ^2^&1로 null로 리디렉션 할 수 있습니다.

특수 문자는 두번째 문자와 함께 이스케이프 처리됩니다. ( ^).

PsExec 사용 사례

Psexec 사용 방법을 익힌 후에는 다양한 특정 사용 사례를 마주하게 될 것입니다. 이 섹션에서는 psexec을 사용한 실제 사용 사례와 예제를 알아보겠습니다.

원격 명령 프롬프트 실행 (psexec cmd)

가장 일반적인 사용 사례 중 하나는 대화식 명령 프롬프트로 PsExec을 실행하는 것입니다. PsExec은 원격으로 명령을 실행하는 것뿐만 아니라 명령 결과를 콘솔로 보낼 수도 있습니다. 이로 인해, 여전히 사용 중인 경우에는 훌륭한 텔넷 또는 PowerShell Enter-PSSession 대체 도구가 될 수 있습니다.

원격 명령을 실행하려면 원격 컴퓨터 이름을 지정하고 cmd 응용 프로그램을 실행합니다. Cmd는 Windows 명령 해석기입니다. PsExec은 대화식 사용을 지원하므로 깜박이는 커서와 프롬프트를 기쁘게 반환합니다.

> psexec \\REMOTEPC cmd
Opening a command prompt on a remote computer

이 시점에서 세계는 당신의 조개입니다. 이 “중첩” 명령 프롬프트를 통해 로컬 컴퓨터에서 명령을 실행하고 원격 컴퓨터에서 실행됩니다.

명령 프롬프트에서 나가려면 exit를 입력하십시오. PsExec은 원격 컴퓨터에서 cmd 프로세스를 중지하고 포커스를 로컬 컴퓨터로 돌려줍니다.

대화식 cmd 세션을 종료할 때 Ctrl-C를 사용하지 마십시오. 항상 exit를 사용하십시오. Ctrl-C를 사용하면 원격 컴퓨터에서 psexec 세션이 계속 실행됩니다.

원격으로 소프트웨어 설치하기

PsExec을 가난한 사람의 소프트웨어 배포 도구로 사용할 수 있습니다. 아마도 하나 이상의 원격 컴퓨터에서 실행해야 할 MSI 설치 프로그램인 setup.msi가 있을 수 있습니다. 이 설치 프로그램은 원격 컴퓨터로 복사되어 msiexec.exe 유틸리티와 함께 몇 가지 스위치를 사용하여 실행되어야 합니다.

다음은 PsExec를 사용하여 소프트웨어를 원격으로 배포하는 방법의 예입니다. 이 예제에서는 setup.msi를 원격 컴퓨터로 복사한 다음 SYSTEM 계정으로 MSI 설치 프로그램을 상호 작용 모드로 실행합니다.

> psexec.exe \\REMOTECOMPUTER –i –s "msiexec.exe /i setup.msi" -c setup.msi

/accepteula 스위치 없이 EULA를 수락하기

앞에서 언급했듯이, PsExec를 처음 실행할 때 EULA를 수락해야 합니다. /accepteula 스위치를 사용할 수도 있지만 레지스트리에 “스테이징”할 수도 있습니다.

처음 실행할 때 PsExec은 HKCU\Software\Sysinternals\PsExec에 레지스트리 키를 만듭니다. 그 레지스트리 키 대신에 EulaAccepted라는 레지스트리 값이 만들어지며, DWORD 값은 1입니다.

원격 컴퓨터의 레지스트리를 수정하는 좋아하는 방법을 사용하여 이 키/값을 만들면 PsExec을 실행할 컴퓨터에 대해 /accepteula를 실행할 필요가 없습니다!

PowerShell과 PsExec의 결합

PowerShell 이전에는 PsExec만 사용할 수 있었습니다. 이제는 옵션이 있습니다. PowerShell은 많은 상황에서 PsExec을 대체할 수 있지만 일부 상황에서는 보완적으로 사용될 수 있습니다.

PowerShell을 사용하여 컴퓨터 이름 만들기

도메인의 모든 컴퓨터를 찾기 위해 \\*를 사용하는 대신에 PowerShell을 사용할 수 있습니다. PowerShell을 사용하면 특정 컴퓨터를 선택할 수 있을 뿐만 아니라 방화벽에 취약한 net view /all 동작을 사용할 필요가 없습니다.

PowerShell을 사용하여 콤마로 구분된 모든 컴퓨터 이름을 포함하는 문자열을 만들 수 있습니다. 그런 다음 그 문자열을 PsExec에 전달하면 PsExec이 각각을 수동으로 입력한 것처럼 행복하게 처리합니다.

다음은 Get-AdComputer cmdlet을 사용하는 예입니다. 이는 ActiveDirectory PowerShell 모듈의 일부입니다.

PS51> psexec "\\$((Get-AdComputer -Filter *).Name -join ',')" hostname

원격으로 PowerShell Remoting 활성화하기

PsExec 대신 PowerShell Remoting을 사용하고 싶은 원격 컴퓨터가 있다면, 그 원격 컴퓨터에 PsExec을 사용하여 활성화할 수 있습니다.

Enable-PSRemoting 또는 원격 컴퓨터에서 winrm.cmd 배치 파일을 실행함으로써 한 번에 여러 컴퓨터에 대해 PowerShell Remoting을 쉽게 활성화할 수 있습니다.

아래 예시는 SYSTEM 계정으로 실행되는 원격 컴퓨터에서 winrm.cmd 배치 파일을 호출하는 예입니다. 해당 명령의 출력이 필요하지 않으므로 2>&1> $null로 출력이 제거되었습니다.

$computerName = 'REMOTECOMPUTER'
psexec "\\$Computername" -s c:\windows\system32\winrm.cmd quickconfig -quiet 2&>&1> $null 

PsExec 오류 메시지

다시 한 번 강조하지만, PsExec에서 반환되는 대부분의 오류 코드는 원격 프로세스에서 발생하는 것입니다. 하지만 이러한 오류 코드를 이해하고 그 의미를 알고 있는 것이 도움이 됩니다.

Windows 오류 코드에 대한 참고 자료가 필요한 경우, Windows 오류 코드의 상세 목록을 확인하는 것을 추천합니다.

아래는 PsExec에서 반환될 수 있는 일반적인 오류 코드 목록입니다.

Error Code Explanation
-2146232576 Typically returned by Windows Update when an error occurs.
0 Command executed successfully
1 Incorrect function. A problem happened. That’s about it.
1603 Fatal error during installation. This typically is returned by msiexec.
2 The system cannot find the file specified
4 The system cannot open the file.
5 Access is denied.
6 The handle is invalid.
6118 The list of servers for this workgroup is not currently available

피드백을 주세요.

ATA Ultimate Guides는 내용을 가지고 있습니다. 이들에는 많은 정보가 담겨 있으며, 제가 여기저기 놓치거나 실수할 수도 있습니다. 만약 여러분이 무언가 잘못되었다고 생각하거나 이 가이드에 추가해야 할 사항이 있다면, 댓글을 통해 알려주시기 바랍니다. 글에 여러분의 이름을 표기해드릴 수 있습니다.

크레딧

  • 많은 피드백을 주신 Mathias (댓글)에게 감사드립니다.

Source:
https://adamtheautomator.com/psexec/