我如何确定默认.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
到第一个位置(如果它不在列表中,则将其添加到第一个位置)。