インターネット接続なしでPowerShellモジュールをオフラインインストールする方法
人気の高いPowerShellモジュールは、通常、公式リポジトリ「PowerShell Gallery(PSGallery)」に対してInstall-Moduleコマンドを実行し、オンライン経由でインストールします。しかし、ネットワークが分離された環境や、PSRepositoryへの直接アクセスが制限されている環境では、この方法でモジュールをインストールできません。Windows Serverホストでは、セキュリティポリシーによりインターネットへの直接アクセスが遮断されているケースも多く、同じ問題に直面しがちです。
本記事では、PowerShellモジュールをオフラインでインストールする手順と、リモートコンピューターからモジュールを取り込む方法(SQLServer管理用モジュールを利用する場合などを想定)について解説します。
PowershellGallery.comからは直接ダウンロードできない
まず押さえておきたい注意点として、PowershellGallery.comにはモジュールをダウンロードするための直接リンクが存在しません。サイトから入手できるのはNuGetパッケージ(.nupkgファイル)のみです。NUPKGファイルからもモジュールをインストールできますが、これは完全なインストールとは言えません。最大の問題は、依存関係にあるモジュールが自動的に解決されない点です。
オフラインコンピューターへのPowerShellモジュールのインストール手順
最初に、インターネットにアクセスできるコンピューターで、必要なPowerShellモジュールを準備します。作業用コンピューターにはPowerShell 5.1以降が必要です。次のコマンドでバージョンを確認してください。
$PSVersionTable.PSVersion
目的のモジュールがPSGalleryに存在することを確認します。
Find-Module –Name *SqlServer* | Select Name, Version, Repository
モジュールを、指定したローカルフォルダーにダウンロードします。
Save-Module –Name SqlServer –Path C:\PS\
ダウンロードしたフォルダーを、モジュールをインストールしたい別のコンピューターへコピーします。
PowerShellモジュールの格納場所を確認する
PowerShellモジュールがどのフォルダーに配置されるのかを確認しましょう。次のコマンドを実行します。
$env:PSModulePath -split ";"
実行結果から、PowerShellモジュールは主に以下のいずれかのパスに格納されていることがわかります。
C:\Users\ユーザー名\Documents\WindowsPowerShell\Modules($Home\Documents\PowerShell\Modules)— このフォルダーのモジュールはそのユーザーアカウントでのみ利用可能(CurrentUserスコープ)C:\Program Files\WindowsPowerShell\Modules($Env:ProgramFiles\WindowsPowerShell\Modules)— コンピューターの全ユーザー向けにモジュールをインストールするパス(AllUsersスコープ)C:\Windows\system32\WindowsPowerShell\v1.0\Modules— OS組み込み標準モジュールの既定フォルダー
コピーしたモジュールフォルダーを、C:\Program Files\WindowsPowerShell\Modules 配下に配置します。全ユーザーが利用できるようにしたい場合は、このパスを選ぶのがおすすめです。特定のユーザーだけで十分であれば、Documents配下に置いても構いません。
SQLServerモジュールが利用可能になったことを確認します。
Get-Module -Name SQLServer -ListAvailable
モジュールが格納されているディレクトリのパスは、次のようにして取得できます。
(Get-Module -ListAvailable SQLServer).path
モジュールに含まれるコマンドレットの一覧を表示します。
Get-Command -Module SQLServer
同じ手順で、任意のPowerShellモジュールをオフライン環境に導入できます。筆者もよく、SQLServer、PSWindowsUpdate、VMware向けのPowerCLIなどのモジュールをこの方法でインストールしています。なお、AzureADやExchange OnlineのPowerShellモジュールはクラウドサービスへの接続が前提となるため、オフラインデバイスにインストールしても意味がありません。
リモートコンピューターからPowerShellモジュールをインポートする
すべてのコンピューターにモジュールを個別にインストールしたくない場合は、PowerShellリモーティング(PSRemoting)を利用して、リモートコンピューターからモジュールをインポートできます。
まず、リモートコンピューターへのPSSessionを作成します。
$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でリモートコンピューターに接続し、必要なモジュールをインポートします。
$session = New-PSSession -ComputerName dub-sql1
Invoke-Command {Import-Module SqlServer} -Session $session
リモートセッションからコマンドレットをエクスポートし、ローカルに新しいモジュールを作成します。
Export-PSSession -Session $session -CommandName *-Sql* -OutputModule RemoteSQLServer -AllowClobber
このコマンドにより、ローカルコンピューター上に新しい「RemoteSQLServer」というPowerShellモジュールが作成されます(C:\Program Files\WindowsPowerShell\Modules 配下)。ただし、コマンドレット本体のファイルはコピーされません。実際には、リモート側で処理を実行するためのプロキシ関数が生成される仕組みです。
セッションを閉じます。
Remove-PSSession $session
以降は、このモジュールのコマンドレットを使うときに、セッションへインポートするだけでOKです。
Import-Module RemoteSQLServer
これで、リモートコンピューターへの明示的な接続を確立しなくても、SQLモジュールのすべてのコマンドレットが利用できるようになります。たとえば、Invoke-Sqlcmdを使ってMS SQLデータベースへクエリを実行してみてください。MSSQL関連のコマンドは、PowerShellコンソールを閉じるかモジュールを削除するまで継続して使用できます。
-
Windows 10でインターネット接続をブロックする5つの方法|アプリ別の制限手順も解説
Windows 10のPCでインターネットアクセス(接続)をブロックしたいとお考えなら、この記事が役立ちます。今回は、PC上でインターネット接続を無効化するさまざまな方法を詳しく解説します。 インターネット接続をブロックしたい理由は人それぞれです。家庭用PCでは、子どもや家族がうっかりマルウェアやウイルスをダウンロードしてしまうのを防ぎたいケース、通信量(帯域幅)を節約したいケース、企業では従業員が業務に集中できるようインターネットを制限したいケースなどが挙げられます。この記事では、インターネット接続全体をブロックする方法から、特定のプログラムやアプリケーションのみをブロックする方法まで、すべ
-
Windows 11でInternet Explorerを使う方法|Microsoft EdgeのIEモード設定ガイド
MicrosoftのレガシーブラウザであるInternet Explorer(IE)は、最新のWindows 11では単体アプリとして利用できません。技術に詳しい方であれば、IEのインストールファイルを入手してWindows 11にインストールを試みることも可能ですが、残念ながら正常に動作しません。仮にインストール処理が完了しても、IEアプリはWindows 11上のどこにも見つかりません。Windows 11でInternet Explorerを使用する唯一の方法は、Microsoft Edgeに搭載されている「IEモード」を利用することです。 Windows 11でInternet Exp