LoginSignup
3
2

More than 5 years have passed since last update.

PowerShellでIISのWebSite自動開始設定を変更する

Last updated at Posted at 2016-02-24

PowerShellでIISの操作をしていたらサイトの自動開始設定がちょっとめんどくさかった。
環境は Windows 7, PowerShell 4.0 です。

Web Administration モジュールだとうまくいかない......

Web Administration モジュールにあるコマンドレットを使えばIISの操作は何でもできるもんだと……そう思ってました。

とりあえずWebサイトのプロパティとメソッドを見てみると

PS > Get-Website -Name "Default Web Site" | Get-Member

   TypeName: Microsoft.IIs.PowerShell.Framework.ConfigurationElement#site

Name                       MemberType            Definition
----                       ----------            ----------
Start                      CodeMethod            void Start()
Stop                       CodeMethod            void Stop()
 ...
GetAttributeValue          Method                System.Object GetAttributeValue(string attributeName)
 ...
SetAttributeValue          Method                void SetAttributeValue(string attributeName, System.Object value)
 ...
serverAutoStart            NoteProperty          System.Boolean serverAutoStart=False
 ...

なんだか "serverAutoStart" とかいうそれっぽいのがいるけど "NoteProperty" なので直接設定するのはダメそう。
でも "SetAttributeValue" があるじゃん! と嬉しくなりやってみると怒られる。

PS > (Get-Website -Name "Default Web Site").SetAttributeValue("serverAutoStart", $True)
"2" 個の引数を指定して "SetAttributeValue" を呼び出し中に例外が発生しました: "構成オブジェクトは、ServerManager.CommitChanges() の呼び出しによってコミットされたため、読み取り専用になっています。書き込みアクセスが必要な場合は、ServerManager を使用して新しい参照を取得してください。"
発生場所 行:1 文字:1
+ (Get-Website -Name "Default Web Site").SetAttributeValue("serverAutoStart", $True)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : InvalidOperationException

"ServerManager" を使えとのことだ。

ServerManager で設定する

ServerManager はデフォルトでは使えないのでアセンブリをインポートする。

PS > [System.Reflection.Assembly]::LoadFrom("$env:systemroot\system32\inetsrv\Microsoft.Web.Administration.dll")
PS > $sm = New-Object Microsoft.Web.Administration.ServerManager
PS > $sm.Sites["Default Web Site"].ServerAutoStart = $True
PS > $sm.CommitChanges()

このとき注意しなくてはいけないのは、
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")
のように名前の部分一致でインポートすると IIS Express の ServerManager をインポートしてしまうことがあるので、上記のようにフルパスで指定してあげたほうが安全。
最後のCommitChanges()も忘れずに。

これでIISのサイトの自動開始設定をPowerShellで変更できました。
んー、なんかせっかく Web Administration モジュールあるのにコマンドレットでバシッと設定できないのだろうか……。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2