Como já escrevi aqui, nos últimos tempos tenho andado com um pé no Linux (como sempre), mas também pela primeira vez num grande projecto, em tecnologias Microsoft (o que quer que isso queira dizer).
Os gajos têm coisas boas, mas a maior parte é simplesmente, yuck!, como o IIS.
No IIS podemos ter sites diferentes a correr em diferentes portas, até aqui nada de mais. Um desses sites e que vem logo instalado por omissão, é o “Default Web Site“. Sinceramente, não consigo compreender a razão da existência deste site em particular, se ainda definisse o que corre por omissão na porta 80, mas não. Podemos pôr a porta 80 noutro site e podemos mesmo remover o Default Web Site que não acontece nada. Pode haver uma razão profunda para sua existência, mas confesso que a existir, e tal como está implementada, não faz grande sentido para mim. E por isso, apaguei-o há tempos.
Adiante… hoje, comecei a instalar uma aplicação que a páginas tantas, me disse que tinha que ser o Default Web Site e que este não existia. Bem, pensei, isto deve ser ir ao IIS Manager, clicar com o botão direito por cima de um novo site e defini-lo como Default Web Site. Não podia estar mais enganado, não existe em lado nenhum na interface de gestão do IIS algo para criar o dito cujo. Ala para o Google.
Ok, abrir uma janela de DOS, e em \Inetpub\AdminScripts, correr:
cscript adsutil.vbs enum w3svc/1
Veio um “path not found” só a confirmar que o Default Web Site não existia.
cscript adsutil.vbs enum w3svc
Este comando devolve uma carrada de lixo em scroll e no final aparecem os sites que estão a correr, mas identificados por um número enorme, tipo w3svc/84538735 gerado aleatoriamente, excepto o Default Web Site que tem o número 1. Ou seja, com esta informação, não conseguia saber qual dos meus sites a correr no IIS era aquele que eu queria que fosse o Default.
Bem, com um bocadinho de código, consegue-se saber a que site corresponde cada número:
Function ProcessWebSite(ServiceType, SiteNumber)
Set IISWebSite = getObject("IIS://localhost/" & ServiceType & "/" & SiteNumber)
Set IISWebSiteRoot = getObject("IIS://localhost/" & ServiceType & "/"
& SiteNumber & "/root")
ProcessWebSite = IISWebSite.ServerComment
Set IISWebSiteRoot = nothing
Set IISWebSite = Nothing
end function
Function ShowSites(ServiceType, ClassName, Title)
Wscript.echo "Web Sites Description"
Wscript.echo "============================================"
Set IISOBJ = getObject("IIS://localhost/" & ServiceType)
for each Web in IISOBJ
if (Web.Class = ClassName) then
wscript.echo Ucase(ServiceType) & "/" & Web.Name & _
Space(17-(len(Ucase(ServiceType))+1+len(Web.Name))) & " " & _
ProcessWebSite(ServiceType, Web.name)
end if
next
Set IISOBj=Nothing
WScript.Echo ""
End function
Call ShowSites("w3svc", "IIsWebServer", "Web")
Chamemos servers.vbs ao ficheiro com o código e corremos com:
cscript server.vbs
No meu portátil, por exemplo, dá:
C:\inetpub\ADMINS~1>cscript sites.vbs
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation. All rights reserved.
Web Sites Description
===============================================================
W3SVC/1 Default Web Site
Mas no trabalho não tinha isto, mas uma série deles com os tais números enormes. Mas agora já conseguia identificar qual era o site que eu queria que fosse o tal. Suponhamos que o seu número era o 1234567.
Chegou a hora. Começar por criar o Default Web Site:
cscript adsutil.vbs create_vserv W3SVC/1
Faze-lo a partir do site que queremos:
cscript adsutil.vbs copy W3SVC/1234567 W3SVC/1
Defini-lo:
cscript adsutil.vbs set w3svc/1/ServerComment "Default Web Site"
E pronto, está. Ainda dizem que o UNIX é difícil e trabalhoso, fénix.