Gosto muito de trabalhar com Powershell. Não fiz muitas coisas ainda, mas o que eu fiz tem sido bem divertido.

Uso muito para automatizar pequenas tarefas que demoram para executar. Vou mostrar hoje um arquivo .ps1 que você pode criar para solicitar o início ou a parada de um serviço NT. Para ajudar, ele vai usar alguns scripts de elevação (para o Vista) publicados na MSDN Magazine americana ano passado, na edição de Junho. Se você resolver por para rodar o script que está aqui, vai precisar dele. Coloquei a elevação para que o script possa rodar, já que no Windows Vista não dá para parar ou iniciar serviços sem elevar. Ver o status de um serviço é possível, e por isso não solicito elevação nesse caso.

Para iniciar ou parar um serviço, é só chamar o nome do script, seguido do nome do serviço (se estiver parado ele inicia e vice-versa):
Servico.ps1 MSSQLSERVER

Para parar é só chamar com parâmetro off:
Servico.ps1 MSSQLSERVER off

Para iniciar é só chamar com parâmetro on:
Servico.ps1 MSSQLSERVER on

Para saber o status é só chamar com parâmetro query:
Servico.ps1 MSSQLSERVER query

Você vai precisar assinar o script para rodar. Para isso, veja as instruções no próprio Powershell:
get-help about_signing

Se tiverem problema para assinar me digam que posto aqui como fazer.

Vejam o script comentado:

#variáveis

$ligar = $FALSE

$desligar = $FALSE

$query = $FALSE

$Acao = $Args[1]

$servico = $Args[0] #"MSSQLSERVER"

 

#se o parametro não foi passado, exibe o funcionamento:

if ($servico -eq $null)

{

      Write-Host "O serviço não foi especificado." `

      -ForegroundColor DarkRed

      "Para rodar este script chame o nome do arquivo `

      PS1 (Servico.ps1), mais o nome do serviço `

      (por exemplo, ""MSSQLSERVER""). "

      ""

      "Por exemplo:"

      "Servico.ps1 MSSQLSERVER"    

      "Você também pode especificar se quer iniciar o serviço:"

      "Servico.ps1 MSSQLSERVER on"

      ""

      "Desligar o serviço:"

      "Servico.ps1 MSSQLSERVER off"

      ""

      "Ou somente saber se ele está rodando:"

      "Servico.ps1 MSSQLSERVER query"    

      ""

      return

}

 

#se não há ação verifica se o serviço está ligado,

#se estiver desliga e vice-versa

if ($Acao -eq $null)

{

      #verificando se está ligado

      if ((Get-Service $servico).STATUS -eq "Stopped")

      {

            $ligar = $TRUE

      }    

      else

      {

            $desligar = $TRUE

      }

}

else

{

      #se for parâmetro de query, anota:

      if (($Acao.ToString().ToUpper() -eq "QUERY") `

            -or ($Acao.ToString().ToUpper() -eq "Q"))

      {

            $query = $TRUE

      }

      else

      {

            #se for para ligar, anota:

            if (($Acao.ToString().ToUpper() -eq "ON") `

                  -or ($Args[0] -eq "1"))

            {

                  $ligar = $TRUE

            }

            else

            {

                  $desligar = $TRUE

            }

      }    

}

 

if ($ligar)

{

      #inicia o serviço, se der pau, guarda

      Start-Service $servico -ErrorAction silentlycontinue `

            -ErrorVariable erro

 

      if ($erro -ne $null)

      {

            if ($erro[0].ToString().Contains("Cannot open " `

                  +  $servico + " service on computer"))

            {

                  #se por causa da elevação, então eleva:

                  Write-Host "Não está elevado." `

                        -ForegroundColor DarkRed

                  elevate powershell -command `

                        "C:\users\giovanni\desktop\teste.ps1" $Args

                  return

            }          

      }    

     

      #msg de ok:

      Write-Host "O serviço $servico foi ligado." `

            -ForegroundColor Blue

      Read-Host "Clique para continuar"

}

if ($desligar)

{

      #para o serviço, se der pau, guarda

      Stop-Service $servico -Force -ErrorAction `

            silentlycontinue -ErrorVariable erro

     

      if ($erro -ne $null)

      {

            if ($erro[0].ToString().Contains("Cannot open " +  `

                  $servico + " service on computer"))

            {

                  #se por causa da elevação, então eleva:

                  Write-Host "Não está elevado." `

                        -ForegroundColor DarkRed

                  elevate powershell -command `

                        "C:\users\giovanni\desktop\teste.ps1" $Args

                  return

            }          

      }    

      #msg de ok

      Write-Host "O serviço $servico foi desligado." `

            -ForegroundColor Blue

      Read-Host "Clique para continuar"

}

#verificando se o serviço está rodando:

if ($query)

{

      if ((Get-Service $servico).STATUS -eq "Stopped")

      {

            Write-Host "O serviço $servico está desligado." `

                  -ForegroundColor Blue

      }    

      else

      {

            Write-Host "O serviço $servico está ligado." `

                  -ForegroundColor Blue        

      }    

}


Postado na(s) categoria(s) Powershell pelo giovanni bassi em 23 de abril de 2008 às 20:21 | Tags:

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Comentar


(Vai mostrar seu Gravatar)  

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



Quem é Giovanni Bassi

Giovanni Bassi Sou uma pessoa apaixonada por tecnologia e especificamente por .Net. Sou consultor independente especialista em .Net, focado em arquitetura e melhores práticas. Tenho dezenas de artigos publicados na .Net Magazine, revista da qual sou editor técnico. Ministro palestras e cursos de vez em quando, e quando dá tempo eu respiro um pouco. Mais detalhes nesta página.

Calendário

«  dezembro 2008  »
seteququsedo
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234
Ver detalhamento de posts no calendário

Blogs interessantes