如何使用 Powershell 更改 IIS 默认文档顺序?

如何使用 Powershell 更改 IIS 默认文档顺序?

我如何确定默认.aspx是我的 IIS 网站的第一个默认文档?

我努力了:

Add-WebConfiguration //defaultDocument/files "IIS:\sites\Default Web Site\MyWebSite" -atIndex 0 -Value @{value="Default.aspx"}

但如果默认.aspx已经在列表中了,它会抱怨

Add-WebConfiguration : Filename: 
Error: Cannot add duplicate collection entry of type 'add' with unique key attribute 'value' set to 'Default.aspx'

如果需要,我该如何添加它?如果它还不在列表顶部,我该如何将它移动到列表顶部?

答案1

诀窍是,如果“default.aspx”已存在于列表中,则将其删除:

$filter = "system.webserver/defaultdocument/files"
$site = "IIS:\sites\Default Web Site\MyWebSite"
$file = "default.aspx"

if ((Get-WebConfiguration $filter/* "$site" | where {$_.value -eq $file}).length -eq 1)
{
   Remove-WebconfigurationProperty $filter "$site" -name collection -AtElement @{value=$file}
}

Add-WebConfiguration $filter "$site" -atIndex 0 -Value @{value=$file}

我们首先检查 default.aspx 是否存在,如果找到,则将其删除,然后将其重新添加到顶部,就像您已经做的那样。

答案2

对于那些可能觉得它有用的人:我想配置 IIS,以便它default.aspx是 Web 服务器的第一个默认文档。如果您想要这样做,下面是脚本:

#requires -RunAsAdministrator

$file = "default.aspx"
$baseFilter = "/system.webServer/defaultDocument/files"

$filter = "{0}/add[@value='{1}']" -f $baseFilter,$file
$fileExists = $null -ne (Get-WebConfigurationProperty $filter -Name ".")
$updateConfig = -not $fileExists
if ( $fileExists ) {
  $firstValue = Get-WebConfiguration "$baseFilter/*" |
    Select-Object -ExpandProperty value -First 1
  $updateConfig = $firstValue -ne $file
  if ( $updateConfig ) {
    Clear-WebConfiguration $filter -Verbose
  }
}
if ( $updateConfig ) {
  Add-WebConfiguration $baseFilter -AtIndex 0 -Value @{value = $file} -Verbose
}

脚本检查是否default.aspx设置为默认文档。如果default.aspx是默认文档,则检查它是否是列表中的第一个。如果default.aspx在列表中但不是第一个,则脚本会将其删除。如果default.aspx未设置为默认文档或它不是列表中的第一个,则脚本会将其添加为列表中的第一个。

Default Document上述脚本是 IIS GUI 配置,相当于单击服务器节点,在右窗格中双击,然后移动default.aspx到第一个位置(如果它不在列表中,则将其添加到第一个位置)。

相关内容