MaestroPanel’den mütevellit IIS ile çok içli dışlı oluyorum malesef. IIS’i yönetmek için en kullanışlı arak ise appcmd komut satırı aracı (powershell, C# gibi API’lar dan gidince tool’lar managed kod’a dokuduğundan yavaş çalışıyorlar).
Sağ olsun IIS 10’da applicationhost’un değerlerini daha yeni system environmenlerine oturtdular. Gel gelelim appcmd bunu desteklemiyor.
Örneğin:
Path değişkeni için verilen değer aşağıdaki gibi.
%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll
Gel gelelim appcmd kullanarak bu değişkene sahip elemanda bir değişiklik yapacaksan bulamıyorsun. Çalışmayan kod aşağıdaki gibi.
appcmd.exe set config -section:system.webServer/security/isapiCgiRestriction /[path='%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll'].allowed:"False" /commit:apphost
Bu komutu çalıştırdığınızda aşağıdaki çıktıyı veriyor.
ERROR ( message:Cannot find requested collection element. )
Sorun %windir% değişkeni ile alakalı. Appcmd bunu C:\Windows olarak değiştiriyor otomatikman, e sorguladığın değer değişincede appcmd kendi ayağına sıkıp elemanı bulamadım diyor.
Appcmd üzeinde escape karakter için resmi çözüm % yerine %% yüzde yapmak.
Örneğin:
path='%%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll'
gibi. Ama bu da çalışmıyor. Bunun sonucu %C:\Windows% gibi komik bir şeye tekabul ediyor runtime’da.
Çözüm:
Çözüm unicode’da escape karakterine gerek olmadan direkt unicode karakter kodununun girilmesi yeterli oluyor. Yani;
path='%u0025windir%u0025\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll'
Yüzde (%) yerine %u0025 koyduk. En nihayetinde aşağıdaki kod appcmd üzerinden sorunsuz çalışıyor.
appcmd.exe set config -section:system.webServer/security/isapiCgiRestriction /[path='%u0025windir%u0025\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll'].allowed:"False" /commit:apphost