programing

IIS에서 powershell 스크립트를 사용하여 응용 프로그램 풀을 시작하고 중지하는 방법

stoneblock 2023. 10. 6. 20:50

IIS에서 powershell 스크립트를 사용하여 응용 프로그램 풀을 시작하고 중지하는 방법

IIS에서 파워셸 스크립트를 사용하여 응용프로그램 풀을 시작하고 중지하려고 합니다.대본을 쓰려고 했는데 못 받았어요.

이거 쓰셔도 돼요.

사용(PowerShell 2.0)이 Web Administration 모듈을 가져오는 경우

import-module WebAdministration

이전에 애플리케이션 풀의 상태를 확인해주시기 바랍니다.응용프로그램 풀이 이미 중지된 경우에는 예외가 적용됩니다.

응용프로그램 풀 중지:

$applicationPoolName = 'DefaultAppPool'

if((Get-WebAppPoolState -Name $applicationPoolName).Value -ne 'Stopped'){
    Write-Output ('Stopping Application Pool: {0}' -f $applicationPoolName)
    Stop-WebAppPool -Name $applicationPoolName
} 

응용프로그램 풀 시작:

if((Get-WebAppPoolState -Name $applicationPoolName).Value -ne 'Started'){
    Write-Output ('Starting Application Pool: {0}' -f $applicationPoolName)
    Start-WebAppPool -Name $applicationPoolName
}

권한:당신은 ""의 일원이 되어야 합니다.IIS Admins" 그룹.

요즘 IISA 관리 모듈은 대부분 Web Administration을 능가합니다.

따라서 Windows 10 / Server 2016을 사용하는 경우 Get-IISA AppPool을 다음과 같이 사용할 수 있습니다.

Import-Module IISAdministration
(Get-IISAppPool "name").Recycle()

PowerShell을 사용하여 앱 풀을 중지하려면 다음과 같이 하십시오.

Stop-WebAppPool -Name YourAppPoolNameHere

그리고 앱 풀을 시작하는 것.

Start-WebAppPool -Name YourAppPoolNameHere

당신은 필요할 것입니다.WebAdministration모듈을 설치했으므로 이 명령으로 확인합니다.

 Get-Module -ListAvailable

다음 파워셸 스크립트를 사용하여 모든 애플리케이션 풀을 중지 및 중지할 수 있습니다.아래 두번째 줄은 권한을 높입니다.이를 제외하고 관리자로 실행할 수 있습니다.

모든 애플리케이션 풀 스크립트 중지

Import-Module WebAdministration

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit }

$AppPools=Get-ChildItem IIS:\AppPools | Where {$_.State -eq "Started"}

ForEach($AppPool in $AppPools)
{
 Stop-WebAppPool -name $AppPool.name
# Write-Output ('Stopping Application Pool: {0}' -f $AppPool.name)
}

모든 애플리케이션 풀 스크립트 시작

  Import-Module WebAdministration

    if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`"" -Verb RunAs; exit }

    $AppPools=Get-ChildItem IIS:\AppPools | Where {$_.State -eq "Stopped"}
    ForEach($AppPool in $AppPools)
    {
     Start-WebAppPool -name $AppPool.name
    # Write-Output ('Starting Application Pool: {0}' -f $AppPool.name)
    }

저는 애저 파이프라인에서 다음 코드를 사용합니다.

풀을 중지합니다.

Import-Module -Name 'C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WebAdministration\WebAdministration.psd1';

$AppPoolName = 'DefaultAppPool';
$AppPoolState = (Get-WebAppPoolState -Name $AppPoolName).Value;
$WasStarted = $false;
$Timeout = [System.TimeSpan]::FromMinutes(1);
$StopWatch = New-Object -TypeName 'System.Diagnostics.Stopwatch';
$StopWatch.Start();
# Possible status: "Starting", "Started", "Stopping", "Stopped" and "Unknown".
while ($AppPoolState -ne 'Stopped') {
  if ($AppPoolState -eq 'Started') {
    $WasStarted = $true;
    Stop-WebAppPool -Name $AppPoolName;
  }
  Start-Sleep -Seconds 2;
  if ($StopWatch.Elapsed -gt $Timeout) {
    throw New-Object -TypeName 'System.TimeoutException' -ArgumentList "Timeout of $($Timeout.TotalSeconds) seconds exceeded!";
  }
  $AppPoolState = (Get-WebAppPoolState -Name $AppPoolName).Value;
}

풀을 시작합니다.

Import-Module -Name 'C:\Windows\System32\WindowsPowerShell\v1.0\Modules\WebAdministration\WebAdministration.psd1';

$AppPoolName = 'DefaultAppPool';
$AppPoolState = (Get-WebAppPoolState -Name $AppPoolName).Value;
$WasStopped = $false;
$Timeout = [System.TimeSpan]::FromMinutes(1);
$StopWatch = New-Object -TypeName 'System.Diagnostics.Stopwatch';
$StopWatch.Start();
# Possible status: "Starting", "Started", "Stopping", "Stopped" and "Unknown".
while ($AppPoolState -ne 'Started') {
  if ($AppPoolState -eq 'Stopped') {
    $WasStopped = $true;
    Start-WebAppPool -Name $AppPoolName;
  }
  Start-Sleep -Seconds 2;
  if ($StopWatch.Elapsed -gt $Timeout) {
    throw New-Object -TypeName 'System.TimeoutException' -ArgumentList "Timeout of $($Timeout.TotalSeconds) seconds exceeded!";
  }
  $AppPoolState = (Get-WebAppPoolState -Name $AppPoolName).Value;
}

변수들은$WasStarted그리고.$WasStopped는 이 예제에서 사용되지 않는 추가 정보이지만 새 버전 배포가 완료된 후 애플리케이션 풀을 재시작해야 하는지 여부를 결정하는 데 사용할 수 있습니다(이전에 이미 중지되었기 때문에).

당신은 수입해야 합니다.WebAdministrationImport-Module을 사용하여 모듈을 실행한 다음 Start-WebAppPoolStop-WebAppPool을 사용할 수 있습니다.

마이크로소프트 문서에서.https://learn.microsoft.com/en-us/powershell/module/webadminstration/restart-webapppool?view=winserver2012-ps

재시작-WebAppPool은 애플리케이션 풀을 재활용합니다.
그렇다면 굳이 정차를 생각하지 않고 기다렸다가 출발할 필요가 없습니다.

Import-Module WebAdministration

실행 중인 특정 AppPool의 경우

$applicationPoolName = 'DefaultAppPool'
Get-ChildItem IIS:\AppPools | Where {$_.State -ne "Stopped" -and $_.name -eq $applicationPoolName} | Restart-WebAppPool

실행 중인 모든 AppPool에 대해

Get-ChildItem IIS:\AppPools | Where {$_.State -ne "Stopped"} | Restart-WebAppPool

미치 포메리가 댓글로 언급한 것처럼 앱풀은 즉각적으로 멈추지 않습니다.이 때문에 내 CI 스크립트는 앱풀에서 여전히 사용 중인 디렉토리에 파일을 복사하지 못합니다.대신에, 난 다시 돌아갔습니다.appcmd되는 는)다입니다.WebAdministration풀이 실행되고 있는지 확인하는 모듈.

Import-Module WebAdministration
if ((Get-WebAppPoolState -Name PCSServer).Value -ne 'Stopped'){ C:\Windows\system32\inetsrv\appcmd stop apppool "PCSServer-WS" }
Expand-Archive -Path MBE.zip -DestinationPath $DEPLOY_PATH -Force
C:\Windows\system32\inetsrv\appcmd start apppool "PCSServer-WS"

저는 결국 이런 생각을 하게 됐습니다.

앱 풀을 중지하는 중:

    - task: PowerShell@2
      displayName: Stop App Pool
      inputs:
        targetType: 'inline'
        script: |
          $applicationPoolName = '$(MySite)AppPool'

          if((Get-WebAppPoolState -Name $applicationPoolName).Value -ne 'Stopped')
          {
           Write-Output ('Stopping Application Pool: {0}' -f $applicationPoolName)
           Stop-WebAppPool -Name $applicationPoolName
           Start-Sleep -Seconds 2
          } 

앱 풀을 시작하는 중:

- task: PowerShell@2
  displayName: Start App Pool
  inputs:
    targetType: 'inline'
    script: |
      $applicationPoolName = '$(MySite)AppPool'

      if((Get-WebAppPoolState -Name $applicationPoolName).Value -ne 'Started')
      {
        Start-Sleep -Seconds 2
        Write-Output ('Starting Application Pool: {0}' -f $applicationPoolName)
        Start-WebAppPool -Name $applicationPoolName
      }

언급URL : https://stackoverflow.com/questions/36599456/how-to-start-and-stop-application-pool-in-iis-using-powershell-script