Windows PowerShell을 사용하여 원격으로 서버 관리
Contoso의 IT 관리 직원은 관리하는 개체에서 원격으로 관리 작업을 수행하는 데 점점 더 집중하고 있습니다. 특정 관심 분야 중 하나는 Windows PowerShell을 활용하여 Contoso의 IT 인프라를 원격으로 관리하고 처리하는 기능입니다. Windows PowerShell 원격을 사용하여 해당 작업을 수행할 수 있습니다.
원격에 대한 요구 사항
원격을 사용하려면 로컬 컴퓨터에 Windows PowerShell이 있어야 하고 연결하려는 모든 원격 컴퓨터에서 Windows 원격 관리를 사용하도록 설정되어 있어야 합니다. 또한, Windows PowerShell 원격을 사용하도록 설정해야 합니다.
참고 항목
Windows PowerShell 원격은 Windows Server에서 기본값으로 사용하도록 설정되어 있지만 Windows 10과 Windows 11에서 사용하도록 설정해야 합니다.
Windows PowerShell 원격을 사용하도록 설정하려면 다음 절차 중 하나를 사용합니다. 관리자 권한 명령 프롬프트(또는 Windows PowerShell(관리자) 프롬프트)에서 다음 명령을 실행합니다.
Winrm quickconfig
또는, 원격을 사용하도록 설정하기 위해 다음 Windows PowerShell cmdlet을 사용할 수 있습니다.
Enable-PSremoting -force
중요
Windows 원격 관리는 HTTP를 통해 통신합니다. 기본적으로 Windows 원격 관리 및 Windows PowerShell 원격은 수신되는 암호화되지 않은 연결에 대해 TCP 포트 5985를 사용하고 수신되는 암호화된 연결에 대해서는 TCP 포트 5986을 사용합니다.
참고
Windows 원격 관리(예: Windows PowerShell)를 사용하는 애플리케이션은 Windows 원격 관리 서비스에 전달되는 데이터에 자체 암호화를 적용할 수도 있습니다.
원격 명령은 리소스를 복사하지 않으므로, 특정 명령을 실행하는 데 필요한 모든 파일 및 기타 리소스는 원격 컴퓨터에 있어야 합니다. 그러나 로컬 스크립트는 실행할 수 있습니다. 스크립트의 내용이 스크립트 파일 자체가 아닌 원격 컴퓨터로 전송되기 때문입니다.
원격 관리를 하려면 관리자에게 다음 작업을 수행할 수 있는 권한이 있어야 합니다.
- 원격 컴퓨터에 연결
- Windows PowerShell 실행
- 원격 컴퓨터의 데이터 저장소 및 레지스트리에 대한 액세스
주의
NIC(네트워크 인터페이스 카드)가 공용 네트워크 위치 프로필에 할당된 컴퓨터에서 원격 기능을 사용하도록 설정하면 오류가 발생합니다. Enable-PSremoting -force
를 사용하여 해당 제한을 무시하고 퍼블릭 NIC를 사용하는 디바이스에서 원격 작업을 강제로 수행할 수 있습니다.
원격 컴퓨터에 대해 cmdlet 실행
여러 cmdlet에는 원격 컴퓨터에서 개체를 검색할 수 있도록 하는 ComputerName 매개 변수가 있습니다. 해당 cmdlet은 Windows PowerShell 원격을 사용하여 통신하지 않으므로 Windows PowerShell을 실행하는 모든 컴퓨터에서 해당 cmdlet의 ComputerName 매개 변수를 사용할 수 있습니다. Windows PowerShell 원격을 위한 컴퓨터를 구성하거나 원격을 위한 시스템 요구 사항을 충족하지 않아도 됩니다.
다음 표는 ComputerName 매개 변수에 대한 자세한 내용을 제공합니다.
Command | 설명 |
---|---|
Get-Command –ParameterName ComputerName |
ComputerName 매개 변수를 사용하는 cmdlet을 찾습니다. |
Get-Help <cmdlet-name> -parameter ComputerName |
ComputerName 매개 변수에 Windows PowerShell 원격을 사용해야 하는지를 확인합니다. |
원격 명령 처리
원격 컴퓨터에 연결하여 원격 명령을 전송하는 경우, 명령은 네트워크를 통해 원격 컴퓨터의 Windows PowerShell 인스턴스로 전송된 다음 해당 컴퓨터에서 실행됩니다. 명령 결과는 로컬 컴퓨터에 다시 전송되고 로컬 컴퓨터의 Windows PowerShell 세션에 표시됩니다.
원격 명령에 대한 로컬 입력은 모두 원격 컴퓨터로 전송되기 전에 수집됩니다. 그러나 출력은 생성될 때 로컬 컴퓨터에 반환됩니다. 원격 컴퓨터에 연결하면 시스템에서 로컬 컴퓨터의 사용자 이름 및 암호 자격 증명을 사용하여 원격 컴퓨터에 대한 인증을 받을 수 있습니다.
참고
기본적으로 Kerberos V5(버전 5) 인증 프로토콜은 권한 부여 및 인증에 사용됩니다. 따라서 AD DS 도메인이 필요합니다.
팁
원격 컴퓨터가 도메인에 없거나 신뢰할 수 없는 도메인에 있는 경우, 원격 컴퓨터를 신뢰할 수 있는 호스트로 정의하여 클라이언트 컴퓨터에서 연결하도록 허용할 수 있습니다.
다음 cmdlet은 원격을 지원합니다.
Invoke-Command
Enter-PSSession
Exit-PSSession
Disconnect-PSSession
Receive-PSSession
Connect-PSSession
팁
Windows PowerShell ISE를 사용하여 원격 탭을 만들 수 있습니다. 해당 작업을 수행하려면 Windows PowerShell ISE의 파일 메뉴에서 새 원격 PowerShell 탭 옵션을 사용합니다.
원격을 구현하는 경우 임시 세션을 사용하여 원격 머신에 연결하거나 영구 세션을 만들 수 있습니다.
임시 세션 생성
임시 세션의 경우 세션을 시작하고 명령을 실행한 다음 세션을 종료합니다. 해당 방법은 여러 원격 컴퓨터에서 단일 명령 또는 관련 없는 여러 명령을 실행하는 효율적인 방법입니다.
참고
연결을 중지한 후에는 명령 내에 정의된 변수나 함수를 더 이상 사용할 수 없습니다.
임시 연결을 만들려면 Invoke-Command
cmdlet에 –ComputerName 매개 변수를 사용하여 원격 컴퓨터를 지정합니다. 그런 다음 –ScriptBlock 매개 변수를 사용하여 명령을 지정합니다. 예를 들어, 다음 명령은 Get-EventLog
SEA-DC1 컴퓨터에서 실행됩니다.
Invoke-Command –ComputerName SEA-DC1 –ScriptBlock {Get-EventLog –log system}
영구 세션 생성
다른 컴퓨터와의 영구 연결을 만들려면 New-PSSession
cmdlet을 사용합니다. 예를 들어, 다음 명령은 원격 컴퓨터에서 세션을 만들고 $s 변수에 세션을 저장합니다.
$s = New-PSSession –ComputerName SEA-DC1
Enter-PSSession
Cmdlet을 사용하여 대화형 세션에 연결 및 시작할 수 있습니다. 예를 들어, SEA-DC1에서 새 세션을 연 후 다음 명령을 사용하여 컴퓨터와의 대화형 세션을 시작합니다.
Enter-PSSession $s
세션을 입력하면 로컬 컴퓨터의 Windows PowerShell 명령 프롬프트가 변경되어 연결을 표시합니다.
대화형 세션은 닫을 때까지 열린 상태로 유지됩니다. 이렇게 하면 필요한 만큼 명령을 실행할 수 있습니다. 대화형 세션을 종료하려면 다음 명령을 입력합니다.
Exit-PSSession
여러 컴퓨터에서 원격 명령 실행
임시 세션의 경우 Invoke-Command
cmdlet은 여러 컴퓨터 이름을 허용합니다. 영구 연결의 경우 세션 매개 변수는 여러 Windows PowerShell 세션을 허용합니다. 여러 컴퓨터에서 원격 명령을 실행하려면 Invoke-Command
cmdlet을 사용하여 ComputerName 매개 변수에 모든 컴퓨터 이름을 포함하고 다음 예제에서 보여주는 것처럼 이름을 쉼표로 구분합니다.
Invoke-Command -ComputerName SEA-DC1, SEA-SVR1, SEA-SVR2 -ScriptBlock {Get-Culture}
영구 세션의 경우 여러 Windows PowerShell 세션에서 명령을 실행할 수도 있습니다. 다음 명령은 SEA-DC1, SEA-SVR1, SEA-SVR2에 Windows PowerShell 세션을 생성된 다음 Get-Culture
각 Windows PowerShell 세션에서 명령을 실행합니다.
$s = New-PSSession -ComputerName SEA-DC1, SEA-SVR1, SEA-SVR2
Invoke-Command -Session $s -ScriptBlock {Get-Culture}
팁
컴퓨터 목록에 로컬 컴퓨터를 포함하려면 로컬 컴퓨터의 이름을 입력하거나 마침표(.) 또는 localhost를 입력합니다.
원격 컴퓨터에서 스크립트를 실행하는 방법
원격 컴퓨터에서 로컬 스크립트를 실행하려면 FilePath매개 변수와 Invoke-Command
를 사용합니다. 다음 명령은 SEA-DC1 및 SEA-SVR1 컴퓨터에서 Sample.ps1 스크립트를 실행합니다.
Invoke-Command -ComputerName SEA-DC1, SEA-SVR1 –FilePath C:\Test\Sample.ps1
스크립트의 결과는 로컬 컴퓨터에 반환됩니다. FilePath 매개 변수를 사용함으로써 원격 컴퓨터에 파일을 복사할 필요가 없습니다.
데모
다음 비디오에서는 Windows PowerShell을 사용하여 원격 Windows Server를 관리하는 방법을 보여 줍니다. 프로세스의 주요 단계는 다음과 같습니다.
관리자 권한 PowerShell 프롬프트를 엽니다.
다음 명령을 실행하여 PowerShell 원격 세션을 생성합니다.
Enter-PSSession -ComputerName SEA-DC1
표준 Windows PowerShell cmdlet을 사용하여 서버에 대한 정보(예: 이름 및 IP 주소)를 검색합니다.
IIS 서비스의 상태를 확인하고 다음 명령을 사용하여 해당 서비스를 다시 시작합니다.
Get-Service -Name IISAdmin | Restart-Service