about_Remote_Troubleshooting — PowerShell 원격 작업 문제 해결
about_Remote_Troubleshooting — PowerShell 원격 작업 문제 해결
PowerShell 원격 작업을 하다 보면 "Access is denied", "connection refused" 같은 오류를 만나게 돼요. 대부분은 방화벽, 관리자 권한, 신뢰 호스트(TrustedHosts) 설정 한두 가지가 원인이에요. 이 문서는 원격 작업할 때 흔히 겪는 오류를 하나씩 짚어가며, 어떤 설정을 확인하고 어떻게 고치는지 알려드려요.
본문
짧은 설명
PowerShell에서 원격 작업을 할 때 발생하는 문제를 해결하는 방법을 설명해요.
긴 설명
PowerShell 원격 기능(Rremoting)을 쓰기 전에, 설정과 기본 사용법은 about_Remote와 about_Remote_Requirements를 먼저 참고하세요.
WSMan: 드라이브에서 로컬 컴퓨터의 설정을 보거나 바꾸려면 관리자 권한이 필요해요. 여기에는 세션 구성(session configuration), 신뢰 호스트, 포트, 리스너(listener) 변경이 모두 포함돼요. 그리고 PowerShell을 관리자 권한으로 실행(Run as administrator)해야 해요.
관리자 권한으로 실행하는 방법
이런 오류가 보인다면 관리자 권한으로 다시 실행해야 해요.
ERROR: Access is denied. You need to run this cmdlet from an elevated
process.
시작 메뉴의 PowerShell 아이콘을 마우스 오른쪽 버튼으로 클릭하고 관리자 권한으로 실행(Run as administrator)을 선택하면 돼요.
원격 기능을 활성화하는 방법
이런 오류가 보인다면 원격 기능이 활성화되어 있지 않은 경우가 많아요.
ERROR: ACCESS IS DENIED
ERROR: The connection to the remote host was refused. Verify that the
WS-Management service is running on the remote host and configured to
listen for requests on the correct port and HTTP URL.
컴퓨터가 원격 명령을 받으려면 PowerShell 원격 기능이 활성화되어 있어야 해요. Windows PowerShell 원격 기능은 Windows Server 2012 이상 버전에서 기본으로 켜져 있어요. 만약 꺼져 있다면 Enable-PSRemoting을 실행해서 다시 켤 수 있어요. 자세한 내용은 Enable-PSRemoting을 참고하세요.
엔터프라이즈 환경에서 원격 기능 활성화하기
이런 오류가 보인다면 원격 기능이 활성화되어 있지 않은 경우가 많아요.
ERROR: ACCESS IS DENIED
ERROR: The connection to the remote host was refused. Verify that the
WS-Management service is running on the remote host and configured to
listen for requests on the correct port and HTTP URL.
단일 컴퓨터가 원격 명령을 받고 연결을 수락하도록 하려면 Enable-PSRemoting cmdlet을 사용해요.
엔터프라이즈에서 여러 컴퓨터에 원격 기능을 활성화하려면 다음의 확장 옵션을 사용할 수 있어요.
- Allow automatic configuration of listeners 그룹 정책을 활성화해서 원격용 리스너를 구성해요.
- Windows Firewall: Allow Local Port Exceptions 그룹 정책을 구성하고 활성화해요.
- WinRM 서비스의 시작 유형을
Automatic으로 설정하고 서비스를 시작해요.
그룹 정책으로 리스너를 활성화하는 방법
이런 오류가 보인다면 리스너가 제대로 구성되지 않았을 수 있어요.
ERROR: ACCESS IS DENIED
ERROR: The connection to the remote host was refused. Verify that the
WS-Management service is running on the remote host and configured to
listen for requests on the correct port and HTTP URL.
도메인의 모든 컴퓨터에 리스너를 구성하려면 Allow automatic configuration of listeners 정책을 활성화해요. 이 정책은 다음 그룹 정책 경로에 있어요.
Computer Configuration\Administrative Templates\Windows Components
\Windows Remote Management (WinRM)\WinRM service
정책을 활성화하고 IPv4와 IPv6 필터를 지정해요. 와일드카드(*)도 허용돼요.
공용 네트워크에서 원격 기능 활성화하기
로컬 네트워크가 공용(public)이고 명령에서 SkipNetworkProfileCheck 매개 변수를 사용하지 않으면 Enable-PSRemoting이 이런 오류를 반환해요.
ERROR: Unable to check the status of the firewall
Windows 서버 버전에서는 Enable-PSRemoting이 모든 네트워크 프로필에서 성공해요. 사설(private) 및 도메인("Home", "Work") 네트워크에서는 원격 액세스를 허용하는 방화벽 규칙을 만들고, 공용 네트워크에서는 같은 로컬 서브넷에서의 원격 액세스를 허용하는 규칙을 만들어요.
Windows 클라이언트 버전에서는 Enable-PSRemoting이 사설 및 도메인 네트워크에서 성공해요. 기본적으로 공용 네트워크에서는 실패하는데, SkipNetworkProfileCheck 매개 변수를 사용하면 성공하면서 같은 로컬 서브넷의 트래픽을 허용하는 방화벽 규칙을 만들어요.
참고 — Windows PowerShell 2.0에서는 서버 버전 Windows를 실행하는 컴퓨터에서
Enable-PSRemoting이 사설·도메인·공용 네트워크 모두에 원격 액세스를 허용하는 방화벽 규칙을 만들어요. 클라이언트 버전 Windows를 실행하는 컴퓨터에서는 사설 및 도메인 네트워크에만 원격 액세스를 허용하는 규칙을 만들어요.
공용 네트워크의 로컬 서브넷 제한을 없애고 어디에서든 원격 액세스를 허용하려면 다음 명령을 실행해요.
Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any
Set-NetFirewallRule cmdlet은 NetSecurity 모듈에서 제공돼요.
참고 — 방화벽 규칙의 이름은 Windows 버전에 따라 다를 수 있어요.
Get-NetFirewallRule로 규칙 목록을 확인하세요. 방화벽 규칙을 활성화하기 전에 규칙의 보안 설정을 확인해서 환경에 맞는지 검증하세요.
그룹 정책으로 방화벽 예외를 활성화하는 방법
이런 오류가 보인다면 방화벽 설정을 확인해야 해요.
ERROR: ACCESS IS DENIED
ERROR: The connection to the remote host was refused. Verify that the
WS-Management service is running on the remote host and configured to
listen for requests on the correct port and HTTP URL.
도메인의 모든 컴퓨터에 방화벽 예외를 활성화하려면 Windows Firewall: Allow local port exceptions 정책을 사용해요. 이 정책은 다음 그룹 정책 경로에 있어요.
Computer Configuration\Administrative Templates\Network
\Network Connections\Windows Firewall\Domain Profile
이 정책은 Administrators 그룹의 구성원이 WSRM(Windows Remote Management) 서비스에 대한 방화벽 예외를 만들 수 있게 해줘요.
정책 구성이 잘못되면 이런 오류가 나올 수 있어요.
The client cannot connect to the destination specified in the request. Verify
that the service on the destination is running and is accepting requests.
정책의 구성 오류가 있으면 ListeningOn 속성 값이 비어 있어요. 다음 명령으로 값을 확인해 보세요.
Get-WSManInstance winrm/config/listener -Enumerate
cfg : http://schemas.microsoft.com/wbem/wsman/1/config/listener
xsi : http://www.w3.org/2001/XMLSchema-instance
Source : GPO
lang : en-US
Address : *
Transport : HTTP
Port : 5985
Hostname :
Enabled : true
URLPrefix : wsman
CertificateThumbprint :
ListeningOn : {}
WinRM 서비스의 시작 유형 설정 방법
이런 오류가 보인다면 WinRM 서비스가 실행되고 있지 않을 수 있어요.
ERROR: ACCESS IS DENIED
PowerShell 원격 기능은 WinRM(Windows Remote Management) 서비스에 의존해요. 원격 명령을 지원하려면 서비스가 실행 중이어야 해요.
Windows 서버 버전에서는 WinRM 서비스의 시작 유형이 Automatic이에요. 하지만 클라이언트 버전에서는 기본적으로 WinRM 서비스가 비활성화되어 있어요.
다음 예제처럼 WinRM 서비스의 시작 유형을 Automatic으로 설정하고 서비스를 시작할 수 있어요. ComputerName 매개 변수는 여러 값을 받을 수 있어요.
$invokeCimMethodSplat = @{
ComputerName = 'Server01', 'Server02'
Query = 'Select * From Win32_Service Where Name = "WinRM"'
MethodName = 'ChangeStartMode'
Arguments = @{StartMode = 'Automatic'}
}
Invoke-CimMethod @invokeCimMethodSplat
기본 세션 구성을 다시 만드는 방법
이런 오류가 보인다면 기본 세션 구성이 삭제되었을 수 있어요.
ERROR: ACCESS IS DENIED
Enable-PSRemoting을 실행하면 로컬 컴퓨터에 기본 세션 구성이 만들어져요. 원격 명령에 ConfigurationName 매개 변수가 없을 때는 원격 사용자가 항상 이 기본 세션 구성을 사용해요.
컴퓨터의 기본 세션 구성이 등록 해제되었거나 삭제되었다면 Enable-PSRemoting cmdlet으로 다시 만들 수 있어요. 이 cmdlet은 여러 번 실행해도 돼요. 이미 구성된 기능이 있으면 오류를 만들지 않아요.
기본 세션 구성을 변경했다가 원래대로 복원하고 싶다면 구성을 삭제하고 다시 만들면 돼요. 변경된 세션 구성은 Unregister-PSSessionConfiguration cmdlet으로 삭제하고, 원래 구성은 Enable-PSRemoting으로 복원해요. Enable-PSRemoting은 기존 세션 구성을 변경하지 않아요.
참고 —
Enable-PSRemoting이 기본 세션 구성을 복원할 때, 구성에 명시적인 보안 설명자(security descriptor)를 만들지 않아요. 대신 구성이 기본적으로 안전한RootSDDL의 보안 설명자를 상속해요.
RootSDDL 보안 설명자를 보려면 다음을 입력하세요.
Get-Item WSMan:\localhost\Service\RootSDDL
RootSDDL을 변경하려면 WSMan: 드라이브에서 Set-Item cmdlet을 사용해요. 세션 구성의 보안 설명자를 변경하려면 SecurityDescriptorSDDL 또는 ShowSecurityDescriptorUI 매개 변수와 함께 Set-PSSessionConfiguration cmdlet을 사용해요. WSMan: 드라이브에 대한 자세한 내용은 about_WSMan_Provider를 참고하세요.
관리자 자격 증명을 제공하는 방법
이런 오류가 보인다면 기본 원격 세션 엔드포인트에 연결하려면 관리자 권한이 필요하다는 뜻이에요.
ERROR: ACCESS IS DENIED
기본 원격 세션 엔드포인트에 연결하려면 Administrators 그룹의 구성원이어야 해요. New-PSSession, Enter-PSSession, Invoke-Command cmdlet의 Credential 매개 변수를 사용하면 대체 자격 증명으로 원격 엔드포인트에 연결할 수 있어요.
다음 예제는 관리 사용자의 자격 증명을 제공하는 방법을 보여줘요.
Invoke-Command -ComputerName Server01 -Credential Domain01\Admin01
Credential 매개 변수에 대한 자세한 내용은 New-PSSession, Enter-PSSession, Invoke-Command의 도움말을 참고하세요.
관리자가 아닌 사용자에게 원격 기능 부여하기
이런 오류가 보인다면 현재 사용자에게 기본 세션 구성 사용 권한이 없다는 뜻이에요.
ERROR: ACCESS IS DENIED
기본적으로 컴퓨터의 Administrators 그룹 구성원만 기본 세션 구성을 사용할 수 있어요. 그래서 Administrators 그룹 구성원만 원격으로 컴퓨터에 연결할 수 있어요.
다른 사용자가 로컬 컴퓨터에 연결하도록 허용하려면, 그 사용자에게 로컬 컴퓨터의 기본 세션 구성에 대한 실행(Execute) 권한을 주면 돼요.
다음 예제는 로컬 컴퓨터의 기본 Microsoft.PowerShell 세션 구성의 보안 설명자를 변경할 수 있는 속성 시트를 열어줘요.
Set-PSSessionConfiguration Microsoft.PowerShell -ShowSecurityDescriptorUI
자세한 내용은 about_Session_Configurations를 참고하세요.
다른 도메인의 관리자에게 원격 기능 부여하기
이런 오류가 보인다면 다른 도메인 사용자의 관리자 권한이 로컬 컴퓨터에 반영되지 않는 상황이에요.
ERROR: ACCESS IS DENIED
다른 도메인의 사용자가 로컬 컴퓨터의 Administrators 그룹 구성원이라도, 관리자 권한으로 로컬 컴퓨터에 원격 연결할 수는 없어요. 기본적으로 다른 도메인에서 온 원격 연결은 표준 사용자 권한 토큰으로만 실행돼요.
LocalAccountTokenFilterPolicy 레지스트리 항목을 사용하면 기본 동작을 바꿔서, Administrators 그룹 구성원인 원격 사용자가 관리자 권한으로 실행되도록 할 수 있어요.
주의 —
LocalAccountTokenFilterPolicy항목은 영향받는 모든 컴퓨터의 모든 사용자에 대해 UAC(사용자 계정 컨트롤) 원격 제한을 비활성화해요. 정책을 바꾸기 전에 이 설정의 의미를 신중히 고려하세요.
LocalAccountTokenFilterPolicy 레지스트리 값을 1로 설정하려면 다음 명령을 사용해요.
$newItemPropertySplat = @{
Name = 'LocalAccountTokenFilterPolicy'
Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System'
PropertyType = 'DWord'
Value = 1
}
New-ItemProperty @newItemPropertySplat
원격 명령에서 IP 주소 사용하기
이런 오류가 보인다면 IP 주소를 사용하는 인증 설정이 필요해요.
ERROR: The WinRM client cannot process the request. If the authentication
scheme is different from Kerberos, or if the client computer is not joined to
a domain, then HTTPS transport must be used or the destination machine must
be added to the TrustedHosts configuration setting.
New-PSSession, Enter-PSSession, Invoke-Command cmdlet의 ComputerName 매개 변수는 IP 주소를 유효한 값으로 받아들여요. 하지만 Kerberos 인증은 IP 주소를 지원하지 않아요. IP 주소를 지정하면 NTLM 인증을 사용하게 돼요.
NTLM 인증을 지원하려면 다음 요구 사항을 충족해야 해요.
- 컴퓨터를 HTTPS 전송용으로 구성하거나, 로컬 컴퓨터의 TrustedHosts 목록에 원격 컴퓨터의 IP 주소를 추가해요.
- 모든 원격 명령에서
Credential매개 변수를 사용해요. 현재 사용자로 연결할 때도 이 매개 변수가 필요해요.
워크그룹 기반 컴퓨터에서 원격 연결하기
이런 오류가 보인다면 워크그룹 환경의 인증 설정이 필요해요.
ERROR: The WinRM client cannot process the request. If the authentication
scheme is different from Kerberos, or if the client computer is not joined to
a domain, then HTTPS transport must be used or the destination machine must
be added to the TrustedHosts configuration setting.
로컬 컴퓨터가 도메인에 없을 때는 다음 요구 사항을 충족해야 해요.
- 컴퓨터를 HTTPS 전송용으로 구성하거나, 로컬 컴퓨터의 TrustedHosts 목록에 원격 컴퓨터의 IP 주소를 추가해요.
- 워크그룹 기반 컴퓨터에 암호가 설정되어 있는지 확인해요. 암호가 설정되지 않았거나 빈 값이면 원격 명령을 실행할 수 없어요.
- 모든 원격 명령에서
Credential매개 변수를 사용해요. 현재 사용자로 연결할 때도 이 매개 변수가 필요해요.
신뢰 호스트 목록에 컴퓨터 추가하기
TrustedHosts 항목에는 컴퓨터 이름, IP 주소, FQDN(정규화된 도메인 이름)을 쉼표로 구분한 목록을 넣을 수 있어요. 와일드카드도 허용돼요.
신뢰 호스트 목록을 보거나 변경하려면 WSMan: 드라이브를 사용해요. TrustedHosts 항목은 WSMan:\localhost\Client 노드에 있어요. 신뢰 호스트 목록을 변경할 수 있는 권한은 컴퓨터의 Administrators 그룹 구성원에게만 있어요.
주의 —
TrustedHosts항목에 설정한 값은 컴퓨터의 모든 사용자에게 영향을 줘요.
신뢰 호스트 목록을 보려면 다음 명령을 사용해요.
Get-Item WSMan:\localhost\Client\TrustedHosts
다음 예제는 와일드카드(*)를 사용해 모든 컴퓨터를 신뢰 호스트 목록에 추가해요.
Set-Item WSMan:localhost\client\trustedhosts -Value *
와일드카드(*)를 사용해 특정 도메인의 모든 컴퓨터를 추가할 수도 있어요. 예를 들어 다음 명령은 Fabrikam 도메인의 모든 컴퓨터를 추가해요.
Set-Item WSMan:localhost\client\trustedhosts *.fabrikam.com
다음 예제는 신뢰 호스트 목록을 단일 컴퓨터로 설정해요.
$server = 'Server01.Domain01.Fabrikam.com'
Set-Item WSMan:\localhost\Client\TrustedHosts -Value $server
기존 신뢰 호스트 목록에 컴퓨터 이름을 추가하려면, 먼저 현재 값을 변수에 저장하고, 그다음 현재 값과 새 값을 쉼표로 구분해 포함한 문자열로 값을 설정해요. 다음 예제는 기존 신뢰 호스트 목록에 Server01을 추가해요.
$newServer = 'Server01.Domain01.Fabrikam.com'
$curValue = (Get-Item WSMan:\localhost\Client\TrustedHosts).Value
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "$curValue, $newServer"
특정 컴퓨터의 IP 주소를 신뢰 호스트 목록에 추가하려면 다음 명령 형식을 사용해요.
Set-Item WSMan:\localhost\Client\TrustedHosts -Value <IP Address>
예를 들어:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value 172.16.0.0
원격 컴퓨터의 TrustedHosts 목록에 컴퓨터를 추가하려면, Connect-WSMan으로 원격 컴퓨터의 WSMan: 드라이브에 연결한 다음 Set-Item으로 컴퓨터를 추가해요. 자세한 내용은 Connect-WSMan의 도움말을 참고하세요.
대체 포트에서 원격 기능 구성하기
이런 오류가 보인다면 포트 설정이 잘못되었을 수 있어요.
ERROR: The connection to the specified remote host was refused. Verify that
the WS-Management service is running on the remote host and configured to
listen for requests on the correct port and HTTP URL.
PowerShell 원격 기능은 기본적으로 HTTP 전송에 80번 포트를 사용해요. 원격 명령에서 ConnectionURI나 Port 매개 변수를 지정하지 않으면 기본 포트를 사용해요.
Set-Item cmdlet으로 리스너 리프 노드의 Port 값을 바꿀 수 있어요. 예를 들어 다음 명령은 기본 포트를 8080으로 변경해요.
Set-Item WSMan:\localhost\listener\listener*\port -Value 8080
프록시 서버로 원격 기능 구성하기
이런 오류가 보인다면 프록시 설정을 확인해야 해요.
ERROR: The client cannot connect to the destination specified in the request.
Verify that the service on the destination is running and is accepting
requests.
PowerShell 원격 기능은 HTTP 프로토콜을 사용하기 때문에 HTTP 프록시 설정의 영향을 받아요. 프록시 서버가 있는 엔터프라이즈에서는 사용자가 원격 PowerShell 컴퓨터에 직접 접근할 수 없어요.
이 문제를 해결하려면 원격 명령에서 프록시 설정 옵션을 사용해요.
New-PSSessionOptioncmdlet의ProxyAccessType,ProxyAuthentication,ProxyCredential매개 변수를 사용해 엔터프라이즈의 프록시 설정이 담긴PSSessionOption개체를 변수로 만들어요.- 만든
PSSessionOption개체가 담긴 변수를New-PSSession,Enter-PSSession,Invoke-Command명령의SessionOption매개 변수와 함께 사용해요.
$newPSSessionOptionSplat = @{
ProxyAccessType = 'IEConfig'
ProxyAuthentication = 'Negotiate'
ProxyCredential = 'Domain01\User01'
}
$SessionOption = New-PSSessionOption @newPSSessionOptionSplat
$newPSSessionSplat = @{
ConnectionUri = 'https://www.fabrikam.com'
SessionOption = $SessionOption
}
New-PSSession @newPSSessionSplat
New-PSSessionOption cmdlet에 대한 자세한 내용은 New-PSSessionOption을 참고하세요.
현재 세션의 모든 원격 명령에 이 옵션을 적용하려면, 만든 PSSessionOption 개체를 $PSSessionOption 기본 설정 변수에 설정해요. 자세한 내용은 about_Preference_Variables를 참고하세요.
로컬 컴퓨터의 모든 PowerShell 세션에 이 옵션을 적용하려면 $PSSessionOption 기본 설정 변수를 PowerShell 프로필에 추가해요. PowerShell 프로필에 대한 자세한 내용은 about_Profiles를 참고하세요.
64비트 컴퓨터에서 32비트 세션 감지하기
이런 오류가 보인다면 32비트 세션 구성에서 도구를 찾지 못했을 수 있어요.
ERROR: The term <tool-name> is not recognized as the name of a cmdlet,
function, script file, or operable program. Check the spelling of the name,
or if a path was included, verify that the path is correct and try again.
원격 컴퓨터가 64비트 Windows를 실행하고 있고, 원격 명령이 Microsoft.PowerShell32 같은 32비트 세션 구성을 사용한다면, WinRM이 WOW64 프로세스를 로드해요. 그러면 Windows가 $Env:windir\System32에 대한 모든 참조를 $Env:windir\SysWOW64 디렉터리로 자동 리디렉션해요.
그 결과 System32 디렉터리에 있지만 SysWOW64에는 대응하는 도구가 없는 실행 파일은 찾을 수 없게 돼요.
세션에서 사용 중인 프로세서 아키텍처를 확인하려면 PROCESSOR_ARCHITECTURE 환경 변수 값을 사용해요.
$s = New-PSSession -ComputerName Server01 -ConfigurationName CustomShell
Invoke-Command -Session $s {$Env:PROCESSOR_ARCHITECTURE}
x86
자세한 내용은 about_Session_Configurations를 참고하세요.
정책 및 기본 설정 문제 해결
이 섹션에서는 로컬 및 원격 컴퓨터에 설정된 정책과 기본 설정과 관련된 원격 문제를 다뤄요.
Import-PSSession과 Import-Module의 실행 정책 변경하기
이런 오류가 보인다면 실행 정책 때문에 모듈을 가져올 수 없는 상황이에요.
ERROR: Import-Module: File <filename> cannot be loaded because the
execution of scripts is disabled on this system.
Import-PSSession과 Export-PSSession cmdlet은 서명되지 않은 스크립트 파일과 서식 파일이 포함된 모듈을 만들어요. 이 cmdlet들이 만든 모듈을 가져오려면 현재 세션의 실행 정책이 Restricted나 AllSigned이면 안 돼요. 자세한 내용은 about_Execution_Policies를 참고하세요.
로컬 컴퓨터의 실행 정책을 바꾸지 않고 모듈을 가져오려면 Set-ExecutionPolicy의 Scope 매개 변수를 사용해 단일 프로세스에 대해 덜 제한적인 실행 정책을 설정해요. 예를 들어 다음 예제는 현재 프로세스의 실행 정책을 RemoteSigned로 설정해요. 이 변경은 현재 프로세스에만 영향을 줘요.
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
powershell.exe의 ExecutionPolicy 매개 변수를 사용해 덜 제한적인 실행 정책으로 단일 세션을 시작할 수도 있어요.
pwsh.exe -ExecutionPolicy RemoteSigned
할당량(quota) 설정·변경하기
할당량을 사용하면 의도적이든 우연적이든 과도한 리소스 사용으로부터 로컬 컴퓨터와 원격 컴퓨터를 보호할 수 있어요. 할당량이 명령과 충돌하면 PowerShell이 다음 오류를 생성해요.
ERROR: The total data received from the remote client exceeded allowed
maximum.
WSMan 공급자에는 다음 할당량 설정이 있어요.
WSMan:<ComputerName>노드의MaxEnvelopeSizeKB와MaxProviderRequests설정, 그리고WSMan:<ComputerName>\Service노드의MaxConcurrentOperations,MaxConcurrentOperationsPerUser,MaxConnections설정.New-PSSessionOptioncmdlet의MaximumReceivedDataSizePerCommand와MaximumReceivedObjectSize매개 변수, 그리고$PSSessionOption기본 설정 변수를 사용해 로컬 컴퓨터를 보호할 수 있어요.- 원격 컴퓨터를 보호하려면
Register-PSSessionConfigurationcmdlet의MaximumReceivedDataSizePerCommandMB와MaximumReceivedObjectSizeMB매개 변수를 사용해 세션 구성에 제한을 추가해요.
오류를 해결하려면 원격 명령을 할당량에 맞게 바꾸거나, 명령이 완료되도록 할당량을 늘려요. 예를 들어 다음 명령은 원격 컴퓨터의 Microsoft.PowerShell 세션 구성에서 개체 크기 할당량을 10MB(기본값)에서 11MB로 늘려요.
$setPSSessionConfigurationSplat = @{
Name = 'Microsoft.PowerShell'
MaximumReceivedObjectSizeMB = 11
Force = $true
}
Set-PSSessionConfiguration @setPSSessionConfigurationSplat
WS-Management 할당량에 대한 자세한 내용은 about_WSMan_Provider를 참고하세요.
시간 초과 오류 해결하기
시간 초과(timeout)를 사용하면 의도적이든 우연적이든 과도한 리소스 사용으로부터 로컬 컴퓨터와 원격 컴퓨터를 보호할 수 있어요. 로컬과 원격 컴퓨터 양쪽에 시간 초과가 설정되어 있으면 PowerShell은 가장 짧은 시간 초과 설정을 사용해요.
시간 초과 값이 작업 완료를 허용하지 않으면 PowerShell이 작업을 종료하고 다음 오류를 생성해요.
ERROR: The WS-Management service cannot complete the operation within the
time specified in OperationTimeout.
WSMan 공급자에는 다음 시간 초과 설정이 있어요.
WSMan:<ComputerName>노드의MaxTimeoutMs설정, 그리고WSMan:<ComputerName>\Service노드의EnumerationTimeoutMs와MaxPacketRetrievalTimeSeconds설정.New-PSSessionOptioncmdlet의CancelTimeout,IdleTimeout,OpenTimeout,OperationTimeout매개 변수와$PSSessionOption기본 설정 변수를 사용해 로컬 컴퓨터를 보호할 수 있어요.- 세션 구성에 시간 초과 값을 프로그래밍 방식으로 설정해 원격 컴퓨터도 보호할 수 있어요.
오류를 해결하려면 시간 초과 간격 안에 완료되도록 명령을 바꾸거나, 명령이 완료되도록 시간 초과 간격을 늘려요. 다음 예제는 OperationTimeout 값이 4분(ms 단위)인 세션 옵션을 만들고, 그 세션 옵션으로 원격 세션을 만들어요.
$pso = New-PSSessionOption -OperationTimeout 240000
New-PSSession -ComputerName Server01 -SessionOption $pso
WS-Management 시간 초과에 대한 자세한 내용은 about_WSMan_Provider를 참고하세요.
응답하지 않는 명령 중단하기
UI가 있는 프로그램, 입력을 요구하는 콘솔 응용 프로그램, Win32 콘솔 API를 사용하는 콘솔 응용 프로그램 같은 일부 네이티브 프로그램은 PowerShell 원격 호스트에서 제대로 작동하지 않아요.
이런 프로그램을 사용하면 출력이 없거나, 일부만 출력되거나, 원격 명령이 완료되지 않는 등 예상치 못한 동작이 나타날 수 있어요.
응답하지 않는 프로그램을 끝내려면 Ctrl + c를 눌러요. 로컬 호스트와 원격 세션에서 Get-Error를 사용해 보고된 오류를 확인하세요.
작업 실패에서 복구하기
작업이 완료되기 전에 종료되면 다음 오류가 반환돼요.
ERROR: The I/O operation has been aborted because of either a thread exit or
an application request.
보통 이 문제는 다른 WinRM 작업이 진행되는 동안 WinRM 서비스가 중지되거나 다시 시작될 때 발생해요.
이 문제를 해결하려면 WinRM 서비스가 실행 중인지 확인하고 명령을 다시 시도해요.
- 관리자 권한으로 PowerShell을 시작해요.
- 다음 명령을 실행해요:
Start-Service WinRM - 오류를 발생시킨 명령을 다시 실행해요.
Linux 및 macOS 제한 사항
Linux와 macOS에서의 PowerShell 원격 기능은 SSH 기반 원격 기능을 사용해요. 자세한 내용은 PowerShell Remoting Over SSH를 참고하세요.