07/09/2011

Manipulando IIS com Powershell

image

Ultimamente tenho trabalhado bastante com Powerhell Powershell devido a uma consultoria no módulo de Build do TFS. O legal desse módulo é que você pode interagir com scripts Powershell e variáveis do Work Flow que o TFS utiliza durante um build.

O Powershell é muito poderoso, isso se deve ao fato dele usufruir das classes .NET, utilizar o Windows Remote Management (WinRM) para execução remota de scripts, e comandos nativos das versões mais atuais do prompt, como o ROBOCOPY.

image

Assim como no .NET, nós podemos instalar módulos adicionais, e até mesmo importar os já instalados. No caso do IIS devemos importar o módulo “WebAdministration” . Então segue alguns scripts para manipulação do IIS.

Import-Module WebAdministration;

#region Manipulação do IIS
       
    function PararPool([string] $poolName)
    {
        Stop-WebAppPool -Name $poolName;
    }
       
    function IniciarPool([string] $poolName)
    {
        Start-WebAppPool -Name $poolName;
    }
       
    function PararSite([string] $siteName)
    {
        $site = GetSite $siteName;
        $site.Stop();
    }
       
    function IniciarSite([string] $siteName)
    {
        $site = GetSite $siteName;
        $site.Start();
    }
       
    function GetSite($siteName)
    {   
        $site = Get-Item IIS://Sites/$siteName -ErrorAction SilentlyContinue;
        return $site;
    }
       
    function GetDirectorySite($site)
    {
        (Get-Item IIS://Sites/$site).PhysicalPath;
    }
       
    function GetPoolSite($site)
    {
        $objSite = Get-Item IIS://Sites/$site;
        return $objSite.ApplicationPool;
    }
       
    function CriarSite([string] $siteName, [string] $caminho)
    {
        New-Item IIS:\AppPools\$siteName;
        New-Item IIS:\Sites\$siteName -bindings @{protocol="http";bindingInformation=":80:$siteName"} -physicalPath $caminho;
        Set-ItemProperty IIS:\Sites\$siteName -name applicationPool -value $siteName;
    }
       
#endregion

Os scripts foram testados no IIS 7 e 7.5.

image

É lógico que existem mil e uma maneiras de preparar neston atingir um objetivo.

image

É possível utilizar o Active Directory Service Interfaces (ADSI), ou até mesmo o Windows Management Instrumentation (WMI). Acompanhe como reciclaríamos um determinado pool do IIS com o ADSI:

function ReciclarPool([string] $server, [string] $poolName)
{           
    ([adsi]"IIS://$server/W3SVC/AppPools/$poolName").Recycle();
}

Uma última dica por hora, para editar e depurar scripts powershell, estou usando o programa PowerGUI.

image

É isso daí pessoal. Por hora é só, espero que tenham gostado! Smile