gpt4 book ai didi

powershell - 如何使用 Powershell 在 IIS 中设置 "ConnectAs"用户

转载 作者:行者123 更新时间:2023-12-04 18:41:24 25 4
gpt4 key购买 nike

我在为 IIS 中的嵌套 Web 应用程序编写“ConnectAs”域用户帐户脚本时遇到问题。我的目标环境是带有 IIS 8 的 MS Server 2012 R2,但是,我在带有 IIS 7.5 的 Windows 7 上看到了同样的问题。

例如,假设我有“默认网站”。在此之下,我有“MainApplication”。在此之下,我有另一个用于“SubApplication”的 Web 应用程序。

我已经尝试了在其他类似于下面的网站上找到的建议,并取得了部分成功:
这前 2 条语句有效。

Set-WebConfigurationProperty "system.applicationHost/sites/site[@name='Default Web Site']/application[@path='/MainApplication']/virtualDirectory[@path='/']" -name "username" -value "mydomain\user" 
Set-WebConfigurationProperty "system.applicationHost/sites/site[@name='Default Web Site']/application[@path='/MainApplication']/virtualDirectory[@path='/']" -name "password" -value "mypassword"

我似乎无法为接下来的两个语句找到正确的语法:
Set-WebConfigurationProperty "system.applicationHost/sites/site[@name='Default Web Site']/application[@path='/MainApplication/SubApplication']/virtualDirectory[@path='/']" -name "username" -value "mydomain\user" 
Set-WebConfigurationProperty "system.applicationHost/sites/site[@name='Default Web Site']/application[@path='/MainApplication/SubApplication']/virtualDirectory[@path='/']" -name "password" -value "mypassword"

在一个完美的世界中,我将能够执行类似于下面的操作,以快速使所有 Web 应用程序在同一个域用户帐户下运行:
Get-WebApplication | ForEach-Object { $_ | Set-ItemProperty -Name "username" -Value "domain\user" }
Get-WebApplication | ForEach-Object { $_ | Set-ItemProperty -Name "password" -Value "passwordValue" }

或类似的东西:
Get-WebApplication | ForEach-Object { $_.ChildElements | Select-Object -First 1 | Get-Member -Name "Attributes" | Set-Member -Name "userName" -Value "domain\username" }

是否有一种好方法可以将所有站点、应用程序等脚本设置为在域用户帐户下运行?

最佳答案

我最终使用的解决方案是利用 xpaths 来获取每个站点、应用程序和虚拟目录的完整路径。我发现每种类型都需要独立迭代。下面是我最终创建的用于解决问题的函数。

function Set-IIS-ConnectAsUser($username, $password)
{
$dir = Get-Location

cd IIS:\Sites

# update all the web sites to run under the context of the specified user
$webSites = Get-Website
ForEach($webSite in $webSites)
{
$siteName = ($webSite | Select -Property "Name").name
$fullPath = "system.applicationHost/sites/site[@name='$siteName']/application[@path='/']/virtualDirectory[@path='/']"
Set-WebConfigurationProperty $fullPath -Name "username" -Value $username
Set-WebConfigurationProperty $fullPath -Name "password" -Value $password
}

# update all the web applications to run under the context of the specified user
$apps = Get-WebApplication
ForEach($app in $apps)
{
$xpath = ($app | Select -Property "ItemXPath").ItemXPath
$fullPath = "$xpath/virtualDirectory[@path='/']"
$fullPath = $fullPath.Substring(1)
Set-WebConfigurationProperty $fullPath -Name "username" -Value $username
Set-WebConfigurationProperty $fullPath -Name "password" -Value $password
}

# update all the virtual directories to run under the context of the specified user
$virtualDirs = Get-WebVirtualDirectory
ForEach($vdir in $virtualDirs)
{
$xpath = ($vdir | Select -Property "ItemXPath").ItemXPath
$fullPath = $xpath.Substring(1)
Set-WebConfigurationProperty $fullPath -Name "username" -Value $username
Set-WebConfigurationProperty $fullPath -Name "password" -Value $password
}


cd $dir
}

关于powershell - 如何使用 Powershell 在 IIS 中设置 "ConnectAs"用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25215354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com