Als het een keer gebeurt dat je in IIS een scriptProcessor-update (bijvoorbeeld een PHP-versie) moet terugdraaien, dan kun je dat in IIS redelijk eenvoudig doen. Met PowerShell bijvoorbeeld. In deze post lees je hoe je conditioneel apppools recyclet in Windows Server IIS.

Zo moest ik afgelopen juni de PHP-update van 7.2.18 naar 7.2.19 ongedaan maken vanwege een serieuze bug in PHP 7.2.19: #78125 Persistent php-cgi.exe access fault.

Het onderstaande stukje PowerShell is wat ik hiervoor gebruikte om de scriptProcessor aan te passen en om aan de hand van een conditie (de site moet deze scriptProcessor als Handler Mapping gebruiken) applicatiepools te recyclen.

foreach ($server in (Get-ADComputer -Filter {(enabled -eq $True) -and ( (DNSHostname -like "iis-*") )} -SearchBase "OU=Webservers,OU=Computers,DC=dc,DC=example,DC=com").DNSHostName) {
invoke-command -computername $server -scriptblock {
if( (Test-Path "d:\scripts\php\7.2.19" )) {
Write-Host "Maak een nieuwe PHP 7.2 symlink op $Using:server"
&cmd.exe "/c rmdir d:\scripts\php\7.2"
&cmd.exe "/c mklink /d c:\scripts\php\7.2 7.2.18"
}
}
}

foreach ($server in (Get-ADComputer -Filter {(enabled -eq $True) -and ( (DNSHostname -like "iis-*") )} -SearchBase "OU=Webservers,OU=Computers,DC=dc,DC=example,DC=com").DNSHostName) {
invoke-command -computername $server -scriptblock {
Get-Website | % {
$sitename = $_.name;
try{
$handlers = Get-WebConfiguration /system.webServer/handlers/add -Location $sitename
If( $handlers.scriptProcessor -like "d:\scripts\php72\php-cgi.exe*" ) {
write-output "$sitename gebruikt PHP 7.2"
&appcmd.exe recycle apppool $sitename
}
}
catch {}
}
} -AsJob
}

Belangrijk om hierbij te vermelden is dat we een PHP-versie hebben geplaatst in d:\scripts\php\7.2.19 en een directory symbolic link d:\scripts\php\7.2 gebruiken die is gelinkt naar d:\scripts\php\7.2.19.

Hiermee kun je in IIS de scriptProcessor d:\scripts\php\7.2\php-cgi.exe instellen, en de achterliggende versie 7.2.18 eenvoudig verhogen naar 7.2.19 door het aanpassen van de directory symlink. Of omgekeerd: 7.2.19 downgraden naar 7.2.18. Je hoeft dan niet bij tientallen of honderden websites de Handler Mapping aan te passen.

Voor IIS is het dan nodig de desbetreffende applicatiepool die van deze scriptProcessor gebruikmaakt te recyclen. Dit doe je met appcmd.exe. Als je graag meer wilt weten van appcmd, lees dan mijn appcmd introductie op Saotn.org. En je vindt ook wat -SearchBase voor invloed heeft op Get-ADComputer in mijn post Use -SearchBase with Get-ADComputer for faster results.

Laat een reactie achter

Reacties

Nog geen reacties. Waarom begin je de discussie niet?

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *