PowerShell: Load WebAdministration in ps1 script on both IIS 7 and IIS 7.5
This is probably a bit late to help you, but here is how we do this:
$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; } }}
Is it possible to catch the error from one or the other, and do the opposite. Dont have my shell handy but something like:
$succeeded = import-module WebAdministrationif (($succeeded -ne $null) -and ($succeeded.GetType() -eq [System.Exception]) { #Could not import, trying to snapin add-pssnapin WebAdministration}
Actually thinking about this a bit more...
$hasSnapin = get-pssnapin | Select { $_.Name.toLower().Trim() = "webadministration" }if ($hasSnapin -ne $null) { add-pssnapin WebAdministration} else { import-module WebAdministration}
On the first one, I know the error type check will probably need to be modified. As far as the work going on, this can actually be done in C# by looking in the registry for loaded snapins, or the IIS version installed on the machine and then use the appropriate method.
This is great. All I had to do was add an else so it would add the snap-in when run on Windows 2008. This works in scripts for my situation.
Function Load-WebAdmin { $webAdminModule = get-module -ListAvailable | ? { $_.Name -eq "webadministration" } If ($webAdminModule -ne $null) { import-module WebAdministration }else{ Add-pssnapin WebAdministration }}