PowerShell é uma ótima ferramenta de scripting. Ela não só ajuda a poupar tempo, mas também proporciona maior flexibilidade para executar tarefas repetidas manualmente ou através de tarefas agendadas. Quase todas as funções e recursos do Windows são fornecidos com o PowerShell cmdlets.
Você pode usar o sistema operacional Windows cmdlets, disponível por padrão, para executar tarefas operacionais, como verificar o status de um determinado serviço do Windows em vários computadores, verificar a lista de softwares instalados em computadores Windows, verificar e coletar funções e recursos instalados em sistemas operacionais Windows Server e muito mais.
Uma das tarefas que os administradores do Windows realizam frequentemente é verificar o estado de serviços críticos em servidores de produção críticos, tais como Exchange Servers, SQL Servers e/ou controladores de domínio Active Directory.
Embora possa utilizar o SCCM e ferramentas semelhantes para lhe fornecer um relatório sobre o estado dos serviços de um determinado conjunto de máquinas, o SCCM requer que o SCCM Client esteja a trabalhar em todos os computadores alvo antes que o SCCM possa reportar o estado dos serviços.
É aqui que o nosso último script e Server Tutorial vem a calhar. Você pode usar o script PowerShell explicado neste artigo para verificar rápida e facilmente o status de determinados serviços em um único ou vários computadores Windows.
Verificando o estado de um único serviço
Se quiser verificar o estado de um determinado serviço num computador remoto, o que pode fazer é executar o comando PowerShell abaixo:
Get-WMIObject -Computer -Query "Select * From Win32_Service WHERE Name Like "%SomeServiceName%"
Executar o comando PowerShell acima irá ajudá-lo a obter o estado de um serviço específico especificado no parâmetro “%SomeServiceName%”. Este comando conecta-se a um computador remoto especificado no parâmetro “-Computer”. Você provavelmente vai querer mudar tanto o nome do computador quanto o nome do serviço antes de executar o comando acima.
Verificando o Status de Vários Serviços
Caso você queira obter uma lista de todos os serviços do Windows que estão sendo executados em um sistema alvo, execute o seguinte comando PowerShell:
Get-WMIObject Win32_Service -Computer | Where {$_.State -eq "Running"} | FT -Auto
O comando acima listará todos os serviços do Windows que estão sendo executados a partir do computador remoto especificado no parâmetro “-Computador”, e a saída será exibida na janela PowerShell. Se você quiser salvar a saída em um arquivo CSV, adicionar “Export-CSV” fará o trabalho como mostrado neste comando:
Get-WMIObject Win32_Service -Computer | Where {$_.State -eq "Running"} | FT -Auto | Export-CSV "C:TempServicesStatus.CSV"
Verificando o status de um único serviço em vários computadores Windows
Embora os comandos PowerShell acima o ajudem a obter o status de um serviço específico ou vários serviços de um único computador Windows, o seguinte script PowerShell pode ser usado se você quiser ver o status de um único serviço de vários computadores Windows. Tudo o que precisa de fazer é criar um ficheiro de texto que contenha os nomes dos computadores Windows e modificar a variável de script “$ServiceNameToCheck” para incluir o serviço que gostaria de verificar.
$ServiceNameToCheck ="SomeServiceName"
$ReportFile = "C:TempServiceStatus.CSV"
Remove-item $ReportFile -ErrorAction SilentlyContinue
$ThisSTR = "Computer Name, Service Status"
Add-Content $ReportFile $ThisSTR
$CompFile = "C:TempComputers.TXT"
Foreach ($ComputerName in Get-Content "$CompFile")
{
$Error.Clear()
Get-WMIObject -Computer $ComputerName -Query "Select * From Win32_Service WHERE Name Like "%$ServiceNameToCheck% AND {$_.State -eq "Running"}
IF ($Error.Count -ne 0)
{
$ThisSTR = $ComputerName+", Could Not Connect to Remote Computer or Service Not Running"
Add-Content $ReportFile $ThisSTR
}
else
{
$ThisSTR = $ComputerName+", Running"
Add-Content $ReportFile $ThisSTR
}
}
Write-Host "Service status was retrieved from the list of computers and the output was saved in $ReportFile"
Após o script PowerShell acima ter terminado a execução, será criado um ficheiro de relatório chamado ServiceStatus.CSV na pasta “C:Temp” que contém o estado do nome do serviço especificado na variável “$ServiceNameToCheck” de todos os computadores mencionados no ficheiro “C:TempComputers.TXT”.
Nota que o script verifica se o comando foi executado com sucesso antes de reportar o estado do serviço. O script PowerShell usa o PowerShell cmdlet “Get-WMIObject” para recolher o estado de serviço(s) específico(s) dos computadores alvo. No caso do Get-WMIObject não ser capaz de se conectar a um computador alvo ou se o status do serviço não for recuperado, ele retornará uma mensagem “Could Not Connect to Remote Computer or Service Not Running” no relatório.
Conclusion
É bastante fácil obter o status de um único ou vários serviços de um único ou vários computadores Windows remotos. Embora existam ferramentas empresariais disponíveis para recolher um inventário de computadores Windows, incluindo o estado dos serviços, existem também casos em que estes comandos/scripts PowerShell são muito úteis, particularmente quando é necessário verificar rapidamente o estado de um determinado serviço em vários computadores Windows.
Nirmal Sharma é um MCSEx3, MCITP e Microsoft MVP em Serviços de Directório. Ele é especializado em serviços de diretório, Microsoft Azure, clusters de Failover, Hyper-V, System Center e Exchange Servers, e está envolvido com tecnologias Microsoft desde 1994. Em seu tempo livre, ele gosta de ajudar os outros e compartilhar alguns de seus conhecimentos escrevendo dicas e artigos em vários sites e contribuindo para Health Packs para as soluções ADHealthProf.ITDynamicPacks.Net. Nirmal pode ser contactado em .
Follow ServerWatch no Twitter e no Facebook
.