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
}
}
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.
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;
}
}
}
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
}
}
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 }
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.
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.