1

我编写了一个 powershell 脚本来使用“webadministration”管理单元更新 apppool 的用户名和密码。

Import-Or-Snapin -Module "Webadministration"

Function Change-AppPoolIdentity {

        Param ( 
            $AppPool,
            $OldUserName,
            $NewUserName,
            $Password
       )

    If (Test-Path $AppPool)

    {
        LogWrite "Function :Change-AppPoolIdentity"
        $MyAppPool = Get-Item $AppPool

        If ($($MyAppPool.processModel.userName) -eq $OldUserName) {

            $MyAppPool.Stop()
            LogWrite "Trying to change App pool user name and password"
            $MyAppPool | Set-ItemProperty  -Name "processModel.username" -Value $NewUserName
            $MyAppPool | Set-ItemProperty  -Name "processModel.password" -Value $Password

            $MyAppPool.Start()
        }
        Else {
            LogWrite "Apppool $AppPool does not run using $OldUserName"
        }
    }
     Else {

        LogWrite "Apppool $AppPool not available "
    }


}

执行脚本后,我试图访问它没有显示的站点。当我们手动设置密码时,它起作用了。我们怀疑密码没有正确更新。

如何确保应用程序池密码已更改?在 Set-item 之后,是否可以添加一个条件来验证?

4

1 回答 1

1

我对 IIS PowerShell 提供程序比较陌生,但我相信您可能需要调用set-item才能将配置更改保存到应用程序池。

进行测试,获取应用程序池项,打印出processModel密码值查看原始值(看到这个我很惊讶),然后更新它,然后一定要调用set-item来更新IIS。

例如

$pool = IIS:\apppools\myapppool

$pool.processModel.password
$pool.processModel.password = $new_password

# doens't take effect until this
#
$pool | set-item

# should show updated value
#
$pool.processModel.password
于 2012-08-17T20:49:09.927 回答