in IIS

Appcmd Escape Karakter

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

Yorum Bırak

Comment