しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

IIS Express のサイト設定から存在しないものを一括で削除する

普段から Visual Studio と IIS Express を利用したアプリケーションの開発を行っていると、作成した分だけ IIS Express のサイト設定が一方的に追加されていきます。

例として、普段使っているマシンの applicationHost.config を紹介しておきます。

調べてみると、サイト数が 150 ほど登録されている状態でした。サイト数はかなり多いですが、大半がテスト用のプロジェクトで既にファイルも存在しないゴミ設定でした。

いい感じに削除したいので調べてみると、森島さんこと @statemachine のブログが引っ掛かりました。

なかなか良さそうですが、森島さんが紹介しているスクリプトだと、まだ使っているサイト設定まで問答無用で削除してしまうみたいでした。

使っているものを削除してしまうと次回の起動時にちょっと面倒なことになりそうなので、先に仮想ディレクトリの存在を確認して、存在しないものだけを削除するようにスクリプトを変更しました。

$appcmd = "C:\Program Files\IIS Express\appcmd.exe"

[xml]$result = Invoke-Command -Command {& $appcmd 'list' 'vdir' '/xml' }

for ($i = 0; $i -lt $result.appcmd.VDIR.Length; $i++)
{
    if (!(Test-Path $result.appcmd.VDIR[$i].physicalPath))
    {
        $sitename = $result.appcmd.VDIR[$i]."APP.NAME".TrimEnd('/')

        Invoke-Command -Command {& $appcmd 'delete' 'site' $sitename }
    }
}

PowerShell 力が低いのは自覚しているので勘弁してもらいたい感じです。

このスクリプトを実行すると、仮想ディレクトリに設定されているパスが存在しないものが削除されます。

削除を実行すると、applicationHost.config のサイズがそこそこ縮みました。

大昔には WebMatrix から削除するという方法もあったのですが、数が多くなるとスクリプトを少し書いたほうが圧倒的に楽が出来ていい感じです。