PowerShellでIISサイト新規作成と証明書設定を自動化する方法

PowerShellは、Windows環境での管理タスクを効率化するための強力なツールです。特に、IIS(インターネットインフォメーションサービス)の管理においては、手動操作を自動化することで大幅な作業効率化が可能です。本記事では、PowerShellを活用してIISのサイトを新規作成し、SSL証明書を設定してHTTPS通信を有効化する方法を解説します。

IISの管理作業をスクリプト化することで、設定の再現性や運用の自動化が実現できます。また、スクリプトを応用することで、複数のサイトを一括で設定するなど、柔軟な運用も可能です。これにより、管理者の負担を軽減し、より安定したシステム運用が期待できます。

これから、IISの管理モジュールの準備からSSL証明書の適用まで、順を追って具体的な方法を紹介していきます。

目次

PowerShellでIISを管理する準備


PowerShellを使ってIISを管理するためには、事前に必要な環境設定とモジュールのインストールを行う必要があります。このセクションでは、IIS管理を始めるための基盤作りについて解説します。

IIS管理モジュールのインストール


PowerShellでIISを管理するには、WebAdministrationモジュールが必要です。このモジュールは、WindowsサーバーにIISがインストールされると自動的に利用可能になります。以下の手順でインストールを確認および有効化してください。

手順 1: IISのインストール

  1. サーバーマネージャーを開く
    サーバーマネージャーから「役割と機能の追加」を選択します。
  2. IISを選択
    「役割の選択」画面で「Webサーバー(IIS)」を有効化します。
  3. 必要な機能を追加
    「管理ツール」の中から「IIS管理コンソール」も選択してください。
  4. インストールの完了
    インストールが終了したら、サーバーを再起動します。

手順 2: 必要なPowerShellモジュールの確認

  1. モジュールの確認
    以下のコマンドを実行してWebAdministrationモジュールが存在するか確認します。
   Get-Module -ListAvailable | Where-Object {$_.Name -eq "WebAdministration"}
  1. モジュールのインポート
    モジュールが見つかった場合は、以下のコマンドでインポートします。
   Import-Module WebAdministration
  1. モジュールの動作確認
    コマンドがエラーなく実行できた場合、IIS管理の準備が完了です。

PowerShellの実行ポリシー設定


PowerShellスクリプトを実行するには、適切な実行ポリシーが必要です。以下のコマンドでポリシーを確認し、必要に応じて変更してください。

Get-ExecutionPolicy
Set-ExecutionPolicy RemoteSigned

RemoteSignedは、ローカルで作成されたスクリプトの実行を許可し、ダウンロードされたスクリプトに署名を要求します。

準備完了の確認


以上の手順が完了したら、以下のコマンドを試してIISが操作可能か確認します。

Get-Website

これでIIS管理を行う準備が整いました。次に、IISサイトを新規作成する具体的な手順を説明します。

IISサイトの基本的な新規作成手順


PowerShellを利用して、IISに新しいウェブサイトを作成する方法を解説します。このセクションでは、基本的なスクリプト構文と重要なポイントを示します。

新規サイト作成の基本構文


PowerShellでは、New-Websiteコマンドレットを使用してIISに新しいウェブサイトを作成できます。以下は、新規サイト作成の基本例です。

New-Website -Name "MyNewSite" -PhysicalPath "C:\inetpub\wwwroot\MyNewSite" -Port 80 -IPAddress "*" -HostHeader "mynewsite.local"

コマンドのオプション説明

  • -Name:作成するサイトの名前を指定します。
  • -PhysicalPath:サイトの物理的なファイルパスを指定します。
  • -Port:使用するポート番号を指定します。通常はHTTPの場合80を使用します。
  • -IPAddress:バインドするIPアドレスを指定します。*を指定すると全てのIPアドレスにバインドされます。
  • -HostHeader:ホストヘッダー(ドメイン名)を指定します。

フォルダーの作成


IISサイトの作成に先立ち、物理パスとなるフォルダーを作成する必要があります。以下のコマンドを使用して、必要なフォルダーを準備します。

New-Item -Path "C:\inetpub\wwwroot\MyNewSite" -ItemType Directory

アプリケーションプールの設定


新しいウェブサイトに独自のアプリケーションプールを設定することを推奨します。以下はアプリケーションプールを作成し、サイトに割り当てる方法です。

New-WebAppPool -Name "MyNewSiteAppPool"
Set-ItemProperty "IIS:\Sites\MyNewSite" -Name applicationPool -Value "MyNewSiteAppPool"

スクリプトの完全例


以下は、IISサイトを新規作成するための完全なスクリプト例です。

# サイトの物理パスを作成
$sitePath = "C:\inetpub\wwwroot\MyNewSite"
if (-Not (Test-Path $sitePath)) {
    New-Item -Path $sitePath -ItemType Directory
}

# アプリケーションプールを作成
$appPoolName = "MyNewSiteAppPool"
New-WebAppPool -Name $appPoolName

# 新しいウェブサイトを作成
New-Website -Name "MyNewSite" -PhysicalPath $sitePath -Port 80 -IPAddress "*" -HostHeader "mynewsite.local"

# サイトにアプリケーションプールを割り当て
Set-ItemProperty "IIS:\Sites\MyNewSite" -Name applicationPool -Value $appPoolName

作成後の確認


作成されたサイトがIISに正しく登録されているか確認するには、以下のコマンドを使用します。

Get-Website

次のステップ


このセクションでIISサイトの基本的な作成方法を学びました。次に、バインドとポートの詳細設定について説明します。

バインドとポートの設定方法


新しいIISサイトを作成した後、ホスト名やポート番号、バインド設定を適切に行うことが重要です。このセクションでは、PowerShellを使用したバインドとポートの設定手順を解説します。

バインド設定の基本


IISでは、バインドを使用してサイトへのリクエストを識別します。バインドには次の要素が含まれます:

  • IPアドレス:リクエストをリッスンするIPアドレス(通常は*で全てを許可)。
  • ポート番号:リクエストが送信されるポート(HTTP: 80, HTTPS: 443が一般的)。
  • ホストヘッダー:特定のドメイン名にリクエストを関連付けるオプション。

新規バインドの追加


既存のサイトにバインドを追加する場合、New-WebBindingコマンドレットを使用します。以下はその基本例です。

New-WebBinding -Name "MyNewSite" -IPAddress "*" -Port 8080 -Protocol http

コマンドのオプション説明

  • -Name:対象のサイト名を指定します。
  • -IPAddress:バインドするIPアドレス。*で全てのIPを対象にします。
  • -Port:使用するポート番号。
  • -Protocol:プロトコルを指定します(httpまたはhttps)。

既存バインドの変更


既存のバインドを変更する場合、Set-WebBindingコマンドレットを使用します。以下は、ポート番号を変更する例です。

Set-WebBinding -Name "MyNewSite" -BindingInformation "*:80:" -PropertyName Port -Value 8080

HTTPSバインドの設定


HTTPSで通信を有効化するためには、SSL証明書を使用したバインドが必要です。以下の手順でHTTPSバインドを設定します。

手順 1: 証明書の取得


証明書の詳細は次セクションで説明しますが、証明書を取得しインポートしておく必要があります。

手順 2: HTTPSバインドを追加


以下のスクリプトは、証明書を指定してHTTPSバインドを設定する例です。

# 証明書のThumbprintを取得
$cert = Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Subject -match "CN=mynewsite.local" }

# HTTPSバインドを追加
New-WebBinding -Name "MyNewSite" -IPAddress "*" -Port 443 -Protocol https
Set-WebBinding -Name "MyNewSite" -BindingInformation "*:443:" -SslFlags 1

バインド情報の確認


設定が正しく適用されたかを確認するには、以下のコマンドを使用します。

Get-WebBinding -Name "MyNewSite"

エラー時のトラブルシューティング

  • ポート競合エラー:ポートが既に使用されている場合、他のプロセスを停止するか、別のポートを使用してください。以下で使用中のポートを確認できます:
  netstat -ano | findstr :80
  • 証明書の設定エラー:証明書のThumbprintやCNが正しいか確認し、再度設定を試みてください。

次のステップ


バインドとポートの設定を学びました。次に、SSL証明書の取得とインポート方法を解説します。

SSL証明書の取得とインポート方法


HTTPS通信を有効にするためには、SSL証明書の取得とインポートが必要です。このセクションでは、無料のLet’s Encryptを利用する方法と既存の証明書をインポートする手順を解説します。

Let’s Encryptを利用した証明書の取得


Let’s Encryptは無料で利用できるSSL証明書を提供しています。PowerShellを使用して自動化するには、CertbotまたはPosh-ACMEモジュールを使用します。ここでは、Posh-ACMEモジュールを用いた手順を紹介します。

手順 1: Posh-ACMEモジュールのインストール


以下のコマンドを実行してモジュールをインストールします。

Install-Module -Name Posh-ACME -Scope CurrentUser

手順 2: Let’s Encrypt証明書の取得


次に、証明書を取得するコマンドを実行します。

New-PACertificate -Domain "mynewsite.local" -AcceptTOS

このコマンドは、ドメイン所有権の確認(DNSまたはHTTPによる検証)を行い、証明書を生成します。

手順 3: 証明書の配置


取得した証明書は、IISで利用できるようにローカルマシンストアにインポートします。

Import-PfxCertificate -FilePath "C:\Path\To\Certificate.pfx" -CertStoreLocation Cert:\LocalMachine\My

既存の証明書のインポート


すでに取得済みの証明書(PFX形式など)を利用する場合は、以下の手順でインポートします。

手順 1: PFXファイルの準備


証明書ファイル(例: certificate.pfx)とそのパスワードを準備します。

手順 2: 証明書をインポート


以下のコマンドを使用して証明書をインポートします。

$certPassword = ConvertTo-SecureString "your-password" -AsPlainText -Force
Import-PfxCertificate -FilePath "C:\Path\To\certificate.pfx" -CertStoreLocation Cert:\LocalMachine\My -Password $certPassword

インポート済み証明書の確認


インポートされた証明書を確認するには、以下のコマンドを使用します。

Get-ChildItem -Path Cert:\LocalMachine\My

トラブルシューティング

  • 証明書が見つからない場合:インポート後にGet-ChildItemで正しい証明書情報が表示されない場合、Cert:\LocalMachine\Myの指定が正しいか確認してください。
  • 権限エラー:PowerShellを管理者権限で実行しているか確認してください。

次のステップ


SSL証明書の取得とインポートが完了したら、次にIISサイトへ証明書を適用し、HTTPSを有効化する方法を解説します。

IISサイトにSSL証明書を適用する方法


取得したSSL証明書をIISサイトに適用し、HTTPS通信を有効にする方法を解説します。このセクションでは、PowerShellを使用して証明書をバインドに関連付ける具体的な手順を紹介します。

SSL証明書のThumbprintを取得


IISに適用する証明書を指定するには、証明書のThumbprint(指紋)を取得する必要があります。以下のコマンドを実行して、ローカルマシンストアにインポートされた証明書のThumbprintを確認します。

Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Subject -match "CN=mynewsite.local" } | Select-Object Thumbprint

HTTPSバインドの追加


HTTPSバインドを設定するには、証明書のThumbprintを使用してIISに関連付けを行います。以下の手順で設定を行います。

手順 1: HTTPSバインドを作成


New-WebBindingコマンドを使用して、HTTPSバインドを作成します。

New-WebBinding -Name "MyNewSite" -IPAddress "*" -Port 443 -Protocol https

手順 2: SSL証明書を割り当て


取得したThumbprintを使用して証明書をバインドに関連付けます。

$thumbprint = "YOUR_CERTIFICATE_THUMBPRINT"
$siteName = "MyNewSite"

# SSL証明書をバインドに適用
Set-ItemProperty "IIS:\SslBindings\0.0.0.0!443" -Name "CertificateHash" -Value $thumbprint
Set-ItemProperty "IIS:\SslBindings\0.0.0.0!443" -Name "CertificateStoreName" -Value "My"

設定の確認


HTTPSバインドが正しく設定されたかを確認するには、以下のコマンドを実行します。

Get-WebBinding -Name "MyNewSite" | Where-Object { $_.protocol -eq "https" }

また、証明書が正しく割り当てられているかを確認するには、以下のコマンドを使用します。

Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq $thumbprint }

ブラウザでの動作確認


すべての設定が完了したら、ブラウザでサイトのURL(例: https://mynewsite.local)にアクセスし、HTTPSが有効になっていることを確認します。

トラブルシューティング

  • 証明書エラーが表示される場合:証明書のCN(Common Name)がサイトのホスト名と一致しているか確認してください。
  • バインドが適用されない場合Set-ItemPropertyで指定したThumbprintやストア名が正しいか再確認してください。

次のステップ


IISサイトにSSL証明書を適用し、HTTPS通信を有効にする方法を学びました。次に、スクリプトの応用例やエラー発生時の対処方法について解説します。

スクリプトの応用例とエラー対策


ここでは、IISサイト管理をさらに効率化するスクリプトの応用例と、エラーが発生した場合の対処方法を解説します。

スクリプトの応用例

応用例 1: 複数サイトの一括設定


複数のサイトを効率的に作成する場合、スクリプトで繰り返し処理を行うことができます。以下の例では、複数のサイトをループで設定します。

# サイト設定のリスト
$sites = @(
    @{ Name = "Site1"; Path = "C:\inetpub\wwwroot\Site1"; HostHeader = "site1.local"; Port = 80 },
    @{ Name = "Site2"; Path = "C:\inetpub\wwwroot\Site2"; HostHeader = "site2.local"; Port = 80 }
)

# サイト作成ループ
foreach ($site in $sites) {
    # フォルダー作成
    if (-Not (Test-Path $site.Path)) {
        New-Item -Path $site.Path -ItemType Directory
    }

    # サイト作成
    New-Website -Name $site.Name -PhysicalPath $site.Path -Port $site.Port -IPAddress "*" -HostHeader $site.HostHeader
}

応用例 2: タスクスケジューラーを利用した自動更新


SSL証明書を定期的に更新する必要がある場合、スクリプトをWindowsのタスクスケジューラーに登録して自動実行できます。

# 証明書更新スクリプト
New-PACertificate -Domain "mynewsite.local" -AcceptTOS
$certPath = "C:\Path\To\UpdatedCertificate.pfx"
$certPassword = ConvertTo-SecureString "your-password" -AsPlainText -Force
Import-PfxCertificate -FilePath $certPath -CertStoreLocation Cert:\LocalMachine\My -Password $certPassword

タスクスケジューラーでこのスクリプトを設定し、証明書を定期的に更新します。

エラー対策

1. サイトが作成されない場合


原因: New-Websiteで指定した名前やポートが既存の設定と競合している可能性があります。
対策: 競合を確認するため、以下のコマンドを使用します。

Get-Website
Get-WebBinding

不要なサイトやバインドを削除するには以下を使用します。

Remove-Website -Name "ConflictingSite"

2. SSL証明書が適用されない場合


原因: 証明書のThumbprintが誤っている、またはストアにインポートされていない。
対策: 正しいThumbprintを確認し、再設定します。

Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Subject -match "CN=mynewsite.local" }

3. サイトが起動しない場合


原因: アプリケーションプールが停止している可能性があります。
対策: 以下のコマンドでアプリケーションプールを確認および再起動します。

Get-WebAppPoolState -Name "MyNewSiteAppPool"
Start-WebAppPool -Name "MyNewSiteAppPool"

次のステップ


これまでに学んだスクリプトの基本的な利用方法と応用例、エラー発生時の対処方法を活用することで、IISサイトの管理をさらに効率化できます。次のセクションでは、本記事のまとめを行います。

まとめ


本記事では、PowerShellを利用してIISサイトを新規作成し、SSL証明書を適用してHTTPS通信を有効にする方法を解説しました。具体的には以下の内容を取り上げました:

  • IIS管理モジュールの準備とPowerShell環境設定
  • 新規サイトの作成とフォルダ構成の準備
  • バインドとポートの設定、HTTPSの有効化
  • SSL証明書の取得とインポート方法(Let’s Encryptおよび既存証明書の利用)
  • 応用スクリプト例とエラー対策

PowerShellを活用することで、IIS管理をスクリプト化し、運用の効率化と正確性を向上させることが可能です。また、複数のサイト管理や証明書の定期更新といった応用的なタスクも簡単に実現できます。

この記事を参考に、IIS管理を自動化し、システム運用の負担を大幅に軽減してください。PowerShellのスクリプトを繰り返し実行可能なテンプレートとして活用することで、管理の生産性が向上するでしょう。

コメント

コメントする

目次