Powershell For Newbies Getting Started Powershell4
Powershell For Newbies Getting Started Powershell4
POWERSHELL
PARA NOVATOS
Introdução ao PowerShell
4.0
Jeffery Hicks
Machine Translated by Google
Abstrato
Este eBook destina-se a ser um guia de início rápido para profissionais de TI que desejam
aprender sobre o Windows PowerShell. O eBook assume que o leitor tem pouca ou nenhuma
experiência com o PowerShell e precisa de alguma orientação para começar. O eBook
assumirá o PowerShell v4, embora para um iniciante isso não importe muito, pois os tópicos
fundamentais são independentes da versão.
Conteúdo
Introdução e expectativas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
O que é PowerShell?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Premissas e requisitos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Ajuda do PowerShell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Atualizando ajuda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Salvando ajuda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Usando ajuda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
On-line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Sobre tópicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Terminologia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Cmdlet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Parâmetro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Função. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Variável. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Módulo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Snapin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Fornecedor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2
Machine Translated by Google
O paradigma do PowerShell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Objetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Get-Membro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
O pipeline do PowerShell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Um exemplo da Veeam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Próximos passos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Sobre o autor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3
Machine Translated by Google
Introdução e expectativas
O Windows PowerShell existe há vários anos e, embora no momento em que escrevemos este eBook
estejamos na v4.0 e a v5.0 esteja em pré-visualização, ainda há muitos profissionais de TI que só agora
estão percebendo que precisam aprenda PowerShell. Eles perceberam que o PowerShell não é uma
moda passageira e que, se quiserem algum tipo de segurança no emprego ou futuro profissional
relacionado ao Windows e às tecnologias baseadas na Microsoft, o PowerShell desempenhará um papel
importante.
O objetivo deste eBook é fornecer um curso intensivo sobre os termos, conceitos e comandos
essenciais do PowerShell. Presumo que você tenha pouca ou nenhuma experiência com o PowerShell e
seja o que a Microsoft considera um profissional de TI; ou seja, alguém cujo trabalho diário envolve o
O que é PowerShell?
Primeiro, o que exatamente é o PowerShell? Minha resposta é que o PowerShell é um mecanismo de
gerenciamento baseado em objeto baseado no .NET Framework. Esse mecanismo é exposto por meio
de uma série de comandos chamados cmdlets e provedores (observe que os termos do PowerShell são
explicados posteriormente na seção Terminologia). O PowerShell pode ser exposto por meio de um
console interativo, bem como de uma linguagem de script orientada a lotes.
O mecanismo está hospedado em um aplicativo. A Microsoft envia dois prontos para uso, pelo menos
no cliente. O console do PowerShell que você provavelmente já viu é hospedado pelo shell de
comando herdado cmd.exe. Em outras palavras, o PowerShell está sentado em cima de uma janela
CMD, com todos os benefícios e desvantagens que isso implica.
O PowerShell também pode ser hospedado em uma GUI, como o PowerShell ISE, sobre o qual falarei
mais tarde. Fornecedores, desenvolvedores e a comunidade do PowerShell podem criar seus próprios
aplicativos de hospedagem e, geralmente, o PowerShell se comporta da mesma forma,
independentemente de como você está interagindo com ele.
Na verdade, essa é uma das grandes vantagens do PowerShell. Depois de aprender os fundamentos,
não importa se você está trabalhando com arquivos, processos, contas de usuário do Active Directory,
caixas de correio do Exchange ou máquinas virtuais Hyper-V. Você usará as mesmas habilidades e
frequentemente os mesmos cmdlets. Sim, você pode ter dificuldades no início para aprender o
PowerShell, mas depois de superar o obstáculo inicial, acho que descobrirá que sua curva de
aprendizado se torna muito mais rasa.
4
Machine Translated by Google
simplesmente outra linguagem de script como o VBScript. Sim, você pode criar alguns scripts muito poderosos
usando a linguagem de script simples do PowerShell, mas não precisa usar um script para usar o PowerShell.
Muitos de vocês simplesmente abrirão um prompt do PowerShell e começarão a executar comandos. Tudo o
O PowerShell não é uma linguagem de programação. Embora seja construído no .NET Framework e
permita que você crie algumas ferramentas incríveis, essa não é a intenção. Existe um SDK do PowerShell,
mas destina-se a desenvolvedores que usam o Visual Studio para criar soluções baseadas em PowerShell.
Por fim, usar o PowerShell não significa que você está destinado a passar o dia digitando comandos em
um prompt de comando. Ainda haverá ferramentas gráficas, mas elas serão executadas em cima do
PowerShell. É mais do que provável que você esteja usando o PowerShell agora por meio de uma GUI e
nem saiba disso. As limitações da GUI estão relacionadas à própria natureza de seu design. Você só pode
fazer o que a GUI foi projetada para fazer. Eventualmente, você desejará sair da GUI e resolver o problema
com suas próprias mãos em um prompt do PowerShell. Ou, eventualmente, construa sua própria GUI!
em seu uso. Ainda hoje estamos vendo onde o PowerShell é a cola que mantém uma variedade de
Se você quer ter uma carreira como profissional de TI, há muito tempo defendo que não é uma questão de saber
Além da Microsoft, muitas empresas estão oferecendo soluções PowerShell para seus produtos. Empresas
como VMware, Citrix, StarWind e Veeam® agora oferecem ferramentas PowerShell para gerenciar seus
respectivos produtos – geralmente de graça! Sim, você pode continuar usando as ferramentas tradicionais,
mas acho que quando você perceber o que pode realizar em um prompt do PowerShell, você se converterá. E
depois de aprender os fundamentos, não importa de onde vêm os comandos do PowerShell, todos eles devem
se comportar da mesma forma.
5
Machine Translated by Google
Premissas e requisitos
Tudo o que vou demonstrar neste eBook será baseado no PowerShell 4.0, que no
momento da redação deste artigo, é a versão aprovada de produção mais atual. Eu estarei
usando um cliente Windows 8.1. Para iniciantes, muito do que falarei também se aplicará ao
PowerShell 3.0. Se você ainda estiver executando o PowerShell 2.0, recomendo que você
atualize quando possível. E se por algum motivo você ainda estiver executando o PowerShell
1.0, você tem meus pêsames.
Ajuda do PowerShell
A primeira coisa que você deve entender no PowerShell é como usar o sistema de ajuda.
A equipe do PowerShell escreveu uma documentação completa Muitos outros suplementos da
Microsoft e de terceiros também terão documentação de ajuda. Se você não souber como usar
a ajuda, terá dificuldades constantes para aprender e usar o PowerShell.
Atualizando ajuda
A primeira coisa que você precisa fazer em uma nova instalação é atualizar a ajuda. Por
padrão, o PowerShell é fornecido apenas com ajuda mínima. Para servidores, isso
geralmente não é um problema tão grande, pois é improvável que você esteja usando um
servidor para sua administração diária. Para atualizar a ajuda, seu computador precisa ter
uma conexão com a Internet. Em uma sessão elevada do PowerShell, execute este comando:
PS C:\>update-help
O PowerShell irá enumerar todos os módulos instalados, que são pacotes de comandos,
encontrar o link para ajuda atualizada, baixar e instalar os arquivos de ajuda.
figura 1
6
Machine Translated by Google
Para comandos prontos para uso, isso significa que seu computador se conectará a um site
da Microsoft para obter a ajuda mais atualizada. Por design, o comando se conectará apenas
uma vez a cada 24 horas, a menos que você use o parâmetro –Force como na Figura 1.
Esteja ciente de que nem todos os módulos terão ajuda atualizada. Portanto, não se surpreenda se
você receber algumas mensagens de erro. Não há nada que você possa fazer a não ser ignorá-los e
esperar que uma ajuda eventualmente atualizada seja fornecida.
Salvar ajuda
Uma desvantagem de usar o comando Update-Help é que cada área de trabalho pode precisar se
conectar à Microsoft para baixar a ajuda mais atual. No entanto, você pode salvar a ajuda em uma
pasta local ou compartilhamento de rede e atualizar a ajuda desse local. O comando funciona
essencialmente da mesma forma que Update-Help, exceto que você precisa especificar o local, que
já deve existir.
Se você tiver uma combinação de clientes PowerShell 3.0 e posteriores, mantenha a ajuda
para cada versão em uma pasta separada. Uma vez salvo, qualquer pessoa pode executar
Update-Help e especificar o local alternativo.
Esteja ciente de que salvar a ajuda só recuperará a ajuda para os comandos instalados no
computador que executa o comando. Se o computador que executa o Update-Help tiver comandos
diferentes, ele pode não obter ajuda atualizada.
Usando a ajuda
Depois que a ajuda for atualizada, você poderá começar a usá-la. Tudo que você precisa fazer é
pedir ajuda e você pode usar curingas. Você pode usar o comando Get-Help ou a função Help, que
funciona essencialmente da mesma forma que Get-Help com a adição de paginação.
Figura 2
7
Machine Translated by Google
A Figura 2 mostra todos os comandos no meu computador que o PowerShell pode encontrar que
terminam em 'Serviço'. Para saber mais sobre um comando específico, simplesmente peço ajuda.
Dependendo do tamanho da janela do console, a exibição pode terminar com um comando Mais.
Pressione Enter para avançar uma linha de cada vez, pressione a barra de espaço
para avançar para a próxima página ou pressione Q para sair. Na maioria das vezes, o PowerShell não diferencia
maiúsculas de minúsculas.
Figura 3
As seções principais devem ser autoexplicativas. Mas vamos examinar a seção Sintaxe um
pouco mais de perto (veja a Figura 3). Neste comando, existem três maneiras diferentes de
executá-lo. Os parâmetros sempre começam com um traço (-). Qualquer coisa que você vê entre
colchetes [ ] indica que é opcional. Se você executar um comando que tenha um parâmetro
obrigatório ou obrigatório e não o especificar, o PowerShell o avisará. A Figura 4 ilustra alguns
conceitos de ajuda adicionais.
Figura 4
Quando o parâmetro inteiro está em [ ], como no caso de –Name, isso indica um parâmetro
posicional. O PowerShell assumirá que a primeira coisa que você digita após Get-Service é um
nome de serviço. Assim, você pode digitar qualquer um desses comandos.
8
Machine Translated by Google
O valor do parâmetro deve ser uma string. Se a string tiver espaços, você precisará colocá-la
entre aspas. Quando você vê [ ] como parte do tipo de valor, esta é sua pista de que o
PowerShell aceitará uma matriz ou coleção de objetos – neste caso, nomes de serviço.
Geralmente você pode separar os valores com uma vírgula.
O parâmetro –Computername é totalmente opcional, conforme indicado pelo [ ] que inclui toda a
definição do parâmetro. Mas se você quiser usá-lo, você deve especificar o nome do parâmetro
porque o nome em si não está em [ ].
Finalmente, você verá alguns parâmetros, como –DependentServices, que não possuem tipo
de objeto para um valor. Eles são chamados de parâmetros Switch, que são muito semelhantes
a True/False. Se você especificar o parâmetro, o PowerShell tratará o parâmetro como True e fará
o que for projetado para fazer.
9
Machine Translated by Google
Figura 5
Isso exibirá informações sobre cada parâmetro, notas e exemplos (consulte as Figuras 5 e 6).
Figura 6
Se você quiser apenas ver exemplos, você pode executar um comando de ajuda como este:
Se você deseja apenas detalhes sobre um parâmetro específico, pode usar um comando como o
seguinte, que também suporta curingas:
10
Machine Translated by Google
-RequiredServices [<SwitchParameter>]
Requeridos? falso
Posição? nomeado
Essa é uma ótima maneira de ver se o parâmetro aceita curingas, se é posicional ou se você
precisa especificar o nome do parâmetro.
On-line
Se você estiver em dúvida se possui a ajuda mais atualizada, poderá acessar vários
comandos on-line.
Se o comando tiver um link online, seu navegador abrirá a versão online da documentação do
comando (veja a Figura 7). No caso da Microsoft, a ajuda geralmente é atualizada online antes
de ser empacotada para download.
Figura 7
11
Machine Translated by Google
Sobre tópicos
Figura 8
Depois de saber o que deseja, peça ao PowerShell para exibi-lo (consulte a Figura 9).
Figura 9
Terminologia
Em seguida, vamos garantir que você entenda os diferentes termos do PowerShell que
provavelmente encontrará.
Cmdlet
Esse termo, pronunciado “command-let”, é a unidade central de execução do PowerShell.
Esses são comandos compilados escritos em uma linguagem .NET Framework. Cmdlets são
pequenos e de propósito único. Os nomes de cmdlet seguem uma convenção de nomenclatura
Verbo-Substantivo padrão. O verbo é de uma lista de verbos .NET padrão, como Set, Remove ou
Get. O Substantivo é uma versão singular da “coisa” com a qual você deseja trabalhar, como Serviço,
Processo ou Log de Eventos. Assim, você provavelmente pode fazer um bom palpite sobre qual
comando você usaria para parar um processo.
Parâmetro
O comportamento do cmdlet pode ser personalizado pelo uso de Parameters. A sintaxe ao usar um
parâmetro é um traço, seguido imediatamente pelo nome do parâmetro, um espaço e, finalmente, o
valor. Se o valor puder conter várias entradas, você geralmente as separa com vírgulas. Como
expliquei na seção de ajuda de leitura, alguns parâmetros são posicionais, então tudo que você
precisa fazer é especificar o valor. Para outros parâmetros, você só precisa digitar o suficiente do
nome do parâmetro para que o PowerShell saiba a qual parâmetro você está se referindo.
Como Get-Service não tem outro parâmetro que comece com 'C', ele sabe que você quer dizer –
Computername. Essa prática é perfeitamente aceitável ao executar comandos interativos. Mas
quando você começar a criar scripts, use nomes de parâmetros completos.
Você só precisa digitá-lo uma vez e isso tornará seu script mais fácil de entender.
13
Machine Translated by Google
Alias
Um alias é um nome de comando alternativo. Um alias pode ser fornecido como um auxílio
de transição. Por exemplo, alguém com experiência em Linux conheceria o comando ps para
listar processos. Esse mesmo comando é um alias para o cmdlet Get-Process. Assim, um novo
usuário pode usar qualquer um destes comandos:
PS C:\> get-process
PS C:\> PS
PS:\> ajuda ps
Muitos aliases são integrados ao PowerShell. Qual comando você acha que pode usar para
obter um alias? Você pode criar seus próprios aliases para qualquer comando, mesmo
comandos que não sejam do PowerShell.
Este comando criou um atalho chamado np. Quando digitado, o Bloco de Notas será iniciado.
Os aliases só existirão enquanto sua sessão do PowerShell estiver aberta. Na próxima
vez que você abrir o PowerShell, terá que redefini-lo. Ou você pode usar um script de perfil
do PowerShell – vou deixar isso para você ler.
Função
Uma função é um bloco modular e reutilizável de código do PowerShell. Ele pode ser escrito
para funcionar como um cmdlet, mas é criado em um script do PowerShell. As funções podem
aceitar parâmetros, interagir com o pipeline e ter aliases. Você provavelmente usará funções
internas do PowerShell sem nem perceber. Eventualmente, você poderá criar suas próprias
funções.
O fato de algo ser uma função e não um cmdlet é realmente irrelevante. Mas se você estiver
curioso sobre quais funções estão atualmente carregadas em sua sessão do PowerShell, execute
este comando:
14
Machine Translated by Google
Variável
Uma variável é um tipo especial de objeto que é um espaço reservado para outra coisa.
A variável em si realmente não tem significado até que você atribua um valor a ela.
PS C:\> $a = 10
O nome da variável é 'a', mas é prefixado com um símbolo $ quando você deseja acessá-la.
PS C:\> $a * 2
20
exceções, especialmente quando a variável contém um único objeto. No entanto, como iniciante
no PowerShell, você deve presumir que as variáveis não são atualizadas. O sistema de ajuda tem
mais detalhes:
Módulo
Um módulo é um pacote de comandos do PowerShell. Muitos módulos estão vinculados a
produtos ou recursos do Windows. Os módulos podem ser definidos em arquivos binários, mas
geralmente nada mais são do que uma coleção de scripts e funções do PowerShell. Você
eventualmente aprenderá a desenvolver seus próprios módulos. Para ver quais módulos estão
instalados em seu computador, use o cmdlet Get-Module.
PS C:\> get-module
A Figura 10 mostra uma nova sessão do PowerShell sem script de perfil. Este é o único módulo
carregado automaticamente.
15
Machine Translated by Google
Figura 10
Conforme você executa comandos de módulos, o próprio módulo será carregado automaticamente.
Por exemplo, se você tiver o módulo Hyper-V instalado, tudo o que você precisa fazer é executar
um comando do módulo.
Figura 11
Para obter uma lista de todos os módulos disponíveis, execute este comando:
Se desejar, você pode importar o módulo sem precisar executar nenhum de seus comandos.
Depois de carregado, você pode usar o cmdlet Get-Command para listar os comandos
disponíveis no módulo (consulte a Figura 12).
Você também pode usar um curinga com o nome do módulo se não souber o nome completo ou
não quiser digitá-lo.
16
Machine Translated by Google
Figura 12
Snapin
Um snapin, geralmente chamado de PSSnapin, é outra maneira de adicionar novos
comandos à sua sessão do PowerShell. Snapins são compilados e devem ser instalados em
um computador antes de serem usados. Nos primeiros anos do PowerShell, essa era a
principal maneira de empacotar comandos, mas agora a maioria das coisas é enviada como
módulos. Ao contrário de um módulo, você deve adicionar o snap-in à sua sessão antes de poder
usar qualquer um dos comandos. O PowerShell carregará automaticamente o snap-in como faz um
módulo (consulte a Figura 13).
PS C:\> get-pssnapin
Figura 13
Get-PSSnapin mostra apenas snapins carregados no momento. Você pode ter outros snapins
registrados e esperando para serem carregados (veja a Figura 14).
17
Machine Translated by Google
Figura 14
Agora você pode usar Get-Command para visualizar os comandos snap-in (consulte a Figura 15).
Figura 15
Você pode economizar digitação usando curingas. Você notará que usei o parâmetro –Module
mesmo que os comandos da Veeam sejam empacotados como um PSSnapin. Get-Command é
inteligente o suficiente para saber o que você quer dizer. Nessa situação, você pode usar –Module
ou –PSSnapin. Pessoalmente, prefiro aprender e usar uma maneira de realizar algo, então
sempre uso –Module.
18
Machine Translated by Google
Fornecedor
Talvez um dos termos do PowerShell mais incompreendidos no provedor, que também é
referenciado como psprovider. Um provedor é um software que expõe dados em
armazenamento especializado. O provedor é responsável por traduzir um cmdlet em algo que o
sistema de armazenamento subjacente entenda. Pronto para uso, o PowerShell inclui provedores
para o sistema de arquivos, o registro, o repositório de certificados, variáveis ambientais, bem
como alguns recursos especiais somente do PowerShell.
Você pode usar Get-PSProvider para exibir os provedores disponíveis.
PS C:\> get-psprovider
Muitos desses PSDrives são criados automaticamente quando você inicia o PowerShell.
Você pode exibi-los com o cmdlet Get-PSDrive.
19
Machine Translated by Google
Figura 16
Como você pode ver na Figura 16, você deve obter PSDrives para todas as suas
unidades normais, como C e D, bem como as especializadas, como HKLM. O melhor é
que, na maioria das vezes, você pode usar os mesmos comandos para navegar por todos eles.
Figura 17
Observe que Get-PSDrive mostra os nomes das unidades sem os dois pontos (:), embora
você precise usar os dois pontos ao navegar na unidade como faço na Figura 17. O nome
do PSDrive é HKLM, mas ao usá-lo eu uso HKLM:. Você pode até criar novos mapeamentos
PSDrive e não está limitado a letras únicas (veja a Figura 18).
20
Machine Translated by Google
Figura 18
Este PSDrive durará enquanto minha sessão do PowerShell estiver em execução. Se eu sempre
quiser esse mapeamento de unidade, colocaria a expressão New-PSDrive no meu script de perfil
do PowerShell.
O paradigma do PowerShell
Então, o que isso tudo significa? Se você tiver experiência em VBScript ou script em lote,
muitas partes do PowerShell parecerão familiares, embora com termos diferentes. Aqueles
de vocês que vêm do mundo Linux ou Unix também podem se sentir um pouco confortáveis
em um prompt do PowerShell. Mas é fundamental que você entenda o paradigma do
PowerShell. Se você tentar forçar o PowerShell em um molde preconcebido, poderá ficar
frustrado e confuso e, por fim, poderá ignorar o PowerShell – e isso seria uma pena.
21
Machine Translated by Google
Objetos
No PowerShell, tudo é um objeto. Cmdlets e funções são projetados para trabalhar e emitir
objetos. Claro que você vê o texto na tela, mas não se deixe enganar. Enquanto o comando
do PowerShell está em execução, os objetos estão acontecendo. Um objeto é simplesmente
uma representação de software de algo que você está gerenciando no PowerShell, como
serviço, máquina virtual ou conta de usuário do Active Directory.
O objeto tem propriedades que o descrevem. Por exemplo, um serviço tem propriedades
como Nome, nome de exibição e status. Algumas dessas propriedades podem ser modificadas,
enquanto outras são somente leitura. Os objetos também podem ter métodos, que são ações
que o objeto pode fazer ou que você pode fazer no objeto. Novamente, com serviços, você
pode interromper ou iniciar o serviço. E você pode desligar uma máquina virtual ou desabilitar
uma conta de usuário.
Isso não significa que você precisa ser um desenvolvedor .NET para usar o PowerShell.
O ponto principal dos cmdlets é que eles fazem o trabalho para você. Você não deve se
preocupar com conceitos de desenvolvedor, como instanciar objetos e invocar métodos.
Muitas das principais tarefas de gerenciamento terão cmdlets que fazem tudo isso para você.
Get-Membro
Mas ainda assim, muitas vezes será útil descobrir informações sobre um objeto. Para
fazer isso, use o cmdlet Get-Member. A maneira mais fácil de usar isso é canalizar um
comando para ele.
Figura 19
22
Machine Translated by Google
Na Figura 19 o TypeName é o tipo de objeto. Com base no que você vê, Get Service
usa um objeto com um tipo de System.ServiceProcess.ServiceController.
Você pode ver seus métodos e propriedades. O PowerShell pode adicionar mais métodos
e propriedades, incluindo propriedades de alias, para facilitar o uso do objeto. Se você
quiser descobrir os métodos e propriedades nativos do objeto, pesquise o nome do tipo
que provavelmente o levará a uma página do MSDN.
É importante que você saiba como usar Get-Member, que tem um alias de gm, porque
muitas vezes quando você executa um comando, o PowerShell tem uma configuração
de exibição padrão para qualquer tipo de objeto. Não presuma que o que você vê na
saída são as únicas propriedades, ou mesmo os nomes das propriedades. Use Get
Member para descobrir os nomes reais das propriedades, pois assim que souber o nome
da propriedade, você poderá usá-lo—vou demonstrar isso daqui a pouco.
O pipeline do PowerShell
O conceito de pipeline não é exclusivo do PowerShell. Existe em outras linguagens de
shell. Como outras linguagens, a barra vertical ( | ) é o caractere do pipeline.
No PowerShell, isso significa que você passa a saída de um comando como entrada
para o próximo comando, supondo que o segundo comando saiba o que fazer com os
objetos recebidos. Você pode continuar a passar objetos pelo pipeline, reconhecendo
que os objetos podem até mudar. No final do pipeline, o PowerShell exibirá o que resta.
Você usará frequentemente expressões como esta:
Figura 20
23
Machine Translated by Google
Figura 21
Get-Service gravará objetos no pipeline, alguns com uma propriedade de status Running
e outros com status Stopped. Eles são canalizados para o cmdlet Where Object, que
avalia a propriedade de status. Se a propriedade for igual a running, o objeto permanece
no pipeline, caso contrário é descartado.
Figura 22
Por outro lado, um VBScript comparável teria pelo menos 20 linhas de código e não
seria formatado tão bem. Sem mencionar que o script provavelmente pareceria
complexo para alguém não familiarizado com o VBScript. No PowerShell, a expressão
é muito mais clara, mesmo para quem nunca viu o PowerShell antes.
24
Machine Translated by Google
Dito isso, não pense que tudo o que você faz no PowerShell precisa ser construído como
uma gigantesca expressão em pipeline. Pode ser conveniente digitar algo assim como uma
longa expressão em pipeline:
28 .xml 80144355
2 .msi 6817280
4 .exe 1603382
17 .ps1 932675
9 .zip 712210
Em poucas palavras, este comando de uma linha é usado para exibir as cinco
principais extensões de arquivo em C:\work, formatadas como uma boa tabela. Mas isso é
muito para digitar e, como iniciante, você provavelmente cometerá um erro. Em vez disso, pode
ser mais fácil quebrar essa gigantesca expressão em pipeline em partes menores usando
variáveis.
Por fim, ordene os resultados, selecione os cinco primeiros objetos e formate como uma tabela:
25
Machine Translated by Google
Você ainda está usando o pipeline em cada etapa. Mas agora você pode verificar se cada
etapa funciona e se basear em cada etapa. Deixe-me também enfatizar que você não está
realmente roteirizando aqui. Você está trabalhando com objetos de arquivo interativamente em
um prompt do PowerShell. E embora você possa não entender completamente cada parte dos
comandos, aposto que você tem uma boa ideia sobre o que estou fazendo em cada etapa,
mesmo que eu esteja aproveitando aliases, parâmetros posicionais e atalhos de parâmetros.
Um exemplo da Veeam
Tudo o que discuti até agora se aplica a tudo no PowerShell, não apenas à experiência pronta
para uso. Os cmdlets que usei no exemplo acima, como Measure-Object e Select-Object, se
comportam da mesma forma se você estiver trabalhando com um objeto de arquivo ou qualquer
outra coisa. Como demonstração, vamos ver o snap-in Veeam PowerShell do Veeam Backup &
Replication™.
Anteriormente, mostrei como listar os comandos no snap-in. Neste exemplo, quero usar o
PowerShell para obter algumas informações sobre meus backups. Descubro que há um cmdlet
chamado Get-VBRBackup, então peço ajuda ao PowerShell (consulte a Figura 23).
Estou usando o recurso de ajuda do PowerShell v4 para exibir a ajuda em uma janela pop-up.
Figura 23
26
Machine Translated by Google
Rolando para baixo para exemplos, posso ver como usar este comando. Quero obter
todos os backups e, como quero percorrer o processo, salvarei os resultados do comando
em uma variável:
A variável, vback, é um array de algum tipo de objeto e posso dizer que existem 11
objetos.
PS C:\> $vbackup.count
Contagem: 11
Média :
Soma :
Máximo :
Mínimo :
Propriedade :
Como não sei nada sobre esse tipo de objeto, vou canalizar os objetos de backup
para Get-Member e examinar apenas suas propriedades (consulte a Figura 24).
Figura 24
27
Machine Translated by Google
Para ver o que está na variável, posso simplesmente digitar o nome da variável e o
PowerShell gravará o conteúdo no pipeline (consulte a Figura 25).
PS C:\> $vback
Figura 25
Nessa instância específica, o PowerShell não tem regras para esse tipo de objeto, portanto,
exibe todas as propriedades. Isso é útil porque agora posso usar Select-Object e selecionar
apenas as propriedades nas quais estou interessado (consulte a Figura 26).
Figura 26
Isso é um bom começo. Por enquanto, vou ignorar o fato de que tenho um trabalho de backup
sem tempo de criação. Minha infraestrutura da Veeam foi montada e desmontada várias vezes
no meu laboratório, então provavelmente introduzi um artefato em algum lugar no processo. Deixe-
me executar novamente este comando e salvar os resultados em uma variável.
28
Machine Translated by Google
Agora eu quero ajustar isso. Talvez eu queira ver apenas os trabalhos com mais de 90 dias em
ordem decrescente (consulte a Figura 27).
Figura 27
Talvez meu gerente precise ver isso. Posso facilmente enviar os resultados para um arquivo de texto.
Como tenho um ambiente misto, pode ser útil agrupar os trabalhos com base em seu
tipo (consulte a Figura 28).
Figura 28
29
Machine Translated by Google
Isso é um pouco complicado, mas estou usando ForEach-Object para obter um tamanho de diretório
para cada objeto de backup no grupo, totalizando os tamanhos e dividindo por 1 GB para obter um
valor em GB (consulte a Figura 29).
Figura 29
Outra opção é criar um relatório melhor formatado, agrupando os resultados por tipo de trabalho
(veja a Figura 30).
Admito que isso pode parecer um pouco assustador, mas com o tempo e a experiência, isso se
tornará uma segunda natureza.
Figura 30
30
Machine Translated by Google
Um ponto importante sobre o uso dos comandos Format é que eles devem ser a última
etapa em sua expressão do PowerShell. Você não pode fazer nada depois de um comando
de formato além de canalizá-lo, usando Out-File ou Out-Printer. Todos os exemplos que
mostrei a você não são especialmente difíceis por si só. Você deve olhar para a ajuda completa
e exemplos para cada comando que usei.
Próximos passos
Como mencionei no início, é impossível aprender o PowerShell em 30 páginas. A etapa
mais importante é aprender a usar o sistema de ajuda no PowerShell. Depois de saber
disso, você pode aprender sobre todos os cmdlets e conceitos que discuti e, com o tempo,
até o exemplo mais complicado será fácil de entender.
Aprender o PowerShell é como qualquer outro idioma. Ele tem sua própria sintaxe, linguagem,
gramática e convenções. Leva tempo e prática para se tornar fluente. Para isso, você precisa
usar o PowerShell todos os dias, mesmo que simplesmente leia a ajuda de um cmdlet aleatório
e um tópico “sobre”. Quanto mais você usar o PowerShell para resolver suas tarefas diárias de
gerenciamento, mais proficiente você se tornará e seu aprendizado será acelerado. No entanto,
tenha cuidado. Não tente eliminar um script ou uma linha do PowerShell incrivelmente complexo
em seu primeiro dia. Comece simples.
Eu não posso enfatizar isso o suficiente.
Para esse fim, você provavelmente desejará ferramentas e recursos adicionais para
aprender o PowerShell.
Por fim, talvez o melhor recurso do PowerShell para você seja o PowerShell.org. Este site é
administrado por uma organização sem fins lucrativos orientada para a comunidade. A
organização administra os Jogos de Script e o PowerShell Summit. Neste site, você também
encontrará um conjunto extremamente ativo de fóruns, eBooks gratuitos e todos os recursos
do PowerShell necessários para ter sucesso. Mas uma vez que você tenha alcançado algum
grau de fluência, acho que você vai se perguntar por que esperou tanto tempo para aprender e
usar o PowerShell.
31
Machine Translated by Google
Sobre o autor
Jeffery Hicks é um MVP da Microsoft no Windows PowerShell,
Microsoft Certified Professional e veterano de TI com
32
Machine Translated by Google
Fundada em 2006, a Veeam tem atualmente 25.000 ProPartners e mais de 115.000 clientes
em todo o mundo. A sede global da Veeam está localizada em Baar, na Suíça, e a empresa
possui escritórios em todo o mundo.
33
Machine Translated by Google