스케줄된 작업을 통해 Windows 원격 관리(WinRM) 상에서 높은 권한으로 PowerShell 명령을 실행합니다.
CI
Gem Version
이 gem은 마법 같은 WinRM 제약 사항을 벗어나 네트워크 공유에 접근하거나 Windows 업데이트, .NET, SQL Server 등을 설치할 수 있게 해줍니다.
지원되는 Ruby 버전
Ruby 3.1 이상 버전이 지원됩니다. 이 gem은 여전히 Ruby 3.0에 설치할 수 있지만, 3.0은 지원 종료(end-of-life) 버전이며 테스트되지 않았습니다.
높은 권한으로 명령 실행하기
require 'winrm'
require 'winrm-elevated'
...
서비스 계정 사칭 (Impersonating a service account)
비밀번호를 nil로 전달하면, winrm-elevated가 해당 명령을 서비스 계정으로 실행해야 한다고 가정합니다:
require 'winrm'
require 'winrm-elevated'
...
대화형 작업 사용 (Using an interactive task)
interactive_logon을 true로 설정하면, 스케줄된 작업이 대화형 로그온(interactive logon)을 사용하도록 구성되어, winrm 자격 증명과 동일한 사용자로 로그인했을 경우 모든 명령 활동을 RDP 세션에서 볼 수 있습니다:
require 'winrm'
require 'winrm-elevated'
...
작동 방식은 무엇인가요?
이 gem은 스케줄된 작업을 사용하여 Windows 장치 로컬의 새로운 로그온 세션을 생성하는 방식으로 작동합니다. 이 시점 이후 WinRM은 단순히 로그 파일을 통해 스케줄된 작업의 출력을 읽는 데 사용됩니다.
- WinRM 컨텍스트 외부에서 실행하려는 명령을 임시 파일로 저장합니다.
- 이 파일을 WinRM을 통해 장치에 업로드합니다.
- WinRM을 통해 스크립트를 실행하고 다음 작업을 수행합니다:
- 명령을 실행하고 표준 출력(stdout) 및 표준 에러(stderr)를 elevated_shell.ps1이 아는 위치로 리디렉션할 스케줄된 작업이 생성됩니다.
- 스케줄된 작업이 실행됩니다.
- elevated_shell.ps1은 stdout 및 stderr 로그 파일을 폴링하여 WinRM으로 다시 작성합니다. 이 스크립트는 스케줄된 작업이 완료될 때까지 이 루프를 계속합니다.
문제 해결
문제가 발생하면 가장 먼저 네트워크 또는 WinRM 구성 문제일 가능성이 높습니다. 먼저 WinRM gem troubleshooting을 확인해 보세요.
기여(Contributing)
- 포크(Fork)합니다.
- 브랜치를 생성합니다 (git checkout -b my_feature_branch)
- 단위 테스트 및 통합 테스트를 실행합니다 (bundle exec rake integration)
- 변경 사항을 커밋합니다 (git commit -am "Added a sweet feature")
- 브랜치에 푸시합니다 (git push origin my_feature_branch)
- 메인(main)으로 풀 리퀘스트(pull request)를 생성합니다 (이 변경 사항이 무엇을 하는지 저희가 파악할 수 있도록 충분한 세부 정보를 제공해 주시기 바랍니다)
테스트 실행하기(Running the tests)
개발 중 의존성 관리를 위해 Bundler를 사용합니다.
의존성을 확보했다면, rake로 단위 테스트를 실행할 수 있습니다:
통합 테스트를 실행하려면 WinRM 서비스가 적절하게 구성된 Windows 환경이 필요합니다.
- WinRM이 구성된 Windows VM을 생성합니다 (위 참조).
- config-example.yml을 config.yml로 복사하고, 이 파일을 사용하여 WinRM 연결 세부 정보를 편집합니다.
bundle exec rake integration을 실행합니다.
WinRM-elevated 작성자(Authors)
기여자(Contributors)