2014-08-09 2 views
4

У меня возникли проблемы с написанием учетной записи пользователя домена ConnectAs для вложенных веб-приложений в IIS. Моей целевой средой является MS Server 2012 R2 с IIS 8, однако я вижу те же проблемы в Windows 7 с IIS 7.5.Как установить пользователя «ConnectAs» в IIS с помощью Powershell

Например, предположим, что у меня есть «Веб-сайт по умолчанию». При этом у меня есть «MainApplication». В соответствии с этим у меня есть еще одно веб-приложение для «SubApplication».

Я пробовал предложения, найденные на других сайтах, аналогичных ниже с частичным успехом: Эти первые 2 заявления работают.

Set-WebConfigurationProperty "system.applicationHost/sites/site[@name='Default Web Site']/application[@path='/MainApplication']/virtualDirectory[@path='/']" -name "username" -value "mydomain\user" 
Set-WebConfigurationProperty "system.applicationHost/sites/site[@name='Default Web Site']/application[@path='/MainApplication']/virtualDirectory[@path='/']" -name "password" -value "mypassword" 

Я не могу показаться, чтобы получить правильный синтаксис для следующих двух утверждений:

Set-WebConfigurationProperty "system.applicationHost/sites/site[@name='Default Web Site']/application[@path='/MainApplication/SubApplication']/virtualDirectory[@path='/']" -name "username" -value "mydomain\user" 
Set-WebConfigurationProperty "system.applicationHost/sites/site[@name='Default Web Site']/application[@path='/MainApplication/SubApplication']/virtualDirectory[@path='/']" -name "password" -value "mypassword" 

В идеальном мире, я смог бы сделать что-то подобное ниже, чтобы быстро сделать все веб-приложения работают под управлением одной и той же учетной записи пользователя домена:

Get-WebApplication | ForEach-Object { $_ | Set-ItemProperty -Name "username" -Value "domain\user" } 
Get-WebApplication | ForEach-Object { $_ | Set-ItemProperty -Name "password" -Value "passwordValue" } 

или что-то вроде этого:

Get-WebApplication | ForEach-Object { $_.ChildElements | Select-Object -First 1 | Get-Member -Name "Attributes" | Set-Member -Name "userName" -Value "domain\username" } 

Есть ли хороший способ сценария установить все сайты, приложения и т. Д. Для запуска под учетной записью пользователя домена?

ответ

6

Решение, которое я в конечном итоге использовала было использовать XPaths, чтобы получить полный путь для каждого сайта, приложения, & виртуального каталога. Я обнаружил, что каждый тип необходимо повторять независимо. Ниже приведена функция, которую я создал для решения проблемы.

function Set-IIS-ConnectAsUser($username, $password) 
{ 
    $dir = Get-Location 

    cd IIS:\Sites 

    # update all the web sites to run under the context of the specified user 
    $webSites = Get-Website 
    ForEach($webSite in $webSites) 
    { 
     $siteName = ($webSite | Select -Property "Name").name 
     $fullPath = "system.applicationHost/sites/site[@name='$siteName']/application[@path='/']/virtualDirectory[@path='/']" 
     Set-WebConfigurationProperty $fullPath -Name "username" -Value $username 
     Set-WebConfigurationProperty $fullPath -Name "password" -Value $password 
    } 

    # update all the web applications to run under the context of the specified user 
    $apps = Get-WebApplication 
    ForEach($app in $apps) 
    { 
     $xpath = ($app | Select -Property "ItemXPath").ItemXPath 
     $fullPath = "$xpath/virtualDirectory[@path='/']" 
     $fullPath = $fullPath.Substring(1) 
     Set-WebConfigurationProperty $fullPath -Name "username" -Value $username 
     Set-WebConfigurationProperty $fullPath -Name "password" -Value $password 
    } 

    # update all the virtual directories to run under the context of the specified user 
    $virtualDirs = Get-WebVirtualDirectory 
    ForEach($vdir in $virtualDirs) 
    { 
     $xpath = ($vdir | Select -Property "ItemXPath").ItemXPath 
     $fullPath = $xpath.Substring(1) 
     Set-WebConfigurationProperty $fullPath -Name "username" -Value $username 
     Set-WebConfigurationProperty $fullPath -Name "password" -Value $password 
    } 


    cd $dir 
} 
+0

Спасибо, сэр! Если бы у меня была копейка за каждый раз, когда я менял пароль, я бы отдал все это вам, и вы станете миллионером. ;) –

0

Попробуйте это. Измените родительские и дочерние имена на свои.

Set-WebConfiguration "/system.applicationHost/sites/site[@name='Default Web Site']/application[@path='/parent/child']/virtualdirectory[@path='/']" -Value @{userName='andy';password='password'} 
Смежные вопросы