programing

PowerShell: IIS 7 및 IIS 7.5 모두에서 ps1 스크립트로 Web Administration 로드

newstyles 2023. 10. 16. 21:38

PowerShell: IIS 7 및 IIS 7.5 모두에서 ps1 스크립트로 Web Administration 로드

IIS에서 웹 사이트 및 웹 응용 프로그램 설정을 구성하는 PowerShell 스크립트가 있습니다.그래서 웹 관리 스냅인에 cmdlet을 사용합니다.그러나 이 스크립트는 Windows 2008, Windows 7 및 Windows 2008 R2에서 실행되어야 합니다.그리고 사용자의 소란을 최소화하고 실행하기 위해 필요합니다.

문제는 Windows 7(윈도우 7)과 Windows 2008 R2(윈도우 2008 R2)가 Web Administration(웹 관리)이 모듈로 설치된 IIS 7.5를 사용한다는 것입니다.Windows 2008에서는 Web Administration을 스냅인으로 설치하는 IIS 7 PowerShell 프로바이더를 설치했습니다.

따라서 스크립트에 Import-module WebAdministration을 포함하면 IIS 7에서는 잘 작동하지만 IIS 7.5에서는 잘 작동하고 WebAdministration의 add-pssnap을 포함하면 IIS 7.5에서는 잘 작동하지만 IIS 7에서는 잘 작동합니다.

따라서 스크립트를 실행하기 전에 환경에 맞는 적절한 명령을 사용하여 관리자가 수동으로 Web Administration을 로드하도록 하는 것이 해결책입니다.그러나 어떤 명령어가 어떤 환경에서 작동하는지 잊어버리기 쉽기 때문에 이 방법은 최적이 아닙니다.우리는 두 가지 다른 스크립트를 만들 수 있지만, 이는 개발을 위한 유지보수 문제를 야기합니다.

이 문제를 해결한 사람이 있습니까?환경을 확인하고 PS 스크립트 내에서 해당 cmdlet을 호출하는 방법을 아는 사람이 있습니까?

--- (내 상황에 대한) 답변 ----

이 솔루션은 코드와 미리 구성된 콘솔의 조합입니다.IIS 7 PoSH 공급자에는 Web Administration이 로드된 상태에서 PoSH 콘솔을 시작하는 바탕 화면 바로 가기가 포함되어 있습니다.다음과 같은 기능을 결합하면 세 가지 시스템 모두에서 스크립트가 매력적으로 실행됩니다.

Function Load-WebAdmin {
  $webAdminModule = get-module -ListAvailable 
                                        | ? { $_.Name -eq "webadministration" }
  If ($webAdminModule -ne $null) {
    import-module WebAdministration
  }
}

도움을 드리기에는 다소 늦은 감이 있겠지만, 다음과 같은 방법이 있습니다.

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

하나 또는 다른 하나의 오류를 잡아내고 그 반대의 일을 할 수 있습니까?내 껍데기를 가까이에 두지 말고 다음과 같은 것.

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

사실 이 일에 대해 좀 더 생각해보니...

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

처음에는 에러 종류 체크를 수정해야 할 것으로 알고 있습니다.작업이 진행되는 한 이 작업은 실제로 C#에서 로드된 스냅인 또는 시스템에 설치된 IIS 버전을 레지스트리에서 확인한 후 적절한 방법을 사용하여 수행할 수 있습니다.

정말 멋지다.Windows 2008에서 실행할 때 스냅인을 추가할 수 있도록 다른 기능만 추가하면 되었습니다.이것은 내 상황에 맞는 스크립트에서 작동합니다.

Function Load-WebAdmin {
  $webAdminModule = get-module -ListAvailable | ? { $_.Name -eq "webadministration" }
  If ($webAdminModule -ne $null) {
    import-module WebAdministration
  }else{
    Add-pssnapin WebAdministration
   }
}

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 }

나는 오늘 이 문제에 부딪혔고 여기 내가 사용한 해결책이 있습니다.

Web Administration의 Add-PSSnap - Error Action Silietly Continue

가져오기-모듈 웹 관리 - 오류 작업 자동으로 계속

이 기능이 작동하지 않는 유일한 상황은 ii powershell 스냅인이 전혀 설치되어 있지 않은 경우뿐입니다.

"사전 구성된" PowerShell 세션을 생성하려면 다음과 같은 PowerShell 콘솔 파일을 살펴보십시오.

man Export-Console -full

Win7 및 Server 2008 R2에서 사용할 하나와 Server 08에서 사용할 다른 하나를 생성할 수 있습니다.

언급URL : https://stackoverflow.com/questions/1924217/powershell-load-webadministration-in-ps1-script-on-both-iis-7-and-iis-7-5