如何使用PowerShell在IIS 8.5中创建一个具有特定用户的应用程序池?

3
下面的简化代码可行,但最终使用的是应用程序池身份而不是我在数组中指定的特定身份。
声明:
#App pool array positions
$Name = 0
$User = 1
$Pwdx = 2

#Application array positions
$SiteNm = 0
$PhyPath = 1
$PoolNm = 2

#App Pool Settings
$Port="80"
$HostName="*"
$Environment="local"
$Runtime="v4.0"
$Pipeline="0" #Integrated
$Identity="3" #SpecificUser

#Define the App Pools
$Pools = @(3)*2
$Pools[0] = "SomeAppPool","FooBar\SomeUser","S0meUs3rP4ssw0RD"
$Pools[1] = "AnotherAppPool","FooBar\AnotherUser","An0th3rUs3rP4ssw0RD"

执行代码:

Import-Module WebAdministration

#navigate to the app pools root
cd IIS:\AppPools\   

foreach($p in $Pools)
{ 
    $AppPoolName = $p[$Name]
    $AppPoolUser = $p[$User]
    $AppPoolPwd = $p[$Pwdx]

    $appPool = New-Item $AppPoolName
    $appPool | Set-ItemProperty -Name managedRuntimeVersion -Value $Runtime
    $appPool | Set-ItemProperty -Name managedPipelineMode -Value $Pipeline
    $appPool | Set-ItemProperty -Name processModel.identityType -Value $Identity
    $appPool | Set-ItemProperty -Name processModel.username -Value $AppPoolUser
    $appPool | Set-ItemProperty -Name processModel.password -Value $AppPoolPwd

    Write-Host "$AppPoolName Application Pool Created..."
}
1个回答

5

不要使用 "Set-ItemProperty",直接访问和设置 AppPool 属性:

$appPool = New-Item $AppPoolName
$appPool.managedRuntimeVersion = $Runtime
$appPool.managedPipelineMode = $Pipeline
$appPool.processModel.identityType = $Identity
$appPool.processModel.username = $AppPoolUser
$appPool.processModel.password = $AppPoolPwd
$appPool | Set-Item
$appPool.Stop()
$appPool.Start()

编辑:进行了一些测试,发现您的代码完全正常,只是它没有设置用户名。为什么?

实际参数是“processModel.userName”(注意大写字母“N”)。因此,看起来像:

$appPool | Set-ItemProperty -Name processModel.userName -Value $AppPoolUser

大小写敏感,但是

$appPool.processModel.username = $AppPoolUser

不是的。一定要喜欢PowerShell。


谢谢你找到了那个问题!我采用了你直接访问和设置的版本。简单多了。 - Code Maverick
我还注意到$Identity应该是数字值-而不是字符串:$ IdentityType = 3。 - viperguynaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接