Saltar al contenido

¿Cómo garantizar que el sitio web de IIS esté completamente detenido en Powershell?

Deseamos compartir contigo la mejor respuesta que encontramos en línea. Nosotros esperamos que te resulte de ayuda y si puedes comentarnos algo que nos pueda ayudar a crecer hazlo libremente.

Solución:

Puede usar estos dos comandos para verificar el estado del sitio web/aplicación, digamos después de 10 segundos, luego use una instrucción If para eliminar registros solo cuando el estado devuelto sea stopped

Get-WebsiteState -name "MyWebsite"
Get-WebAppPoolState -name "MyWebsite"

Este bucle también debería ayudarte.

$currentRetry = 0;
$success = $false;
do
    $status = Get-WebAppPoolState -name "MyWebsite"
    if ($status -eq "Stopped")
         <....your code here....>
            $success = $true;
        
        Start-Sleep -s 10
        $currentRetry = $currentRetry + 1;
    
while (!$success -and $currentRetry -le 4)

Actualizado el 24 de abril de 2019

Según el comentario y el documento de cmdlet actual, parece que el tipo de devolución es de hecho un objeto. Por lo tanto, presumiblemente, se puede manejar como comentado o como el fragmento de línea a continuación. El autor ya no tiene acceso al entorno de Windows Server, por lo tanto, no modificó directamente la respuesta original ni pudo probar la actualización.

if ($status.Value -eq "Stopped")

Después de ejecutar ‘Stop-WebAppPool’, el estado de WebAppPool será “Deteniéndose” y pueden pasar unos segundos antes de que el estado de WebAppPool sea realmente “Detenido”.
Aquí hay una pequeña función para ayudar con WebAppPoolState

function Stop-AppPool ($webAppPoolName,[int]$secs) 
$retvalue = $false
$wsec = (get-date).AddSeconds($secs)
Stop-WebAppPool -Name $webAppPoolName
Write-Output "$(Get-Date) waiting up to $secs seconds for the WebAppPool '$webAppPoolName' to stop"
$poolNotStopped = $true
while (((get-date) -lt $wsec) -and $poolNotStopped) 
    $pstate =  Get-WebAppPoolState -Name $webAppPoolName
    if ($pstate.Value -eq "Stopped") 
        Write-Output "$(Get-Date): WebAppPool '$webAppPoolName' is stopped"
        $poolNotStopped = $false
        $retvalue = $true
    

return $retvalue

puede ejecutar esta función usando, por ejemplo

Stop-AppPool "MyWebsite" 30

y verifique el valor de retorno para ver si WebAppPool se ha detenido en los segundos dados

Te invitamos a añadir valor a nuestra información asistiendo con tu experiencia en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *