6

我正在为我们的 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

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

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

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

问候

4

2 回答 2

2

您尝试更改的部分在 IIS 机器配置中设置。您必须解锁这些部分才能在每个站点上设置它们。

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

于 2014-10-29T21:35:25.157 回答
0

您的过滤器看起来不正确。您可以将过滤器视为基本的 XPath 查询。因此,如果您使用//authentication/*then 的过滤器,它将在身份验证节点下获得所有配置。它与 XPath 并不完全相同,但非常接近。请记住,您不能仅使用 Filter 参数来选择元数据部分sectionGrouplocation标签。

我遇到了一个问题,我需要在服务器级别解锁 Windows 身份验证,这样我就可以在应用程序级别将 Windows 身份验证设置为不同的值。所以我不得不做这样的事情:

Set-WebConfiguration -Metadata OverrideMode -Value Allow -Filter //windowsAuthentication
Set-WebConfigurationProperty -PSPath IIS:\Sites\$WebsiteName\$AppName -Filter //windowsAuthentication -Name Enabled -Value $true

这样做是在 applicationHost.config 文件中创建一个如下所示的部分:

<location path="" overrideMode="Allow">
        <system.webServer>
            <security>
                <authentication>
                    <windowsAuthentication>
                    </windowsAuthentication>
                </authentication>
            </security>
        </system.webServer>
</location>

我相信,根据 IIS,您使用该位置标签放置的任何配置都将被视为未锁定。

这就是添加到 Web 应用程序本身的 Web.config 文件中的内容:

<authentication>
    <windowsAuthentication enabled="true" />
</authentication>

希望这会有所帮助。

于 2017-09-27T21:03:41.277 回答