PowerShell IIS Set-WebConfigurationProperty - 锁定 ApplicationHost.config 部分

Sco*_*ott 6 iis powershell configuration credentials locked

我正在为我们的 Web 应用程序和 Web 服务编写一个 PowerShell 3.0 安装程序,并且在尝试设置物理路径凭据时被绊倒了。

我的代码如下所示:

# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# >>>>>> Path credentials
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

# Set the physical path credentials of the web application (on Basic Settings screen) to Connect As...
$filter="/system.applicationHost/sites/site[@name='{0}' and    @id='1']/application[@path='/{1}']/VirtualDirectory[@path='/']" -f $script:WebSiteName,$appName
Set-WebConfiguration $filter -Value @{userName="$physicalPathCredentialUserID";password="$physicalPathCredentialPassword"} 
Run Code Online (Sandbox Code Playgroud)

执行时,我在 PowerShell 中收到一条错误消息,指出“无法在此路径上使用此配置部分。当该部分被锁定在父级别时会发生这种情况”。我尝试了在 Authentication 部分被锁定时工作的 PSPath 和 location 标签,但这些似乎没有任何效果。我想也许 -Force 选项会起作用,但是虽然没有抛出错误,但物理路径凭据似乎没有被采用。

如果没有 -Force 选项,则会抛出错误,但 PowerShell 会切断该消息,因此我无法确切知道它抱怨的是哪个部分,或者哪个父级别被锁定。我必须假设它是站点部分,因为我正在尝试配置:/configuration/system.applicationHost/sites/application/virtualDirectory

我对解锁和允许覆盖以使值保持不变之间的区别有点困惑。PowerShell WebAdministration 在这方面非常混乱。我不知道为什么将作为推论的值设置为可以在 IIS 管理 UI 中设置的值必须如此混乱。一些值使用带有丑陋字符串的 Set-WebConfiguration,如上所示,其他值使用 Set-WebConfigurationProperty。如果锁定是一个已知问题,为什么没有更好地记录解锁?

我不想解锁所有网站或所有应用程序。我只想解锁我必须要做的事情,以便在我在默认网站下安装的每个 Web 应用程序上设置配置值。

自 2014 年和 PowerShell 3.0 起,解锁或覆盖配置部分的最终解决方案是什么?哪些设置接受 PSPath 和位置?

顺便说一下,我尝试了以下变体:

$filter="/system.applicationHost/sites/site[@name='{0}' and    @id='1']/application[@path='/{1}']/VirtualDirectory[@path='/']" -f $script:WebSiteName,$appName
Set-WebConfiguration $filter machine/webroot/appHost -metadata overrideMode -value Allow
Run Code Online (Sandbox Code Playgroud)

但继续获得锁定部分消息,直到过滤器退回到站点级别。

我还尝试设置virtualDirectoryDe​​faults.userName 和virtualDirectoryDe​​faults.password,最初似乎没有采用,但是在IISReset 之后,我注意到它们确实被添加到applicationHost.config 文件的底部。我真的不希望它们设置为默认值,因为我们的应用程序不应该影响服务器上的其他应用程序。

感谢您提供的任何帮助。我一定遗漏了一些东西,因为设置这些和其他 Web 应用程序配置值应该不难。

问候

bri*_*ist 2

您尝试更改的部分是在 IIS 计算机配置中设置的。您必须解锁这些部分才能针对每个站点进行设置。

请参阅:以编程方式解锁 Powershell 中的 IIS 配置部分