Powershell for IIS:“ Foreach”循环失败

时间:2019-01-09 03:50:06

标签: powershell iis-8 powershell-v4.0

我需要创建一个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”循环,但是我不知道如何解决该循环以获取我的所需的输出。任何想法如何解决这一问题?

2 个答案:

答案 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)"

}

…变量仅使用双引号进行扩展。