我正在为我们的 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"}
执行时,我在 PowerShell 中收到错误消息,指出“此配置部分不能在此路径上使用。当该部分锁定在父级别时会发生这种情况”。我尝试了在身份验证部分被锁定时起作用的 PSPath 和位置标记,但它们似乎没有任何效果。我想也许 -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
但继续收到锁定部分消息,直到过滤器退回到站点级别。
我还尝试设置 virtualDirectoryDefaults.userName 和 virtualDirectoryDefaults.password,最初似乎不需要,但在 IISReset 之后,我注意到它们确实被添加到 applicationHost.config 文件的底部。我真的不希望将它们设置为默认值,因为我们的应用程序不应影响服务器上的其他应用程序。
感谢您提供的任何帮助。我一定遗漏了一些东西,因为设置这些和其他 Web 应用程序配置值应该不难。
问候