12

多数の Web サイトと仮想ディレクトリを作成および構成するために、powershell スクリプトを作成しています。.NET Microsoft.Web.Administration アセンブリを使用しています。デフォルトの Web サイトの下に新しいアプリケーションを作成し、それに新しい仮想ディレクトリを追加しましたが、すべて正常に動作します。私が今やろうとしているのは、仮想ディレクトリの認証オプションを設定することです。私はpowershellで次のことをしています:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")

$oIIS = new-object Microsoft.Web.Administration.ServerManager
$oWebSite = $oIIS.Sites["Default Web Site"]
$oApp = $oWebSite.Applications["/MyApp"]

$oConfig = $oApp.GetWebConfiguration()

$oAnonAuth = $oConfig.GetSection("system.webServer/security/authentication/anonymousAuthentication")
$oAnonAuth.SetAttributeValue("enabled", "False")

ただし、SetAttributeValue コマンドを実行すると、次のエラーが表示されます。

「この構成セクションは、このパスでは使用できません。これは、セクションが親レベルでロックされている場合に発生します。ロックは、デフォルト (overrideModeDefault="Deny") で行われるか、overrideMode="Deny" の場所タグによって明示的に設定されます。従来の allowOverride="false"

私が他の場所で読んだことから、アプリケーションの XML ファイルを変更してオーバーライドできるようにするための提案がいくつかあります。私はそれをする必要はありません - プログラムで構成のロックを解除して変更できるようにする方法はありますか? このプロセスへのユーザー入力はまったく必要ありません..

助けてくれてありがとう、アル。


私が探していた答えを見つけました - しかし、新しいユーザーであるため、24時間自分の質問に答えることができません..

このサイトで以下のコードを見つけたと思いますが、マシンが再起動したため、ページを失いました。ただし、次のように動作するようです。

#
# Allow overriding of the security settings.
#
$oGlobalConfig = $oIIS.GetApplicationHostConfiguration()
$oConfig = $oGlobalConfig.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Default Web Site/mySite")
$oConfig.OverrideMode="Allow"
$oIIS.CommitChanges()

#
# Following the commit above, we need a new instance of the configuration object, which we can now 
# modify.
#
$oGlobalConfig = $oIIS.GetApplicationHostConfiguration()
$oConfig = $oGlobalConfig.GetSection("system.webServer/security/authentication/anonymousAuthentication", "Default Web Site/mySite")
$oConfig.SetAttributeValue("enabled", "False")
$oIIS.CommitChanges()
4

1 に答える 1

8

これについてはかなり前にブログ記事を書きました。http://www.danielrichnak.com/powershell-iis7-teach-yoursel/

以下のコードは、system.webserver レベルのすべてをループしてロックを解除します。必要に応じて、さまざまなノードをターゲットにすることができます。

$assembly = [System.Reflection.Assembly]::LoadFrom("$env:systemroot\system32\inetsrv\Microsoft.Web.Administration.dll")

# helper function to unlock sectiongroups
function unlockSectionGroup($group)
{
    foreach ($subGroup in $group.SectionGroups)
    {
        unlockSectionGroup($subGroup)
    }
    foreach ($section in $group.Sections)
    {
        $section.OverrideModeDefault = "Allow"
    }
}

# initial work
# load ServerManager
$mgr = new-object Microsoft.Web.Administration.ServerManager
# load appHost config
$conf = $mgr.GetApplicationHostConfiguration()

# unlock all sections in system.webServer
unlockSectionGroup(
     $conf.RootSectionGroup.SectionGroups["system.webServer"])

あなたのソリューションは似ていますが、あなたが持っているものを確認できないほど異なりますが、あなたがそれが機能すると言っているので、いいですね。:)

于 2011-04-19T17:49:34.583 に答える