Geek School: Escrevendo seu primeiro script PowerShell completo

Índice:

Geek School: Escrevendo seu primeiro script PowerShell completo
Geek School: Escrevendo seu primeiro script PowerShell completo

Vídeo: Geek School: Escrevendo seu primeiro script PowerShell completo

Vídeo: Geek School: Escrevendo seu primeiro script PowerShell completo
Vídeo: Uma Bomba💣 O Horrível Windows 8 E Seu Fracasso Gigantesco, Entenda - YouTube 2024, Abril
Anonim
Algumas semanas atrás, o The Geek mostrou a você como você pode usar o prompt de comando para encontrar quando o 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.
Algumas semanas atrás, o The Geek mostrou a você como você pode usar o prompt de comando para encontrar quando o 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 a 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 do computador
  • Trabalhando com coleções no PowerShell
  • Aprenda como usar trabalhos no PowerShell
  • Aprenda como estender o PowerShell
  • Aprendendo Variáveis do PowerShell, Entrada e Saída

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.
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.
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 alguma razão os caras do WMI decidiram concatenar tudo isso em uma única string. Para nossa sorte, não precisamos nos preocupar com a análise manual da string, pois há uma maneira mais fácil de fazer isso, embora seja mais avançada. Você precisará alterar a parte Select-Object do código para ficar assim:
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 alguma razão os caras do WMI decidiram concatenar tudo isso em uma única string. Para nossa sorte, não precisamos nos preocupar com a análise manual da string, pois há uma maneira mais fácil de fazer isso, embora seja mais avançada. Você precisará alterar a parte Select-Object do código para ficar assim:

Select-Object -Property CSName,@{n=”Last Booted”;

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 se parecer com isso.

Executar o código agora renderá um último tempo de inicialização muito mais legível.
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:
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:
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 quem quer 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.
Ó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 quem quer 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.
Salve seu script, volte para a metade inferior do ISE e veja a ajuda do seu script.

help C:Get-LastBootTime.ps1

Incrível, agora podemos especificar o nome do computador que queremos para obter o último tempo de inicialização para usar 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, por isso vamos corrigir esses problemas rapidamente. Para tornar o parâmetro ComputerName obrigatório, altere o conteúdo do bloco de parâmetros para o seguinte.
Incrível, agora podemos especificar o nome do computador que queremos para obter o último tempo de inicialização para usar 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, por isso vamos corrigir esses problemas rapidamente. Para tornar o parâmetro ComputerName obrigatório, altere o conteúdo do bloco de parâmetros para o seguinte.

[Parameter(Mandatory=$true)][string]$ComputerName

Quanto a criar 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 topo do script.

<#.SYNOPSIS Shows when last your PC started up..DESCRIPTION This is a WMI wrapper function to get the time that your PC last started up..PARAMETER ComputerName The name of the Computer you want to run the command against..EXAMPLE Get-LastBootTime -ComputerName localhost.LINK www.howtogeek.com #>

Depois de tudo o que é feito, você deve acabar com um script parecido com isso.

Recomendado: