PowerShell - PowerShell

PowerShell
PowerShell Core 6.0 icon.png
PowerShell Core 7.1.5 com Windows Terminal.png
Captura de tela de uma sessão do PowerShell Core no Terminal do Windows
Paradigma Imperativo , pipeline , orientado a objetos , funcional e reflexivo
Projetado por Jeffrey Snover , Bruce Payette, James Truher (et al.)
Desenvolvedor Microsoft
Apareceu pela primeira vez 14 de novembro de 2006 ; 14 anos atras ( 2006-11-14 )
Versão estável
7.1.5 / 14 de outubro de 2021 ; 4 dias atrás ( 2021-10-14 )
Versão de visualização
v7.2.0-preview.10 / 28 de setembro de 2021 ; 20 dias atrás ( 2021-09-28 )
Disciplina de digitação Forte , seguro , implícito e dinâmico
Linguagem de implementação C #
Plataforma .NET Framework , .NET Core
SO
Licença Licença MIT (mas o componente do Windows permanece proprietário )
Extensões de nome de arquivo
Local na rede Internet microsoft .com / powershell
Influenciado por
Python , Ksh , Perl , C # , CL , DCL , SQL , Tcl , Tk , Chef , Puppet

PowerShell é um programa de automação de tarefas e gerenciamento de configuração da Microsoft , que consiste em um shell de linha de comando e a linguagem de script associada . Inicialmente apenas um componente do Windows, conhecido como Windows PowerShell , tornou -se open source e multiplataforma em 18 de agosto de 2016 com a introdução do PowerShell Core . O primeiro é baseado no .NET Framework , o último no .NET Core .

No PowerShell, as tarefas administrativas geralmente são executadas por cmdlets (pronuncia -se command-lets ), que são classes .NET especializadas que implementam uma operação específica. Eles funcionam acessando dados em diferentes armazenamentos de dados, como o sistema de arquivos ou registro , que são disponibilizados para o PowerShell por meio de provedores . Os desenvolvedores de terceiros podem adicionar cmdlets e provedores ao PowerShell. Os cmdlets podem ser usados ​​por scripts, que por sua vez podem ser empacotados em módulos.

O PowerShell fornece acesso a COM e WMI , permitindo que os administradores executem tarefas administrativas em sistemas Windows locais e remotos, bem como WS-Management e CIM permitindo o gerenciamento de sistemas Linux remotos e dispositivos de rede. O PowerShell também fornece uma API de hospedagem com a qual o tempo de execução do PowerShell pode ser incorporado em outros aplicativos. Esses aplicativos podem então usar a funcionalidade do PowerShell para implementar certas operações, incluindo aquelas expostas por meio da interface gráfica . Esse recurso foi usado pelo Microsoft Exchange Server 2007 para expor sua funcionalidade de gerenciamento como cmdlets e provedores do PowerShell e implementar as ferramentas de gerenciamento gráfico como hosts do PowerShell que invocam os cmdlets necessários. Outros aplicativos da Microsoft, incluindo o Microsoft SQL Server 2008, também expõem sua interface de gerenciamento por meio de cmdlets do PowerShell.

O PowerShell inclui sua própria ajuda extensa baseada em console (semelhante às páginas de manual em shells Unix ) acessível por meio do Get-Helpcmdlet. O conteúdo atualizado da ajuda local pode ser recuperado da Internet por meio do Update-Helpcmdlet. Como alternativa, a ajuda da web pode ser adquirida caso a caso por meio do -onlineswitch para Get-Help.

Fundo

Fundo

Cada versão do Microsoft Windows para computadores pessoais inclui um interpretador de linha de comando (CLI) para gerenciar o sistema operacional. Seu predecessor, o MS-DOS , dependia exclusivamente de um CLI. Eles estão COMMAND.COMno MS-DOS e no Windows 9x e cmd.exena família de sistemas operacionais Windows NT . Ambos suportam alguns comandos internos básicos. Para outros propósitos, um aplicativo de console separado deve ser escrito. Eles também incluem uma linguagem de script básica ( arquivos em lote ), que pode ser usada para automatizar várias tarefas. No entanto, eles não podem ser usados ​​para automatizar todas as facetas da funcionalidade da interface gráfica do usuário (GUI), em parte porque os equivalentes de linha de comando das operações são limitados e a linguagem de script é elementar. No Windows Server 2003 , a situação melhorou, mas o suporte a scripts ainda era insatisfatório.

A Microsoft tentou solucionar algumas dessas deficiências introduzindo o Windows Script Host em 1998 com o Windows 98 e seu host baseado em linha de comando cscript.exe,. Ele se integra ao mecanismo Active Script e permite que os scripts sejam escritos em linguagens compatíveis, como JScript e VBScript , aproveitando as APIs expostas pelos aplicativos por meio do modelo de objeto de componente ( COM ). No entanto, ele tem suas próprias deficiências: sua documentação não é muito acessível e ele rapidamente ganhou a reputação de vetor de vulnerabilidade do sistema depois que vários vírus de computador de alto nível exploraram as fraquezas em suas disposições de segurança. Diferentes versões do Windows forneciam vários interpretadores de linha de comando para fins especiais (como netsh e WMIC ) com seus próprios conjuntos de comandos, mas não eram interoperáveis.

Sapo

No final da década de 1990, a Intel procurou a Microsoft pedindo ajuda para tornar o Windows, que rodava em CPUs da Intel, uma plataforma mais apropriada para apoiar o desenvolvimento de futuras CPUs da Intel. Na época, o desenvolvimento de CPU Intel era realizado em computadores Sun Microsystems que rodavam Solaris (uma variante do Unix ) em CPUs de arquitetura RISC . A capacidade de executar muitos scripts de automação KornShell da Intel no Windows foi identificada como um recurso chave. Internamente, a Microsoft começou um esforço para criar uma versão do Windows do Korn Shell, que foi codinome Kermitwiki. A Intel finalmente mudou para uma plataforma de desenvolvimento baseada em Linux que poderia rodar em CPUs Intel, tornando o projeto Kermit redundante. No entanto, com uma equipe totalmente financiada, o gerente de programa da Microsoft, Jeffrey Snover, percebeu que havia uma oportunidade de criar uma solução mais geral para o problema de automação administrativa da Microsoft.


Mônada

Em 2002, a Microsoft começou a desenvolver uma nova abordagem para gerenciamento de linha de comando, incluindo uma CLI chamada Monad (também conhecida como Microsoft Shell ou MSH). As ideias por trás disso foram publicadas em agosto de 2002 em um white paper chamado "Manifesto da Mônada" por seu arquiteto-chefe, Jeffrey Snover . Em uma entrevista de 2017, Snover explica a gênese do PowerShell, dizendo que vinha tentando disponibilizar ferramentas Unix no Windows, o que não funcionou devido a " diferenças arquitetônicas centrais entre o Windows e o Linux ". Especificamente, ele observou que o Linux considera tudo um arquivo de texto ASCII , enquanto o Windows considera tudo uma " API que retorna dados estruturados". Eles eram fundamentalmente incompatíveis, o que o levou a adotar uma abordagem diferente.

O Monad era para ser uma nova CLI extensível com um novo design capaz de automatizar uma variedade de tarefas administrativas centrais. A Microsoft demonstrou o Monad publicamente pela primeira vez na Professional Development Conference em Los Angeles em outubro de 2003. Alguns meses depois, eles abriram o beta privado, que acabou levando a um beta público. A Microsoft publicou o primeiro lançamento beta público do Monad em 17 de junho de 2005 e o Beta 2 em 11 de setembro de 2005 e o Beta 3 em 10 de janeiro de 2006.

PowerShell

Em 25 de abril de 2006, não muito depois do anúncio inicial do Monad, a Microsoft anunciou que o Monad foi renomeado para Windows PowerShell , posicionando-o como uma parte significativa de suas ofertas de tecnologia de gerenciamento. O Release Candidate (RC) 1 do PowerShell foi lançado ao mesmo tempo. Um aspecto significativo da mudança de nome e do RC foi que agora ele era um componente do Windows, em vez de um mero complemento.

O Release Candidate 2 do PowerShell versão 1 foi lançado em 26 de setembro de 2006, com lançamento final para a web em 14 de novembro de 2006. O PowerShell para versões anteriores do Windows foi lançado em 30 de janeiro de 2007. O desenvolvimento do PowerShell v2.0 começou antes do PowerShell v1.0 ser lançado . Durante o desenvolvimento, a Microsoft distribuiu três amostras de tecnologia da comunidade (CTP) . A Microsoft disponibilizou esses lançamentos ao público. A última versão CTP do Windows PowerShell v2.0 foi disponibilizada em dezembro de 2008.

PowerShell para Linux 6.0 Alpha 9 no Ubuntu 14.04 x64

O PowerShell v2.0 foi concluído e lançado para fabricação em agosto de 2009, como parte integrante do Windows 7 e do Windows Server 2008 R2. As versões do PowerShell para Windows XP, Windows Server 2003, Windows Vista e Windows Server 2008 foram lançadas em outubro de 2009 e estão disponíveis para download para plataformas de 32 e 64 bits. Em uma edição de outubro de 2009 da TechNet Magazine , a Microsoft chamou a proficiência com PowerShell de "a habilidade mais importante de um administrador do Windows nos próximos anos".

O Windows 10 distribuiu uma estrutura de teste para PowerShell.

Em 18 de agosto de 2016, a Microsoft anunciou que havia tornado o PowerShell de código aberto e plataforma cruzada com suporte para Windows, macOS , CentOS e Ubuntu . O código-fonte foi publicado no GitHub . A mudança para o código aberto criou uma segunda encarnação do PowerShell chamada "PowerShell Core", que é executado no .NET Core . É diferente do "Windows PowerShell", que é executado no .NET Framework completo . A partir da versão 5.1, o PowerShell Core vem com o Windows Server 2016 Nano Server .

Projeto

Uma tática de design chave para PowerShell era aproveitar o grande número de APIs que já existiam no Windows, Windows Management Instrumentation, .NET Framework e outros softwares. Os cmdlets do PowerShell “envolvem” a funcionalidade existente. A intenção com essa tática é fornecer uma interface amigável e mais consistente entre os administradores e uma ampla gama de funcionalidades subjacentes. Com o PowerShell, um administrador não precisa saber .NET, WMI ou codificação de API de baixo nível e, em vez disso, pode se concentrar em usar os cmdlets expostos pelo PowerShell. Nesse sentido, o PowerShell cria poucas novas funcionalidades, em vez disso se concentra em tornar a funcionalidade existente mais acessível a um público específico.

Gramática

Os desenvolvedores do PowerShell basearam a gramática central da ferramenta no POSIX 1003.2 KornShell .

No entanto, a linguagem do PowerShell também foi influenciada por PHP , Perl e muitas outras linguagens existentes.

Comandos Nomeados

O Windows PowerShell pode executar quatro tipos de comandos nomeados:

  • cmdlets ( programas .NET Framework projetados para interagir com o PowerShell)
  • Scripts do PowerShell (arquivos com sufixo .ps1)
  • Funções do PowerShell
  • Programas executáveis autônomos

Se um comando for um programa executável autônomo, o PowerShell o inicia em um processo separado ; se for um cmdlet, ele é executado no processo do PowerShell. O PowerShell fornece uma interface de linha de comando interativa , onde os comandos podem ser inseridos e sua saída exibida. A interface do usuário oferece preenchimento de guia personalizável . O PowerShell permite a criação de aliases para cmdlets, que o PowerShell traduz textualmente em invocações dos comandos originais. O PowerShell oferece suporte a parâmetros nomeados e posicionais para comandos. Ao executar um cmdlet, o trabalho de vincular o valor do argumento ao parâmetro é feito pelo próprio PowerShell, mas para executáveis ​​externos, os argumentos são analisados ​​pelo executável externo independentemente da interpretação do PowerShell.

Sistema de tipo estendido

O PowerShell Extended Type System ( ETS ) é baseado no sistema de tipo .NET, mas com semântica estendida (por exemplo, propertySets e extensibilidade de terceiros). Por exemplo, ele permite a criação de diferentes visualizações de objetos, expondo apenas um subconjunto dos campos de dados, propriedades e métodos, bem como especificando a formatação personalizada e o comportamento de classificação. Essas visualizações são mapeadas para o objeto original usando arquivos de configuração baseados em XML .

Cmdlets

Os cmdlets são comandos especializados no ambiente do PowerShell que implementam funções específicas. Esses são os comandos nativos na pilha do PowerShell. Os cmdlets seguem um padrão de nomenclatura Verbo - Substantivo , como Get-ChildItem , que o torna um código autodocumentável . Os cmdlets produzem seus resultados como objetos e também podem receber objetos como entrada, tornando-os adequados para uso como destinatários em um pipeline. Se um cmdlet gerar vários objetos, cada objeto da coleção será passado por todo o pipeline antes que o próximo objeto seja processado.

Os cmdlets são classes .NET especializadas , que o tempo de execução do PowerShell instancia e invoca no tempo de execução . Os cmdlets derivam de Cmdletou de PSCmdlet, sendo o último usado quando o cmdlet precisa interagir com o tempo de execução do PowerShell. Estas classes base especificar determinados métodos - BeginProcessing(), ProcessRecord()e EndProcessing()- que substitui implementação do cmdlet para fornecer a funcionalidade. Sempre que um cmdlet é executado, o PowerShell invoca esses métodos em sequência, ProcessRecord()sendo chamado se receber a entrada do pipeline. Se uma coleção de objetos for canalizada, o método será invocado para cada objeto da coleção. A classe que implementa o cmdlet deve ter um atributo .NET - CmdletAttribute- que especifica o verbo e o substantivo que compõem o nome do cmdlet. Os verbos comuns são fornecidos como enum .

Se um cmdlet receber entrada de pipeline ou entrada de parâmetro de linha de comando, deve haver uma propriedade correspondente na classe, com uma implementação de mutador . O PowerShell invoca o modificador com o valor do parâmetro ou entrada do pipeline, que é salvo pela implementação do modificador nas variáveis ​​de classe. Esses valores são então referidos pelos métodos que implementam a funcionalidade. As propriedades que mapeiam para os parâmetros da linha de comando são marcadas por ParameterAttributee são definidas antes da chamada para BeginProcessing(). Aqueles que mapeiam para a entrada do pipeline também são ladeados por ParameterAttribute, mas com o ValueFromPipelineconjunto de parâmetros de atributo.

A implementação dessas classes de cmdlet pode se referir a qualquer API .NET e pode estar em qualquer linguagem .NET . Além disso, o PowerShell disponibiliza certas APIs, como , que é usado para acessar a funcionalidade específica do PowerShell, como gravar objetos resultantes no pipeline. Os cmdlets podem usar APIs de acesso a dados .NET diretamente ou usar a infraestrutura do PowerShell de provedores do PowerShell , que tornam armazenamentos de dados endereçáveis ​​usando caminhos exclusivos . Os armazenamentos de dados são expostos usando letras de unidade e hierarquias dentro deles, endereçadas como diretórios. O Windows PowerShell é fornecido com provedores para o sistema de arquivos , registro , armazenamento de certificados , bem como os namespaces para aliases de comando, variáveis ​​e funções. O Windows PowerShell também inclui vários cmdlets para gerenciar vários sistemas Windows , incluindo o sistema de arquivos , ou usando a Instrumentação de Gerenciamento do Windows para controlar os componentes do Windows . Outros aplicativos podem registrar cmdlets com o PowerShell, permitindo assim gerenciá-los e, se incluírem qualquer armazenamento de dados (como um banco de dados), também podem adicionar provedores específicos. WriteObject()

O número de cmdlets incluídos na instalação básica do PowerShell geralmente aumentou com cada versão:

Versão Cmdlets
Windows PowerShell 1.0 129
Windows PowerShell 2.0 632
Windows PowerShell 3.0 cerca de 1.000
Windows PowerShell 4.0 ?
Windows PowerShell 5.0 cerca de 1.300
Windows PowerShell 5.1 1586
PowerShell Core 6.0 ?
PowerShell Core 6.1 ?
PowerShell Core 6.2 ?
PowerShell 7.0 1507
PowerShell 7.1 ?

Os cmdlets podem ser adicionados ao shell por meio de snap-ins (obsoletos na v2) e módulos; os usuários não estão limitados aos cmdlets incluídos na instalação base do PowerShell.

Pipeline

O PowerShell implementa o conceito de pipeline , que permite canalizar a saída de um cmdlet para outro cmdlet como entrada. Por exemplo, a saída do Get-Processcmdlet pode ser canalizada para Where-Objectfiltrar qualquer processo que tenha menos de 1 MB de memória paginada e, em seguida, para o Sort-Objectcmdlet (por exemplo, para classificar os objetos por contagem de identificadores) e, finalmente, para o Select-Objectcmdlet para selecionar apenas os primeiros dez processos com base na contagem de identificadores.

Assim como acontece com os pipelines Unix , os pipelines do PowerShell podem construir comandos complexos, usando o |operador para conectar estágios. No entanto, o pipeline do PowerShell difere dos pipelines do Unix porque os estágios são executados dentro do tempo de execução do PowerShell, e não como um conjunto de processos coordenados pelo sistema operacional . Além disso, objetos .NET estruturados, em vez de fluxos de bytes , são passados ​​de um estágio para o próximo. Usar objetos e executar estágios dentro do tempo de execução do PowerShell elimina a necessidade de serializar estruturas de dados ou extraí-los analisando explicitamente a saída de texto. Um objeto também pode encapsular certas funções que funcionam nos dados contidos, que se tornam disponíveis ao comando do destinatário para uso. Para o último cmdlet em um pipeline, o PowerShell canaliza automaticamente seu objeto de saída para o Out-Defaultcmdlet, que transforma os objetos em um fluxo de objetos de formato e os renderiza na tela.

Como todos os objetos do PowerShell são objetos .NET, eles compartilham um .ToString()método, que recupera a representação de texto dos dados em um objeto. Além disso, o PowerShell permite que as definições de formatação sejam especificadas, para que a representação de texto dos objetos possa ser personalizada escolhendo quais elementos de dados exibir e de que maneira. No entanto, para manter a compatibilidade com versões anteriores , se um executável externo for usado em um pipeline, ele receberá um fluxo de texto que representa o objeto, em vez de se integrar diretamente com o sistema de tipo do PowerShell.

Scripting

O Windows PowerShell inclui uma linguagem de script digitada dinamicamente que pode implementar operações complexas usando cmdlets imperativamente . Os suportes de linguagem de script variáveis, funções, ramificando ( if-then-else), loops ( while, do, fore foreach), erro estruturado manipulação / exceção e fechamentos / expressões lambda , bem como a integração com .NET. As variáveis ​​em scripts do PowerShell são prefixadas com $. As variáveis ​​podem receber qualquer valor, incluindo a saída de cmdlets. As strings podem ser colocadas entre aspas simples ou duplas: ao usar aspas duplas, as variáveis ​​serão expandidas mesmo se estiverem entre aspas. Fechar o caminho para um arquivo entre colchetes precedido por um cifrão (como em ${C:\foo.txt}) cria uma referência ao conteúdo do arquivo. Se for usado como um valor L , qualquer coisa atribuída a ele será gravado no arquivo. Quando usado como um valor R , o conteúdo do arquivo será lido. Se um objeto for atribuído, ele será serializado antes de ser armazenado.

Os membros do objeto podem ser acessados ​​usando .notação, como na sintaxe C #. O PowerShell fornece variáveis ​​especiais, como $args, que é uma matriz de todos os argumentos de linha de comando passados ​​para uma função da linha de comando e $_, que se refere ao objeto atual no pipeline. O PowerShell também fornece matrizes e matrizes associativas . A linguagem de script PowerShell também avalia expressões aritméticas inseridas na linha de comando imediatamente e analisa abreviações comuns, como GB, MB e KB.

Usando a functionpalavra - chave, o PowerShell fornece a criação de funções. Uma função simples tem a seguinte aparência geral:

function name ([Type]$Param1, [Type]$Param2)
{
  # Instructions
}

No entanto, o PowerShell permite funções avançadas que oferecem suporte a parâmetros nomeados, parâmetros posicionais, parâmetros de alternância e parâmetros dinâmicos.

function Verb-Noun
{
  param (
    # Definition of static parameters
  )
  dynamicparam {
    # Definition of dynamic parameters
  }
  begin {
    # Set of instruction to run at the start of the pipeline
  }
  process {
    # Main instruction sets, ran for each item in the pipeline
  }
  end {
    # Set of instruction to run at the end of the pipeline
  }
}

A função definida é chamada em uma das seguintes formas:

name value1 value2
Verb-Noun -Param1 value1 -Param2 value2

O PowerShell permite que qualquer método .NET estático seja chamado, fornecendo seus namespaces entre colchetes ( []) e, em seguida, usando um par de dois-pontos ( ::) para indicar o método estático. Por exemplo:

[Console]::WriteLine("PowerShell")

Existem dezenas de maneiras de criar objetos no PowerShell. Uma vez criado, pode-se acessar as propriedades e métodos de instância de um objeto usando a .notação.

O PowerShell aceita strings , tanto brutas quanto de escape . Uma string entre aspas simples é uma string bruta, enquanto uma string entre aspas duplas é uma string com escape. O PowerShell trata aspas retas e curvas como equivalentes.

A seguinte lista de caracteres especiais é compatível com PowerShell:

Caracteres especiais do PowerShell
Seqüência Significado
`0 Nulo
`a Alerta
`b Backspace
`e Fuga
`f Feed de formulário
`n Nova linha
`r Retorno de carruagem
`t Aba horizontal
`u {x} Sequência de escape Unicode
`v Guia vertical
-% Trate qualquer personagem deste ponto em diante literalmente

Para tratamento de erros, o PowerShell fornece um mecanismo de tratamento de exceções baseado em .NET . Em caso de erros, Exceptionsão lançados objetos contendo informações sobre o erro ( objeto), que são capturados usando a try ... catchconstrução (embora uma trapconstrução também seja suportada). O PowerShell pode ser configurado para retomar a execução silenciosamente, sem realmente lançar a exceção; isso pode ser feito com um único comando, uma única sessão ou perpetuamente.

Os scripts escritos usando o PowerShell podem ser feitos para persistir nas sessões em um .ps1arquivo ou .psm1arquivo (o último é usado para implementar um módulo). Posteriormente, o script inteiro ou funções individuais no script podem ser usados. Scripts e funções operam de forma análoga aos cmdlets, pois podem ser usados ​​como comandos em pipelines e os parâmetros podem ser associados a eles. Objetos de pipeline podem ser passados ​​entre funções, scripts e cmdlets perfeitamente. Para evitar a execução não intencional de scripts, a execução de scripts é desabilitada por padrão e deve ser habilitada explicitamente. A habilitação de scripts pode ser realizada no nível do sistema, do usuário ou da sessão. Os scripts do PowerShell podem ser assinados para verificar sua integridade e estão sujeitos à segurança de acesso ao código .

A linguagem de script PowerShell oferece suporte à notação de prefixo binário semelhante à notação científica compatível com muitas linguagens de programação na família C.

Hospedagem

Também é possível usar o PowerShell incorporado em um aplicativo de gerenciamento, que usa o tempo de execução do PowerShell para implementar a funcionalidade de gerenciamento. Para isso, o PowerShell fornece uma API de hospedagem gerenciada . Por meio das APIs, o aplicativo pode instanciar um espaço de execução (uma instanciação do tempo de execução do PowerShell), que é executado no processo do aplicativo e é exposto como um objeto. O estado do espaço de execução é encerrado em um objeto. Quando o espaço de execução é criado, o tempo de execução do Windows PowerShell inicializa a instanciação, incluindo a inicialização dos provedores e enumeração dos cmdlets, e atualiza o objeto de acordo. O Runspace deve então ser aberto para processamento síncrono ou processamento assíncrono. Depois disso, ele pode ser usado para executar comandos. RunspaceSessionStateSessionState

Para executar um comando, um pipeline (representado por um Pipelineobjeto) deve ser criado e associado ao espaço de execução. O objeto de pipeline é então preenchido com os cmdlets que compõem o pipeline. Para operações sequenciais (como em um script do PowerShell), um objeto Pipeline é criado para cada instrução e aninhado dentro de outro objeto Pipeline. Quando um oleoduto é criado, o Windows PowerShell invoca o processador gasoduto, que resolve os cmdlets em suas respectivas assembléias (o processador de comandos ) e adiciona uma referência a eles para o gasoduto, e os associa InputPipe, OutputPipee ErrorOutputPipeobjetos, para representar a conexão com o pipeline. Os tipos são verificados e os parâmetros vinculados usando reflexão . Depois que o pipeline é configurado, o host chama o Invoke()método para executar os comandos, ou seu equivalente assíncrono InvokeAsync(),. Se o pipeline tiver o Write-Hostcmdlet no final do pipeline, ele gravará o resultado na tela do console. Caso contrário, os resultados são entregues ao host, que pode aplicar processamento adicional ou exibir a própria saída.

O Microsoft Exchange Server 2007 usa as APIs de hospedagem para fornecer sua GUI de gerenciamento. Cada operação exposta na GUI é mapeada para uma sequência de comandos do PowerShell (ou pipelines). O host cria o pipeline e os executa. Na verdade, o próprio console interativo do PowerShell é um host do PowerShell, que interpreta os scripts inseridos na linha de comando e cria os Pipelineobjetos necessários e os invoca.

Configuração de Estado Desejado

O DSC permite a especificação declarativa de como um ambiente de software deve ser configurado.

Ao executar uma configuração , o DSC garantirá que o sistema obtenha o estado descrito na configuração. As configurações de DSC são idempotentes. O Gerenciador de configuração local (LCM) pesquisa periodicamente o sistema usando o fluxo de controle descrito por recursos (peças imperativas de DSC) para garantir que o estado de uma configuração seja mantido.

Versões

Inicialmente usando o codinome "Monad", o PowerShell foi exibido pela primeira vez publicamente na Professional Developers Conference em outubro de 2003 em Los Angeles. Todas as versões principais ainda são suportadas e cada versão principal apresenta compatibilidade retroativa com as versões anteriores.

Windows PowerShell 1.0

Sessão do Windows PowerShell 1.0 usando o Console do Windows

PowerShell 1.0 foi lançado em novembro de 2006 para Windows XP SP2 , Windows Server 2003 SP1 e Windows Vista . É um componente opcional do Windows Server 2008 .

Windows PowerShell 2.0

Windows PowerShell ISE v2.0 no Windows 7 , um ambiente de desenvolvimento integrado para scripts PowerShell.

O PowerShell 2.0 está integrado ao Windows 7 e Windows Server 2008 R2 e foi lançado para Windows XP com Service Pack 3, Windows Server 2003 com Service Pack 2 e Windows Vista com Service Pack 1.

O PowerShell v2 inclui alterações na linguagem de script e API de hospedagem, além de incluir mais de 240 novos cmdlets.

Os novos recursos do PowerShell 2.0 incluem:

  • Remoto do PowerShell : usando WS-Management , o PowerShell 2.0 permite que scripts e cmdlets sejam invocados em uma máquina remota ou em um grande conjunto de máquinas remotas.
  • Trabalhos em segundo plano : também chamado de PSJob , ele permite que uma sequência de comando (script) ou pipeline seja chamada de forma assíncrona. Os trabalhos podem ser executados na máquina local ou em várias máquinas remotas. Um cmdlet interativo em um PSJob bloqueia a execução do trabalho até que a entrada do usuário seja fornecida.
  • Transações : Habilite o cmdlet e os desenvolvedores podem executar operações transacionais . O PowerShell 2.0 inclui cmdlets de transação para iniciar, confirmar e reverter uma PSTransaction , bem como recursos para gerenciar e direcionar a transação para o cmdlet participante e as operações do provedor. O provedor de registro do PowerShell oferece suporte a transações.
  • Funções avançadas : são cmdlets escritos usando a linguagem de script PowerShell. Inicialmente chamado de "cmdlets de script", esse recurso foi posteriormente renomeado para "funções avançadas".
  • SteppablePipelines : Isso permite que o usuário controle quando os BeginProcessing(), ProcessRecord()e EndProcessing()funções de um cmdlet são chamados.
  • Módulos : Isso permite que os desenvolvedores de script e administradores organizem e particionem os scripts do PowerShell em unidades autocontidas e reutilizáveis. O código de um módulo é executado em seu próprio contexto autocontido e não afeta o estado fora do módulo. Os módulos podem definir um ambiente de espaço de execução restrito usando um script. Eles têm um estado persistente, bem como membros públicos e privados.
  • Linguagem de dados : um subconjunto específico de domínio da linguagem de script do PowerShell que permite que as definições de dados sejam desacopladas dos scripts e permite que recursos de string localizados sejam importados para o script em tempo de execução ( internacionalização do script ).
  • Depuração de script : permite que os pontos de interrupção sejam definidos em um script ou função do PowerShell. Os pontos de interrupção podem ser definidos em linhas, linhas e colunas, comandos e acesso de leitura ou gravação de variáveis. Inclui um conjunto de cmdlets para controlar os pontos de interrupção por meio de script.
  • Eventos : Este recurso permite escutar, encaminhar e atuar nos eventos de gerenciamento e sistema. O Eventing permite que os hosts do PowerShell sejam notificados sobre as alterações de estado em suas entidades gerenciadas. Ele também permite que scripts do PowerShell se inscrevam em ObjectEvents , PSEvents e WmiEvents e os processem de forma síncrona e assíncrona.
  • Windows PowerShell Integrated Scripting Environment (ISE) : PowerShell 2.0 inclui um host PowerShell baseado em GUI que fornece depurador integrado, destaque de sintaxe , preenchimento de guia e até 8 consoles habilitados para PowerShell Unicode (Runspaces) em uma interface de usuário com guias, bem como a capacidade para executar apenas as partes selecionadas em um script.
  • Transferência de arquivos de rede : suporte nativo para transferência priorizada, limitada e assíncrona de arquivos entre máquinas usando o Background Intelligent Transfer Service (BITS).
  • Novos cmdlets : Incluindo Out-GridView, que exibe dados tabulares no objeto WPF GridView , em sistemas que permitem isso e se o ISE está instalado e habilitado.
  • Novos operadores : -Split, -Join, e splatting ( @) operadores.
  • Tratamento de exceções com Try-Catch-Finalmente : ao contrário de outras linguagens .NET, isso permite vários tipos de exceção para um único bloco catch.
  • Nestable Aqui-Cordas : PowerShell Aqui-Cordas foram melhorados e agora pode ninho.
  • Bloquear comentários : o PowerShell 2.0 oferece suporte a comentários de bloqueio usando <#e #>como delimitadores.
  • Novas APIs : As novas APIs vão desde a entrega de mais controle sobre o analisador PowerShell e tempo de execução para o host, até a criação e gerenciamento de coleção de Runspaces ( RunspacePools), bem como a capacidade de criar Runspaces Restritos que permitem apenas que um subconjunto configurado do PowerShell seja invocado . As novas APIs também oferecem suporte à participação em uma transação gerenciada pelo PowerShell

Windows PowerShell 3.0

O PowerShell 3.0 está integrado ao Windows 8 e ao Windows Server 2012 . A Microsoft também disponibilizou o PowerShell 3.0 para Windows 7 com Service Pack 1, para Windows Server 2008 com Service Pack 1 e para Windows Server 2008 R2 com Service Pack 1.

O PowerShell 3.0 faz parte de um pacote maior, o Windows Management Framework 3.0 (WMF3), que também contém o serviço WinRM para oferecer suporte à comunicação remota. A Microsoft fez vários lançamentos de Community Technology Preview do WMF3. Uma versão inicial da Community Technology Preview 2 (CTP 2) do Windows Management Framework 3.0 foi lançada em 2 de dezembro de 2011. O Windows Management Framework 3.0 foi lançado para disponibilidade geral em dezembro de 2012 e está incluído no Windows 8 e no Windows Server 2012 por padrão.

Os novos recursos do PowerShell 3.0 incluem:

  • Trabalhos agendados : os trabalhos podem ser agendados para serem executados em uma data e hora predefinidas usando a infraestrutura do Agendador de tarefas do Windows .
  • Conectividade da sessão : as sessões podem ser desconectadas e reconectadas. As sessões remotas se tornaram mais tolerantes a falhas de rede temporárias.
  • Escrita de código aprimorada : Conclusão de código (IntelliSense) e snippets são adicionados. O PowerShell ISE permite que os usuários usem caixas de diálogo para preencher os parâmetros dos cmdlets do PowerShell.
  • Suporte à delegação : as tarefas administrativas podem ser delegadas a usuários que não têm permissões para esse tipo de tarefa, sem conceder a eles permissões adicionais perpétuas.
  • Atualização de ajuda : as documentações de ajuda podem ser atualizadas por meio do comando Update-Help.
  • Detecção automática de módulo : os módulos são carregados implicitamente sempre que um comando desse módulo é invocado. O autocompletar de código também funciona para módulos não carregados.
  • Novos comandos : Dezenas de novos módulos foram adicionados, incluindo funcionalidade para gerenciar discos get-WmiObject win32_logicaldisk, volumes, firewalls, conexões de rede e impressoras, que antes eram executados via WMI.

Windows PowerShell 4.0

O PowerShell 4.0 está integrado ao Windows 8.1 e ao Windows Server 2012 R2 . A Microsoft também disponibilizou o PowerShell 4.0 para Windows 7 SP1 , Windows Server 2008 R2 SP1 e Windows Server 2012 .

Os novos recursos do PowerShell 4.0 incluem:

  • Configuração do estado desejado : extensões de linguagem declarativa e ferramentas que permitem a implantação e gerenciamento de dados de configuração para sistemas que usam os padrões de gerenciamento DMTF e protocolo WS-Management
  • Nova política de execução padrão : Em servidores Windows, a política de execução padrão é agora RemoteSigned.
  • Salvar-Ajuda : agora, a ajuda pode ser salva para módulos instalados em computadores remotos.
  • Depuração aprimorada : o depurador agora oferece suporte a fluxos de trabalho de depuração, execução remota de script e preservação de sessões de depuração em reconexões de sessão do PowerShell.
  • -PipelineVariable switch : um novo parâmetro onipresente para expor o objeto do pipeline atual como uma variável para fins de programação
  • Diagnóstico de rede para gerenciar comutadores físicos e de rede virtualizada do Hyper-V
  • A sintaxe do método Where e ForEach fornece um método alternativo de filtragem e iteração de objetos.

Windows PowerShell 5.0

Ícone do PowerShell 5.0

O Windows Management Framework (WMF) 5.0 RTM que inclui o PowerShell 5.0 foi relançado na web em 24 de fevereiro de 2016, após um lançamento inicial com um bug grave.

Principais recursos incluídos:

  • A nova class palavra-chave que cria classes para programação orientada a objetos
  • A nova enumpalavra-chave que cria enums
  • OneGetcmdlets para oferecer suporte ao gerenciador de pacotes Chocolatey
  • Estendendo o suporte para gerenciamento de switch para switches de rede da camada 2 .
  • Depuração para trabalhos em segundo plano do PowerShell e instâncias do PowerShell hospedadas em outros processos (cada um dos quais é chamado de "espaço de execução")
  • Desired State Configuration (DSC) Local Configuration Manager (LCM) versão 2.0
  • Configurações parciais de DSC
  • Meta-configurações do DSC Local Configuration Manager
  • Autoria de recursos DSC usando classes PowerShell

Windows PowerShell 5.1

Ele foi lançado junto com a Atualização de Aniversário do Windows 10 em 2 de agosto de 2016 e no Windows Server 2016 . PackageManagement agora oferece suporte a proxies, PSReadLine agora tem suporte a ViMode e dois novos cmdlets foram adicionados: Get-TimeZone e Set-TimeZone. O módulo LocalAccounts permite adicionar / remover contas de usuários locais. Uma prévia do PowerShell 5.1 foi lançada para Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 e Windows Server 2012 R2 em 16 de julho de 2016 e foi lançada em 19 de janeiro de 2017.

O PowerShell 5.1 é a primeira versão em duas edições de "Desktop" e "Core". A edição "Desktop" é a continuação do Windows PowerShell tradicional executado na pilha do .NET Framework. A edição "Core" é executada em .NET Core e acompanha o Windows Server 2016 Nano Server. Em troca de dimensões menores, o último carece de alguns recursos, como os cmdlets para gerenciar a área de transferência ou adicionar um computador a um domínio, cmdlets WMI versão 1, cmdlets de Log de eventos e perfis. Esta foi a versão final do PowerShell feita exclusivamente para Windows.

PowerShell Core 6

O PowerShell Core 6.0 foi anunciado pela primeira vez em 18 de agosto de 2016, quando a Microsoft revelou o PowerShell Core e sua decisão de tornar o produto multiplataforma , independente do Windows, gratuito e de código aberto. Ele alcançou disponibilidade geral em 10 de janeiro de 2018 para Windows, macOS e Linux . Ele tem seu próprio ciclo de vida de suporte e segue a política de ciclo de vida da Microsoft que é introduzida com o Windows 10: apenas a versão mais recente do PowerShell Core é compatível. A Microsoft espera lançar uma versão secundária do PowerShell Core 6.0 a cada seis meses.

A mudança mais significativa nesta versão do PowerShell é a expansão para outras plataformas. Para administradores do Windows, esta versão do PowerShell não incluía nenhum recurso novo importante. Em uma entrevista com a comunidade em 11 de janeiro de 2018, a equipe do PowerShell foi solicitada a listar as 10 coisas mais interessantes que aconteceriam para um profissional de TI do Windows que migraria do Windows PowerShell 5.1 para o PowerShell Core 6.0; em resposta, Angel Calvo, da Microsoft, mencionou apenas dois: plataforma cruzada e código-fonte aberto.

De acordo com a Microsoft, um dos novos recursos do PowerShell 6.1 é "Compatibilidade com mais de 1900 cmdlets existentes no Windows 10 e Windows Server 2019 ". Ainda assim, nenhum detalhe desses cmdlets pode ser encontrado na versão completa do log de alterações. Mais tarde, a Microsoft afirma que esse número era insuficiente, pois o PowerShell Core não conseguiu substituir o Windows PowerShell 5.1 e ganhar tração no Windows. No entanto, era popular no Linux.

O PowerShell Core 6.2 é focado principalmente em melhorias de desempenho, correções de bugs e cmdlets menores e aprimoramentos de linguagem que melhoraram a produtividade do desenvolvedor.

PowerShell 7

PowerShell 7 é a substituição dos produtos PowerShell Core 6.x, bem como do Windows PowerShell 5.1, que é a última versão do Windows PowerShell com suporte. O foco no desenvolvimento era tornar o PowerShell 7 um substituto viável para o Windows PowerShell 5.1, ou seja, ter quase paridade com o Windows PowerShell em termos de compatibilidade com os módulos fornecidos com o Windows.

Os novos recursos do PowerShell 7 incluem:

  • A -Parallelopção para o ForEach-Objectcmdlet para ajudar a lidar com o processamento paralelo
  • Quase paridade com o Windows PowerShell em termos de compatibilidade com módulos integrados do Windows
  • Uma nova visão de erro
  • O Get-Errorcmdlet
  • Operadores de encadeamento de pipeline ( &&e ||) que permitem a execução condicional do próximo cmdlet no pipeline
  • O ?: Operador para operação ternária
  • O ??=operador que só atribui um valor a uma variável quando o valor existente da variável é nulo
  • O ??operador para coalescência nula
  • Plataforma cruzada Invoke-DscResource(experimental)
  • Retorno do Out-GridViewcmdlet
  • Retorno do -ShowWindowinterruptor para oGet-Help

Comparação de cmdlets com comandos semelhantes

A tabela a seguir contém uma seleção dos cmdlets fornecidos com o PowerShell, observando comandos semelhantes em outros interpretadores de linha de comando conhecidos. Muitos desses comandos semelhantes vêm prontos para uso, definidos como aliases no PowerShell, tornando mais fácil para as pessoas familiarizadas com outros shells comuns começarem a trabalhar.

Comparação de cmdlets do PowerShell com comandos internos e externos de outros intérpretes de linha de comando
PowerShell (Cmdlet) PowerShell (alias) Prompt de comando do Windows Shell Unix Descrição
Get-ChildItem gci, dir, ls dir ls Lista todos os arquivos e pastas na pasta atual ou determinada
Conexão de Teste ping ping ping Envia solicitações de eco ICMP para a máquina especificada a partir da máquina atual ou instrui outra máquina a fazer isso
Obter conteudo gc, tipo, gato modelo gato Obtém o conteúdo de um arquivo
Get-Command gcm ajuda , onde tipo , que , compgen Lista os comandos disponíveis e obtém o caminho do comando
Obter ajuda ajuda cara ajuda a propósito , cara Imprime a documentação de um comando no console
Clear-Host cls, claro cls Claro Limpa a tela
Copy-Item cpi, cópia, cp copiar , xcopy , robocopy cp Copia arquivos e pastas para outro local
Mover-Item mi, mexa-se, mv mover mv Move arquivos e pastas para um novo local
Remover item ri, del, apagar, rmdir, rd, rm del , apagar , rmdir , rd rm , rmdir Exclui arquivos ou pastas
Renomear Item rni, ren, mv ren , renomear mv Renomeia um único arquivo, pasta, link físico ou link simbólico
Get-Location gl, cd, pwd CD pwd Mostra o caminho de trabalho (pasta atual)
Pop-Location popd popd popd Muda o caminho de trabalho para o local colocado mais recentemente na pilha
Push-Location pushd empurrar pushd Armazena o caminho de trabalho na pilha
Defina localização sl, cd, chdir cd , chdir CD Muda o caminho de trabalho
Tee-Object tee N / D tee Canaliza a entrada para um arquivo ou variável, passando a entrada ao longo do pipeline
Write-Output eco, escrever eco eco Imprime strings ou outros objetos na saída padrão
Get-Process gps, ps tlist, lista de tarefas ps Lista todos os processos em execução
Stop-Process spps, matar matar , taskkill matar Para um processo em execução
Select-String sls findstr find , grep Imprime linhas que correspondem a um padrão
Set-Variable sv, set definir env, exportar, definir, setenv Cria ou altera o conteúdo de uma variável de ambiente
Invoke-WebRequest iwr, curl, wget ondulação wget , curl Obtém conteúdo de uma página da web na Internet

Notas

Extensões de nome de arquivo

Extensão Descrição
.ps1 Arquivo de script
.psd1 Arquivo de manifesto do módulo; geralmente vem com um módulo de script ou módulo binário
.psm1 Arquivo de módulo de script
.dll Arquivo de módulo binário compatível com DLL
.ps1xml Arquivo de definições de formato e tipo
.xml Arquivo de dados serializados em conformidade com XML
.psc1 Arquivo de console
.pssc Arquivo de configuração de sessão
.psrc Arquivo de capacidade de função

Suporte de aplicativo

Aplicativo Versão Cmdlets Fornecedor GUI de gerenciamento
Servidor Exchange 2007 402 sim sim
Servidor Windows 2008 sim sim Não
Microsoft SQL Server 2008 sim sim Não
Microsoft SharePoint 2010 sim sim Não
System Center Configuration Manager 2012 R2 400+ sim Não
Gerente de operações do System Center 2007 74 sim Não
System Center Virtual Machine Manager 2007 sim sim sim
System Center Data Protection Manager 2007 sim Não Não
Servidor Windows Compute Cluster 2007 sim sim Não
Pacote Microsoft Transporter para Lotus Domino 08.02.0012 47 Não Não
Microsoft PowerTools para Open XML 1.0 33 Não Não
IBM WebSphere MQ 6.0.2.2 44 Não Não
Complementos do IoT Core 74 Desconhecido Desconhecido
Quest Management Shell para Active Directory 1,7 95 Não Não
Comando Specops de Software de Operações Especiais 1.0 sim Não sim
VMware vSphere PowerCLI 6,5 R1 500+ sim sim
Serviços de Informação da Internet 7,0 54 sim Não
Centro de solução de problemas do Windows 7 6,1 sim Não sim
Microsoft Deployment Toolkit 2010 sim sim sim
NetApp PowerShell Toolkit 4,2 2000+ sim sim
JAMS Scheduler - Acesso e Sistema de Gerenciamento de Trabalhos 5.0 52 sim sim
UIAutomation 0,8 432 Não Não
Dell Equallogic 3,5 55 Não Não
LOGINventory 5,8 sim sim sim
SePSX 0.4.1 39 Não Não

Implementação alternativa

Um projeto chamado Pash , um trocadilho com o shell Unix amplamente conhecido " bash ", foi uma reimplementação de plataforma cruzada e de código aberto do PowerShell por meio da estrutura Mono . Pash foi criado por Igor Moochnick, escrito em C # e lançado sob a GNU General Public License . O desenvolvimento do Pash estagnou em 2008, foi reiniciado no GitHub em 2012 e finalmente encerrado em 2016, quando o PowerShell foi oficialmente criado para código aberto e plataforma cruzada.

Veja também

Referências

Leitura adicional

links externos