【问题标题】:Powershell For IIS: 'Foreach' Loop FailingIIS 的 Powershell:“Foreach”循环失败
【发布时间】:2019-01-09 12:02:42
【问题描述】:

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

【问题讨论】:

    标签: powershell iis-8 powershell-4.0


    【解决方案1】:

    您可以将嵌套的 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... }

    【讨论】:

      【解决方案2】:

      这一行……​​

      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)"
      
      }
      

      ... 变量只能使用双引号进行扩展。

      【讨论】:

        猜你喜欢
        • 2018-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-11
        • 1970-01-01
        • 1970-01-01
        • 2019-09-19
        • 2015-09-27
        相关资源
        最近更新 更多