대부분의 PowerShell 모듈은 Install-Module 명령을 통해 공식 PowerShell 갤러리(PSGallery) 저장소에서 온라인으로 설치합니다. 하지만 컴퓨터가 격리된 네트워크에 있거나 PSRepository에 대한 직접 접근이 제한되어 있다면 모듈을 설치할 수 없습니다. 인터넷 직접 접속이 대부분 차단되어 있는 Windows Server 호스트에 모듈을 설치하려는 경우에도 마찬가지입니다. 이 글에서는 PowerShell 모듈을 오프라인으로 설치하는 방법과 원격 컴퓨터에서 모듈을 가져오는 방법(예: SQLServer 관리용 PoSh 모듈 사용 시)을 소개합니다.
오프라인 컴퓨터에 PowerShell 모듈 설치하기
PowershellGallery.com에는 모듈을 직접 내려받을 수 있는 링크가 제공되지 않습니다. 사이트에서 내려받을 수 있는 것은 NuGet 패키지(.nupkg 파일)뿐입니다. NUPKG 파일로도 모듈을 설치할 수 있지만 완전한 설치가 되지 않으며, 가장 큰 문제는 의존성(dependency)이 자동으로 해결되지 않는다는 점입니다.
먼저 인터넷이 연결된 컴퓨터에서 필요한 PowerShell 모듈을 준비해야 합니다. 해당 컴퓨터에는 PowerShell 5.1 이상이 설치되어 있어야 합니다.
$PSVersionTable.PSVersion모듈이 PSGallery에 존재하는지 확인합니다:
Find-Module –Name *SqlServer* | Select Name, Version, Repository모듈을 지정한 로컬 폴더로 내려받습니다:
Save-Module –Name SqlServer –Path C:\PS\내려받은 폴더를 모듈을 설치할 다른 컴퓨터로 복사합니다.
PowerShell 모듈이 저장되는 폴더를 먼저 확인해 보겠습니다:
$env:PSModulePath -split ';'확인 결과, PowerShell 모듈은 다음 경로 중 하나에 위치합니다:
C:\Users\username\Documents\WindowsPowerShell\Modules($Home\Documents\PowerShell\Modules) – 이 폴더의 모듈은 해당 사용자만 사용할 수 있습니다(CurrentUser)C:\Program Files\WindowsPowerShell\Modules($Env:ProgramFiles\WindowsPowerShell\Modules) – 컴퓨터의 모든 사용자를 위해 모듈을 설치할 때 사용하는 경로입니다(-Scope AllUsers)C:\Windows\system32\WindowsPowerShell\v1.0\Modules– 기본 제공 모듈이 들어 있는 폴더입니다
모듈 폴더를 C:\Program Files\WindowsPowerShell\Modules로 복사합니다.
SQLServer 모듈을 정상적으로 사용할 수 있는지 확인합니다:
Get-Module -Name SQLServer -ListAvailable모듈이 설치된 디렉터리는 아래와 같이 확인할 수 있습니다:
(Get-Module -ListAvailable SQLServer).path모듈에서 사용할 수 있는 명령 목록을 출력합니다:
Get-Command -Module SQLServer같은 방식으로 어떤 모듈이든 설치할 수 있습니다. 실무에서는 주로 SQLServer, PSWindowsUpdate, VMware용 PowerCLI 모듈을 설치할 때 이 방법이 유용하게 사용됩니다.
당연한 이야기지만, 오프라인 장치에 AzureAD나 Exchange Online 같은 클라우드 연동 PowerShell 모듈을 설치하는 것은 의미가 없습니다.
원격 컴퓨터에서 PowerShell 모듈 가져오기
모든 컴퓨터에 일일이 PowerShell 모듈을 설치하고 싶지 않다면 PSRemoting을 사용해 원격 컴퓨터에서 모듈을 가져올 수 있습니다:
$session = New-PSSession -ComputerName dub-sql1원격 컴퓨터에 설치된 모듈 목록을 표시하려면:
Get-Module -PSSession $session –ListAvailable지정한 PowerShell 모듈을 로컬 컴퓨터로 가져오려면:
Import-Module -PSSession $session -Name SqlServer작업이 끝나면 반드시 세션을 닫습니다:
Remove-PSSession $session암시적 원격(Implicit Remoting)을 활용하면 원격 컴퓨터에 설치된 PowerShell 모듈을 로컬에서 사용하는 또 다른 방법도 있습니다.
Invoke-Command로 원격 컴퓨터에 연결한 뒤 원하는 PowerShell 모듈을 가져옵니다:$session = New-PSSession -ComputerName dub-sql1
Invoke-Command {Import-Module SqlServer} -Session $session
원격 세션의 모듈 cmdlet을 로컬 모듈로 내보냅니다:
Export-PSSession -Session $s -CommandName *-Sql* -OutputModule RemoteSQLServer -AllowClobber이 명령은 로컬 컴퓨터에 새로운 RemoteSQLServer PowerShell 모듈(C:\Program Files\WindowsPowerShell\Modules)을 생성합니다. 단, cmdlet 파일 자체는 복사되지 않으며 원격 세션을 통해서만 실행됩니다.
세션을 닫습니다:
Remove-PSSession $session이후 이 모듈의 cmdlet을 사용하려면 세션으로 가져오기만 하면 됩니다:
Import-Module RemoteSQLServer이제 원격 컴퓨터에 명시적으로 연결하지 않고도 모든 SQL 모듈 cmdlet을 사용할 수 있습니다. Invoke-Sqlcmd로 MS SQL 데이터베이스를 조회해 보세요. MSSQL 관련 명령은 PowerShell 콘솔을 닫거나 모듈을 제거할 때까지 계속 사용할 수 있습니다.