Geek School Escrevendo seu primeiro script PowerShell completo
Algumas semanas atrás, The Geek mostrou a você como você pode usar o prompt de comando para descobrir quando seu computador foi iniciado por último. Nesta última instalação do Geek School for PowerShell, vamos escrever um comando PowerShell reutilizável para fazer a mesma coisa.
Não deixe de ler os artigos anteriores da série:
- Aprenda a automatizar o Windows com o PowerShell
- Aprendendo a usar cmdlets no PowerShell
- Aprendendo como usar objetos no PowerShell
- Aprendendo a formatar, filtrar e comparar no PowerShell
- Aprenda a usar o Remoting no PowerShell
- Usando o PowerShell para obter informações sobre o computador
- Trabalhando com coleções no PowerShell
- Aprenda como usar trabalhos no PowerShell
- Aprenda como estender o PowerShell
- Aprendendo Variáveis, Entrada e Saída do PowerShell
Escrevendo seu primeiro script
A primeira coisa que precisamos fazer é encontrar uma maneira de acessar as informações que procuramos. Como estamos lidando com informações de gerenciamento, provavelmente precisamos dar uma olhada no uso do WMI, que de fato tem uma classe chamada Win32_OperatingSystem, que permite exibir informações detalhadas sobre o sistema operacional, incluindo a última vez que foi iniciado.
Portanto, agora que sabemos onde podemos encontrar as informações que procuramos, abra o ISE e digite o seguinte.
Get-WmiObject -Class Win32_OperatingSystem -ComputerName localhost |
Select-Object -Property CSName, LastBootUpTime
Observação: eu tive que dividir meu código em duas linhas para que tudo coubesse na captura de tela, mas fique à vontade para digitá-lo em uma única linha. Se você optar por dividi-lo em duas linhas, certifique-se de que o caractere de pipe seja o último caractere na linha 1.
Agora clique no botão verde "Run Script" ou pressione a tecla F5 no seu teclado para testar o código.
Tempos WMI podem ser um pouco enigmático. Com isso queremos dizer se você olhar para a propriedade LastBootUpTime, diz 2013-03-19 às 18:26:21, mas por algum motivo os caras do WMI decidiram concatenar tudo isso em uma única string. Felizmente para nós, não precisamos nos preocupar com a análise manual da string, pois há uma maneira mais fácil de fazê-lo, embora mais avançada. Você precisará alterar a parte Select-Object do código para ficar assim:
Select-Object -Property CSName, @ n = ”última inicialização”;
e = [Management.ManagementDateTimeConverter] :: ToDateTime ($ _. LastBootUpTime)
O que estamos fazendo aqui é criar uma propriedade personalizada chamada "Última inicialização" e especificar que seu valor deve ser o resultado da chamada do método estático ToDateTime na propriedade LastBootUpTime do objeto de pipeline atual. Seu código deve agora ficar assim.
Executar o código agora renderá um último tempo de inicialização muito mais legível.
Agora que estamos satisfeitos com a funcionalidade básica do nosso script, precisamos salvá-lo. Para simplificar, vamos salvá-lo da seguinte forma:
C: \ Get-LastBootTime.ps1
Agora mude para a metade inferior do ISE e execute o seguinte:
C: \ Get-LastBootTime.ps1
Ótimo! Nosso script está funcionando como esperado, no entanto, ainda há um problema com nosso script. Nós codificamos o nome do computador para o qual queremos obter o último tempo de inicialização. Em vez de valores hardcoding, deveríamos fornecer um parâmetro para que qualquer pessoa que esteja usando o script possa escolher em qual computador eles executam o script. Para fazer isso, vá até o topo do seu script e faça o seguinte.
param (
[string] $ ComputerName
)
Em seguida, substitua o valor localhost codificado com a variável $ ComputerName. Seu script agora deve ficar assim:
Salve seu script, volte para a metade inferior do ISE e veja a ajuda do seu script.
ajuda C: \ Get-LastBootTime.ps1
Incrível, agora podemos especificar o nome do computador que queremos obter o último tempo de inicialização para usar o nosso novo parâmetro ComputerName. Infelizmente, ainda há algumas coisas erradas. Em primeiro lugar, o parâmetro ComputerName é opcional e, em segundo lugar, essa é a ajuda mais feia que já vi, então vamos corrigir esses problemas rapidamente. Para tornar obrigatório o parâmetro ComputerName, altere o conteúdo do bloco de parâmetros para o seguinte.
[Parâmetro (Obrigatório = $ true)] [string] $ ComputerName
Quanto a fazer um arquivo de ajuda melhor, o método mais comum é usar a ajuda baseada em comentários. Isso significa que apenas adicionamos um comentário extra longo ao início do script.
<#
.SINOPSE
Mostra quando o seu PC foi iniciado.
.DESCRIÇÃO
Esta é uma função wrapper WMI para obter o tempo que seu PC iniciou pela última vez.
.PARAMETER NomeComputador
O nome do computador no qual você deseja executar o comando.
.EXEMPLO
Get-LastBootTime -ComputerName localhost
.LIGAÇÃO
www.howtogeek.com
#>
Depois de tudo o que é feito, você deve acabar com um script parecido com isso.
Vamos agora dar uma olhada no nosso novo arquivo de ajuda.
Ahhh, parece ótimo! Agora que nosso script está completo, temos uma última coisa a fazer: testar. Para isso, vou sair do ISE e voltar para o console do PowerShell apenas para garantir que não haja anomalias.
Se você começar com um simples forro e apenas continuar construindo nele como fizemos neste guia, você vai pegar o jeito dele em pouquíssimo tempo. Isso é tudo por esse tempo pessoal, até a próxima instalação da Geek School.