2009-10-28 16 views
4

Utilisation de Powershell 1.0 sous Windows Server 2003 avec IIS 6.Comment puis-je modifier l'adresse IP de tous les sites dans IIS6 en utilisant powershell 1.0?

J'ai environ 200 sites pour lesquels je voudrais changer l'adresse IP (comme indiqué dans les propriétés du site Web dans l'onglet "site Web" du "site Web") . « section "identification champ d'adresse IP"

Je trouve ce code:

$site = [adsi]"IIS://localhost/w3svc/$siteid" 
$site.ServerBindings.Insert($site.ServerBindings.Count, ":80:$hostheader") 
$site.SetInfo() 

Comment puis-je faire quelque chose comme ça, mais:

  1. Lo op à travers tous les sites dans IIS
  2. Non insérer une valeur d'en-tête d'hôte, mais modifier un existant.

Répondre

10

Le script PowerShell suivant devrait aider:

$oldIp = "172.16.3.214" 
$newIp = "172.16.3.215" 

# Get all objects at IIS://Localhost/W3SVC 
$iisObjects = new-object ` 
    System.DirectoryServices.DirectoryEntry("IIS://Localhost/W3SVC") 

foreach($site in $iisObjects.psbase.Children) 
{ 
    # Is object a website? 
    if($site.psbase.SchemaClassName -eq "IIsWebServer") 
    { 
     $siteID = $site.psbase.Name 

     # Grab bindings and cast to array 
     $bindings = [array]$site.psbase.Properties["ServerBindings"].Value 

     $hasChanged = $false 
     $c = 0 

     foreach($binding in $bindings) 
     { 
      # Only change if IP address is one we're interested in 
      if($binding.IndexOf($oldIp) -gt -1) 
      { 
       $newBinding = $binding.Replace($oldIp, $newIp) 
       Write-Output "$siteID: $binding -> $newBinding" 

       $bindings[$c] = $newBinding 
       $hasChanged = $true 
      } 
      $c++ 
     } 

     if($hasChanged) 
     { 
      # Only update if something changed 
      $site.psbase.Properties["ServerBindings"].Value = $bindings 

      # Comment out this line to simulate updates. 
      $site.psbase.CommitChanges() 

      Write-Output "Committed change for $siteID" 
      Write-Output "=========================" 
     } 
    } 
} 
+0

Lorsque vous exécutez ce que j'obtenir les invite suivante ... CmdLet nouveau-objet à la position de conduite de commande 1. Valeurs d'approvisionnement pour les paramètres suivants: TypeName: – User

+0

Oublié que PS utilise un backtick pour indiquer la continuation de la ligne – Kev

+0

awesome qui a fonctionné! – User