Powershell для IIS: сбой цикла 'Foreach' - PullRequest
0 голосов
/ 09 января 2019

Мне нужно было создать PowerShell, который сначала создает 50 пулов приложений IIS и назначает каждому из них идентификатор пула приложений (имя пользователя и пароль). Следующая часть сценария - преобразование дочерних папок сайтов в приложения. В процессе конвертации я должен назначить каждому Приложению использовать определенный Пул приложений, который я создал выше. Вот мой сценарий, который частично работает.

Import-Module WebAdministration 

$AppPools = @ (“site1-app1”,”site1-app2”,”site1-app3”,”site1-app4”,”site1-app5”…”site1-app50”)
$AppPoolFolders = @ (“app1”,”app2”,”app3”,”app4”,”app5”…”app50”)

$username = ‘domain\Site1SvcAct’
$password = ‘Site1SvcActPassword’

########——Create App Pool and Set Username & Password——########


foreach ($App in $AppPools) {

New-WebAppPool $App
Set-ItemProperty IIS:\AppPools\$App managedPipelineMode 0
Set-ItemProperty IIS:\AppPools\$App managedRuntimeVersion v4.0
Set-ItemProperty IIS:\AppPools\$App -Name processmodel -value @{userName = $username;password=$password;identitytype=3}

########——Convert /folder to Application and set to use App Pool ——########

    foreach ($Folder in $AppPoolFolders) {

    ConvertTo-WebApplication -ApplicationPool $App -PSPath ‘IIS:\Sites\Site1\$Folder’

    }
}

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

app1 : site1-app1 
app2 : site1-app1
app3 : site1-app1
.
.
.
app50 : site1-app1

Где это должно выглядеть так:

app1 : site1-app1 
app2 : site1-app2
app3 : site1-app2
.
.
.
app50 : site1-app50

Таким образом, Папка 1 должна быть назначена Пулу приложений 1, а Папка 2 должна быть назначена Пулу приложений 2 и т. Д ... Я знаю, что это из-за моего вложенного цикла "foreach", но я не знаю, как исправить цикл, чтобы получить мой желаемый вывод. Любые идеи, как это исправить?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Эта строка ...

foreach ($ папка в $ AppPoolFolders) {

ConvertTo-WebApplication -ApplicationPool $ App -PSPath ‘IIS: \ Sites \ Site1 \ $ Folder’

}

… не правильно.

Вы используете одинарные кавычки и, следовательно, не используете расширение переменных.

Попробуйте эту линию таким образом ...

foreach ($Folder in $AppPoolFolders) {

ConvertTo-WebApplication -ApplicationPool $App -PSPath "IIS:\Sites\Site1\$($Folder)"

}

… Переменные расширяются только с помощью двойных кавычек.

0 голосов
/ 09 января 2019

Вы можете изменить свои вложенные циклы в один цикл for

Таким образом, вместо использования

foreach($app in $apppools){ foreach( $folder in $AppPoolsFolder){ } }

Вы можете использовать

for( $i = 0; $i -lt $appPools.Count; $i++){ $app = $appPools[$i] $Folder = $appPoolsFolder[$i] ...Rest of your code... }

...