我需要创建一个PowerShell,该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”循环,但是我不知道如何解决该循环以获取我的所需的输出。任何想法如何解决这一问题?
答案 0 :(得分:0)
您可以将嵌套的for循环更改为单个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...
}
答案 1 :(得分:0)
此行...
foreach($ AppPoolFolders中的$ Folder){
ConvertTo-WebApplication -ApplicationPool $ App -PSPath‘IIS:\ Sites \ Site1 \ $ Folder’
}
...不正确。
您使用单引号,因此没有变量扩展。
以这种方式尝试这一行...
foreach ($Folder in $AppPoolFolders) {
ConvertTo-WebApplication -ApplicationPool $App -PSPath "IIS:\Sites\Site1\$($Folder)"
}
…变量仅使用双引号进行扩展。