2011-04-19 7 views
8

많은 웹 사이트 및 가상 디렉터리를 만들고 구성하기 위해 powershell 스크립트를 작성하고 있습니다. .NET Microsoft.Web.Administration 어셈블리를 사용하고 있습니다. 기본 웹 사이트에서 새 응용 프로그램을 만들고 새 가상 디렉터리를 추가하면 모든 응용 프로그램이 잘 작동합니다. 지금 내가하려는 것은 가상 디렉터리에 대한 인증 옵션을 설정하는 것입니다. 나는 PowerShell에서 다음을 수행 오전 :Powershell에서 프로그래밍 방식으로 IIS 구성 섹션 잠금 해제

"이 구성 섹션은이 경로에서 사용할 수 없습니다이 섹션은에 잠겨있을 때 발생합니다.

[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() 

답변

5

나는 꽤 오래 전에 블로그 게시물을 작성했습니다. 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"]) 

당신의 솔루션은 유사하지만 충분히 당신이 가진 것을 검증 할 수는 없지만, 당신이 말하는대로 작동한다고 - 좋은 생각입니다. :)

+1

감사합니다. 대니얼 - 나는 그것들이 대체로 같다고 생각합니다. 관심이있는 부분으로 바로 넘어갑니다. –

+2

나는 대답을 편집하고'$ mgr.CommitChanges ()'변경 사항이 실제로 적용되도록 - 코드는 호출 없이는 아무 것도 유지하지 않습니다. – Oliver