Help us understand the problem. What is going on with this article?

IISのサイト作成とWebDeployのアクセス許可の自動化

More than 1 year has passed since last update.

IISは設定をGUIでポチポチ設定できるのは難易度低くて利点ですが、同じ設定を繰り返し行う需要が出てくると面倒臭いです。こんな誰がやっても同じ作業で徒労感は辛いし無用にミスが生まれるし…。

そこでIISの設定を操作できるappcmdを利用し、PowerShellで一発で設定できるようにしましょう。
今回はサイト作成とWebDeployのアクセス許可を一括で行います。

手動での設定はこちらの記事がわかりやすいです。この記事にある「Web 配置による発行の有効化」がアクセス許可の設定で、許可対象のサイトの作成とこれを自動で行うのがこの記事の主旨です。

前提条件

実際に試した環境はIISのバージョンは8。WebDeployはv3.5。
上記の記事と同じくwebdeployという名前の専用ユーザをIIS マネージャー ユーザーから作成しており、これを使用してWebDeployを行います。

基本戦略

  • IISサイトの作成
    • アプリケーションプールを作成
    • サイトを作成
  • webdeployユーザのアクセス許可
    • IISサイトのユーザ許可
    • サイトの物理パスへのフルコントロール付与

コード

# 設定
$sites = @(
    ("site1", "C:\site\site1"),
    ("site2", "C:\site\site2"),
    ("site3", "C:\site\site3")
)
$username = "webdeploy"
foreach($site in $sites) {
    $sitename = "$($site[0]).example.jp"
    $bind = "http://$($site[0]).example.jp:80"
    $dir = $site[1]

    # 物理パスのフォルダ作成
    New-Item $dir -itemType Directory -Force

    # サイト作成
    & "C:\Windows\System32\inetsrv\appcmd.exe" add apppool /name:"$sitename"
    & "C:\Windows\System32\inetsrv\appcmd.exe" add site /name:"$sitename" /bindings:"$bind" /physicalPath:"$dir"
    & "C:\Windows\System32\inetsrv\appcmd.exe" set app "$sitename/" /applicationPool:"$sitename"

    # IISサイトのユーザ許可
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Management")
    [Microsoft.Web.Management.Server.ManagementAuthorization]::Grant($username, $sitename, $FALSE)

    # 物理パスのフォルダのアクセス許可
    $Acl = Get-Acl $dir
    $Ar = New-Object System.Security.AccessControl.FileSystemAccessRule @("LOCAL SERVICE", "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $Acl.AddAccessRule($Ar)
    Set-ACL $dir -AclObject $Acl
}

細かい点

  • add siteだけだとアプリケーションプールがデフォルトになる
    • 一応「サイトの追加」と動作を揃えるためにアプリケーションプールを別作成
  • 「Web 配置による発行の有効化」は以下の二つをやっているのでそれを再現
    • IISサイトのwebdeployユーザのアクセス許可
    • 物理パスのフォルダのアクセス許可(フルコントロール)
  • 物理パスは/(スラッシュ)で区切るとアクセスできない

参考

https://heavymetaldev.com/iis-web-deploy-permissions
こちらのコードをコピーして動かなかったのでそこを書き直してます。

kik4
Webエンジニア
https://kik4.work
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした