O que é o Windows PowerShell e o que ele come? Parte 1: Recursos Principais

Historicamente, os utilitários de linha de comando nos sistemas Unix são mais desenvolvidos do que no Windows, no entanto, com o advento de uma nova solução, a situação mudou.

O Windows PowerShell permite que os administradores de sistema automatizem a maioria das tarefas de rotina. Com sua ajuda, você pode alterar as configurações, interromper e iniciar serviços, além de executar a manutenção da maioria dos aplicativos instalados. Seria errado perceber a janela azul como outro intérprete de comando. Essa abordagem não reflete a essência das inovações propostas pela Microsoft. Na verdade, as possibilidades do Windows PowerShell são muito maiores: em uma pequena série de artigos, tentaremos descobrir como a solução da Microsoft difere das ferramentas mais familiares.



Características principais 


Obviamente, o Windows PowerShell é principalmente um shell de comando com uma linguagem de script, originalmente criada com base no .NET Framework e, mais tarde, no .NET Core. Ao contrário dos shells que aceitam e retornam dados textuais, o Windows PowerShell trabalha com classes .NET que possuem propriedades e métodos. O PowerShell permite executar comandos comuns e também fornece acesso a objetos COM, WMI e ADSI. Ele usa vários repositórios, como o sistema de arquivos ou o registro do Windows, para acessar aos quais os chamados fornecedores (fornecedores). Vale a pena notar a capacidade de incorporar componentes executáveis ​​do PowerShell em outros aplicativos para implementar várias operações, incluindo através da interface gráfica. O inverso também é verdadeiro: muitos aplicativos Windows fornecem acesso a suas interfaces de gerenciamento por meio do PowerShell. 

O Windows PowerShell permite:

  • Alterar as configurações do sistema operacional;
  • Gerenciar serviços e processos;
  • Configurar funções e componentes de servidor;
  • Instalar software
  • Gerenciar software instalado através de interfaces especiais;
  • Incorporar componentes executáveis ​​em programas de terceiros;
  • Crie scripts para automatizar tarefas de administração;
  • Trabalhe com o sistema de arquivos, registro do Windows, armazenamento de certificados, etc.

Shell e ambiente de desenvolvimento


Há o Windows PowerShell de duas maneiras: além do emulador de console com um shell de comando, há um ambiente de script integrado (ISE). Para acessar a interface da linha de comandos, basta selecionar o atalho apropriado no menu Windows ou executar o powershell.exe no menu Executar. Uma janela azul aparece na tela, com capacidades significativamente diferentes do cmd.exe antediluviano. Há preenchimento automático e outros recursos familiares aos usuários de shells de comando para sistemas Unix.



Para trabalhar com o shell, você precisa se lembrar de algumas combinações de teclas:

  • As setas para cima e para baixo percorrem o histórico para repetir comandos digitados anteriormente;
  • A seta à direita no final da linha recicla o comando anterior, caractere por caractere;
  • Ctrl + Home exclui o texto digitado da posição do cursor até o início da linha;
  • Ctrl + End exclui o texto do cursor até o final da linha.

F7 exibe uma janela com os comandos digitados e permite selecionar um deles. A seleção do mouse, copiar e colar, posicionamento do cursor, exclusão e backspace também funcionam no console - tudo como desejamos.


O Windows PowerShell ISE é um ambiente de desenvolvimento completo que oferece suporte a guias e realce de sintaxe com um editor de código, designer de comandos, depurador interno e outras alegrias da programação. Se você escrever um hífen no editor do ambiente de desenvolvimento após o nome do comando, obterá todos os parâmetros disponíveis com um tipo na lista suspensa. Você pode iniciar o PowerShell ISE por meio de um atalho no menu do sistema ou usando o arquivo executável powershell_ise.exe.


Cmdlets 


No Windows PowerShell, o chamado cmdlets Essas são classes .NET especializadas que contêm funcionalidades diversas. Eles são nomeados de acordo com o princípio “Objeto de Ação” (ou “Substantivo-Verbo, se você preferir”), e uma conjunção hifenizada se assemelha ao predicado e ao sujeito nas frases das línguas naturais. Por exemplo, Get-Help significa literalmente "Get-Help" ou, no contexto do PowerShell: "Show-Help". Na verdade, esse é um análogo do comando man nos sistemas Unix e os manuais no PowerShell precisam ser solicitados dessa maneira, e não chamando os cmdlets com a tecla --help ou /?

Além de Get, outros verbos (e não apenas verbos, estritamente falando) são usados ​​em cmdlets para indicar ações. Na lista abaixo, damos alguns exemplos:

Add- add;
Clear- limpar \ limpo;
Enable- habilitar;
Disable- desligar;
New- crio;
Remove- excluir;
Set- pergunte;
Start- corre;
Stop- Pare;
Export- exportação;
Import- importar.

Existem sistema, usuário e cmdlets opcionais: como resultado da execução, todos retornam um objeto ou uma matriz de objetos. Eles não diferenciam maiúsculas de minúsculas, ou seja, do ponto de vista do interpretador de comandos, não há diferença entre Get-Help e get-help. O caractere ';' é usado para separação, mas é obrigatório configurá-lo apenas se vários cmdlets forem executados na mesma linha. 

Os cmdlets do Windows PowerShell são agrupados em módulos (NetTCPIP, Hyper-V etc.) e o cmdlet Get-Command existe para pesquisar por objeto e ação. Você pode mostrar ajuda assim:

Get-Help Get-Command



Por padrão, o comando exibe uma breve ajuda, mas se necessário, os parâmetros (argumentos) são passados ​​para os cmdlets. Utilizando-os, por exemplo, você pode obter ajuda detalhada (parâmetro detalhado) ou completa (parâmetro completo), além de exibir exemplos (parâmetro -Exemplos):

Get-Help Get-Command -Examples

A ajuda no Windows PowerShell é atualizada com o cmdlet Update-Help. Se a linha de comando for muito longa, os argumentos do cmdlet podem ser transferidos para o próximo, escrevendo o caractere de serviço `` '' e pressionando Enter - basta terminar de escrever o comando em uma linha e continuar na outra.

Abaixo estão alguns exemplos de cmdlets comuns: 

Get-Process- mostram processos em execução no sistema;
Get-Service- mostrar serviços e seu status;
Get-Content- exibe o conteúdo do arquivo.

Para cmdlets e utilitários externos usados ​​com freqüência no Windows PowerShell, há breves sinônimos - aliases (do alias em inglês). Por exemplo, dir é um alias de Get-ChildItem. A lista de sinônimos contém análogos de comandos dos sistemas Unix (ls, ps, etc.), e o cmdlet Get-Help é chamado pelo comando help. Uma lista completa de sinônimos pode ser exibida usando o cmdlet Get-Alias:


Scripts, funções, módulos e idioma do PowerShell


Os scripts do Windows PowerShell são armazenados como arquivos de texto sem formatação com a extensão .ps1. Você não pode iniciá-los com um clique duplo: clique com o botão direito do mouse no menu de contexto e selecione o item "Executar no PowerShell". No console, você precisará especificar o caminho completo para o script ou ir para o diretório apropriado e escrever o nome do arquivo. A execução de scripts também é limitada pela política do sistema e, para verificar as configurações atuais, você pode usar o cmdlet Get-ExecutionPolicy, que fornecerá um dos seguintes valores:

Restricted- a execução de scripts é proibida (por padrão);
AllSigned- somente o lançamento de scripts assinados por um desenvolvedor confiável é permitido;
RemoteSigned- permissão para executar scripts assinados e personalizados;
Unrestricted- permitido executar qualquer script.

O administrador tem duas opções. O mais seguro envolve a assinatura de scripts, mas essa é uma feitiçaria bastante séria - trataremos disso nos artigos a seguir. Agora vamos seguir o caminho de menor resistência e mudar a política:

Set-ExecutionPolicy RemoteSigned


Para fazer isso, o PowerShell precisará ser executado como administrador, embora, usando um parâmetro especial, você possa alterar a política do usuário atual.

Os scripts são escritos em uma linguagem de programação orientada a objetos, cujos comandos são nomeados de acordo com o mesmo princípio dos cmdlets discutidos anteriormente: "Action-Object" ("Verb-Noun"). Seu principal objetivo é a automação de tarefas de administração, mas é uma linguagem interpretada completa que possui todas as construções necessárias: ramificação condicional, loops, variáveis, matrizes, objetos, tratamento de erros, etc. Qualquer editor de texto é adequado para escrever scripts, mas é mais conveniente iniciar o Windows PowerShell ISE.

Você pode passar parâmetros para o script, torná-los obrigatórios e também definir valores padrão. Além disso, o Windows PowerShell permite criar funções e chamá-las da mesma maneira que os cmdlets: para isso, você usa a construção Function e chaves. Um script com funções é chamado de módulo e possui a extensão .psm1. Os módulos devem ser armazenados em diretórios definidos nas variáveis ​​de ambiente do PowerShell. Você pode visualizá-los usando o seguinte comando:

Get-ChildItem Env:\PSModulePath | Format-Table -AutoSize

Transportadores


No último exemplo, usamos um design familiar aos usuários de shells para sistemas Unix. No Windows PowerShell, a barra vertical também permite transferir a saída de um comando para a entrada de outro, mas há uma diferença significativa na implementação do pipeline: não se trata de um conjunto de caracteres ou de algum texto. Os cmdlets internos ou as funções definidas pelo usuário retornam objetos ou matrizes de objetos e também podem recebê-los na entrada. Como o shell Bourne e seus muitos seguidores, o PowerShell simplifica tarefas complexas com um pipeline.

O exemplo mais simples de um pipeline é assim:

Get-Service | Sort-Object -property Status


Primeiro, o cmdlet Get-Service é executado e, em seguida, todos os serviços que recebe são passados ​​para o cmdlet Sort-Object para classificação pela propriedade Status. O argumento para o qual o resultado da seção anterior do pipeline é passado depende de seu tipo - geralmente esse é um InputObject. Este problema será discutido em mais detalhes no artigo dedicado à linguagem de programação do PowerShell. 

Se desejar, você pode continuar a cadeia e passar o resultado do objeto de classificação para outro cmdlet (eles serão executados da esquerda para a direita). A propósito, o design familiar do Windows para saída de paginação também está disponível para todos os Unixoids: 

Get-Service | Sort-Object -property Status | more

Executando tarefas em segundo plano 


Muitas vezes, você precisa executar um determinado comando em segundo plano para não esperar o resultado de sua execução em uma sessão de shell. No Windows PowerShell, existem vários cmdlets para este caso:

Start-Job- iniciando uma tarefa em segundo plano;
Stop-Job- interrompa a tarefa em segundo plano;
Get-Job- Veja uma lista de tarefas em segundo plano;
Receive-Job- veja o resultado da tarefa em segundo plano;
Remove-Job- remoção da tarefa em segundo plano;
Wait-Job- Transfira a tarefa em segundo plano de volta para o console.

Para iniciar uma tarefa em segundo plano, usamos o cmdlet Start-Job e indicamos colchetes um comando ou um conjunto de comandos:

Start-Job {Get-Service}


As tarefas em segundo plano no Windows PowerShell podem ser manipuladas sabendo seus nomes. Primeiro, aprenda como exibi-los:

Get-Job


Agora, mostramos o resultado do trabalho1:

Receive-Job Job1 | more


É bem simples.

Execução de comando remoto


O Windows PowerShell permite executar comandos e scripts não apenas no local, mas também no computador remoto e até em um grupo inteiro de máquinas. Existem várias maneiras de fazer isso:

  • Muitos cmdlets têm um parâmetro -ComputerName, mas dessa forma falhará, por exemplo, na criação de um pipeline;
  • O cmdlet Enter-PSSessionpermite criar uma sessão interativa em uma máquina remota; 
  • Usando o cmdlet, Invoke-Commandvocê pode executar comandos ou scripts em um ou mais computadores remotos.

Versões do PowerShell


Desde seu primeiro lançamento em 2006, o PowerShell mudou bastante. A ferramenta está disponível para muitos sistemas executando em diferentes plataformas de hardware (x86, x86-64, Itanium, ARM): Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU / Linux e OS X. A versão mais recente 6.2 foi lançada em 10 de janeiro de 2018. É mais provável que os scripts escritos para versões anteriores funcionem em versões posteriores, mas pode haver problemas com a portabilidade reversa, porque ao longo dos anos de desenvolvimento, um grande número de novos cmdlets apareceu no PowerShell. Você pode descobrir a versão do shell instalado no computador usando a propriedade PSVersion da variável interna $ PSVersionTable:

$PSVersionTable.PSVersion


Você também pode usar o cmdlet:

Get-Variable -Name PSVersionTable –ValueOnly


O mesmo é feito com o cmdlet Get-Host. De fato, existem muitas opções, mas para usá-las, você precisa aprender a linguagem de programação do PowerShell, que é o que faremos no próximo artigo

Sumário 


A Microsoft conseguiu criar um shell de comando verdadeiramente poderoso com um ambiente integrado conveniente para o desenvolvimento de scripts. Ele difere dos meios familiares para nós no mundo Unix pela profunda integração com os sistemas operacionais Windows, além de software para eles e da plataforma .NET Core. O PowerShell pode ser chamado de shell orientado a objetos, pois os cmdlets e as funções definidas pelo usuário retornam objetos ou matrizes de objetos e podem recebê-los na entrada. Pensamos que todos os administradores de servidores Windows devem possuir esta ferramenta: já passou o tempo em que poderiam ficar sem a linha de comando. Um shell de console avançado é especialmente necessário em nosso VPS de baixo custo executando o Windows Server Core , mas isso é outra história.

2: Windows PowerShell
3: ,
4: ,

Source: https://habr.com/ru/post/undefined/


All Articles