PowerShell: chargez WebAdministration en script ps1 sur IIS 7 et IIS 7.5

J'ai un script PowerShell qui configure les paramètres du site web et de l'application web dans IIS. Donc j'utilise les cmdlets dans le snap de WebAdministration. Mais ce script doit fonctionner sous Windows 2008, Windows 7 et Windows 2008 R2. Et j'en ai besoin pour fonctionner avec un minimum de tracas de l'utilisateur.

le problème est que Windows 7 et Windows 2008 R2 utilisent IIS 7.5 qui vient avec L'administration Web installé comme un module. Sur Windows 2008 nous avons installé le fournisseur IIS 7 PowerShell qui installe WebAdministration comme un composant logiciel enfichable.

donc y compris importer-module WebAdministration dans le script explose sur IIS 7 mais fonctionne très bien sur IIS 7.5 et y compris add-pssnapin WebAdministration explose sur IIS 7.5 mais fonctionne très bien sur IIS 7.

donc notre solution est de faire charger l'administration Web par les administrateurs manuellement avec la commande appropriée pour l'environnement avant d'exécuter le script. Mais ce n'est pas optimal car il est facile à oubliez quelle commande fonctionne dans quel environnement. Nous pourrions créer deux scripts différents, mais cela crée un problème de maintenance pour le développement.

quelqu'un A résolu ce problème? Est-ce que quelqu'un sait comment vérifier l'environnement et ensuite appeler le cmdlet approprié à partir du script PS?

--- RÉPONSE (pour mon cas) ----

la solution est une combinaison de code et de console préconfigurée. Le fournisseur IIS 7 PoSH inclut un raccourci de bureau qui lance une console chic avec WebAdministration chargée. Cela combiné avec la fonction suivante rend mon script exécuter comme un charme sur les trois systèmes.

Function Load-WebAdmin {
  $webAdminModule = get-module -ListAvailable 
                                        | ? { $_.Name -eq "webadministration" }
  If ($webAdminModule -ne $null) {
    import-module WebAdministration
  }
}
23
demandé sur SteveC 2009-12-17 23:03:37

6 réponses

Est-il possible d'intercepter l'erreur de l'un ou de l'autre, et faire le contraire. N'ont pas de ma coquille pratique, mais quelque chose comme:

$succeeded = import-module WebAdministration
if (($succeeded -ne $null) -and ($succeeded.GetType() -eq [System.Exception]) {
  #Could not import, trying to snapin
  add-pssnapin WebAdministration
}

en fait, j'y pense un peu plus...

$hasSnapin = get-pssnapin | Select { $_.Name.toLower().Trim() = "webadministration" }
if ($hasSnapin -ne $null) {
  add-pssnapin WebAdministration
} else {
  import-module WebAdministration
}

sur le premier, je sais que la vérification de type d'erreur devra probablement être modifiée. En ce qui concerne le travail en cours, cela peut être fait en C# en regardant dans le Registre pour les snapins chargés, ou la version IIS installée sur la machine et puis utiliser le méthode.

11
répondu GrayWizardx 2009-12-17 20:20:27

C'est probablement un peu en retard pour vous aider, mais voici comment faire:

$iisVersion = Get-ItemProperty "HKLM:\software\microsoft\InetStp";
if ($iisVersion.MajorVersion -eq 7)
{
    if ($iisVersion.MinorVersion -ge 5)
    {
        Import-Module WebAdministration;
    }           
    else
    {
        if (-not (Get-PSSnapIn | Where {$_.Name -eq "WebAdministration";})) {
            Add-PSSnapIn WebAdministration;
        }
    }
}
32
répondu GlennS 2010-12-01 15:32:28

C'est super. Tout ce que j'avais à faire était d'ajouter un autre pour qu'il ajoute le snap-in lors de L'exécution sur Windows 2008. Cela fonctionne dans des scripts pour ma situation.

Function Load-WebAdmin {
  $webAdminModule = get-module -ListAvailable | ? { $_.Name -eq "webadministration" }
  If ($webAdminModule -ne $null) {
    import-module WebAdministration
  }else{
    Add-pssnapin WebAdministration
   }
}
3
répondu rayrayrayraydog 2012-11-27 06:31:05

une Autre manière, en utilisant la version de Windows:

if ([System.Version](Get-ItemProperty -path "HKLM:\Software\Microsoft\Windows NT\CurrentVersion").CurrentVersion -ge [System.Version] "6.1")
{ Import-Module WebAdministration }
else
{ Add-PSSnapin WebAdministration }
2
répondu Matt D 2011-11-07 14:02:39

j'ai rencontré ce problème aujourd'hui et voici la solution que j'ai utilisée

Add-PSSnapin WebAdministration-ErrorAction SilentlyContinue

Import-Module WebAdministration-ErrorAction SilentlyContinue

la seule situation dans laquelle cela ne fonctionne pas, c'est si le snapin de la coque de puissance de l'iis n'est pas installé du tout.

2
répondu Keith Lawrence 2012-11-02 16:26:09

si vous voulez créer des sessions PowerShell "préconfigurées", regardez dans les fichiers de console PowerShell par exemple:

man Export-Console -full

Vous pouvez en créer un pour Win7 et Server 2008 R2 et un autre pour Server08.

0
répondu Keith Hill 2009-12-18 00:43:07