Wie kann ich die IIS-Standarddokumentreihenfolge mithilfe von Powershell ändern?

Wie kann ich die IIS-Standarddokumentreihenfolge mithilfe von Powershell ändern?

Wie kann ich sicherstellen, dassStandardmäßig.aspxist das erste Standarddokument für meine IIS-Website?

Ich habe versucht:

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

aber fallsStandardmäßig.aspxist bereits in der Liste, es beschwert sich

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

Wie kann ich es bei Bedarf hinzufügen und an den Anfang der Liste verschieben, wenn es dort noch nicht steht?

Antwort1

Der Trick besteht darin, „default.aspx“ zu entfernen, wenn es sich bereits irgendwo in der Liste befindet:

$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}

Wir prüfen zunächst, ob default.aspx vorhanden ist. Wenn es gefunden wird, entfernen wir es und fügen es dann oben wieder hinzu, so wie Sie es bereits getan haben.

Antwort2

Für diejenigen, die es vielleicht nützlich finden: Ich wollte IIS so konfigurieren, dass dies default.aspxdas erste Standarddokument für den Webserver ist. Hier ist das Skript, falls Sie das tun möchten:

#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
}

Das Skript prüft, ob default.aspxals Standarddokument festgelegt ist. Wenn default.aspxes ein Standarddokument ist, prüft es, ob es an erster Stelle in der Liste steht. Wenn default.aspxes in der Liste, aber nicht an erster Stelle steht, entfernt das Skript es. Wenn default.aspxes nicht als Standarddokument festgelegt ist oder nicht an erster Stelle in der Liste steht, fügt das Skript es als erstes in der Liste hinzu.

Das obige Skript entspricht in der IIS-GUI-Konfiguration dem Klicken auf den Serverknoten, einem Doppelklick Default Documentim rechten Bereich und dem Verschieben default.aspxzur ersten Position (oder dem Hinzufügen an der ersten Position, wenn es nicht in der Liste enthalten ist).

verwandte Informationen