PowerShell Cookbook

Esta é uma lista de itens que eu e os meus colegas achamos úteis no nosso trabalho. Não pretende ser enciclopédico, mas sim um lugar para gravar coisas que um principiante acharia úteis, especialmente coisas que podem demorar muito tempo a descobrir.

Esta página foi iniciada antes de O’Reilly publicar o Windows PowerShell Cookbook de Lee Holmes. Eu recomendo o livro de O’Reilly, mas esta página não está relacionada a ele.

Veja também os gotchas do PowerShell.

Outline

  • Início/instalação
    • Instalar PowerShell
    • Instalar biblioteca de extensões de comunidade
    • Deixar a mensagem “execução de scripts está desactivada”
    • Configurar os seus “scripts:”. Localização da unidade PowerShell
    • >

    • Configure seu prompt de comando
    • >

    >

  • >

  • Tarefas diversas
      >

    • Escrever na tela
    • >

    • Pedir ao usuário para entrada
    • Datas manipuladas
    • Enviar e-mail
    • Dormir
    • Lista um directório (recursivamente)
    • Testar se um ficheiro existe
    • Ler linhas de ficheiro num array
    • Escrever um ficheiro
    • Renomear um ficheiro
    • Eliminar um ficheiro
    • Trabalhar com expressões regulares
    • Dividir e juntar cadeias de caracteres
    • Grab a web page
    • Ler e escrever no registo
    • Entender aspas
    • Tempo um comando
    • Texto à fala
    • Acesso à área de transferência do Windows
    • Carregar um comando .NET assembly
    • >

    • Executar código criado em tempo de execução
    • Executar um programa com um espaço no seu caminho
    • >

    >

  • >

>

Início/instalação

>

Instalar PowerShell

>

Pode obter o PowerShell a partir de:https://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx

top

Instalar a biblioteca das Extensões da Comunidade

A biblioteca das Extensões da Comunidade PowerShell (PSCX) está disponível aqui:
>https://www.codeplex.com/Wiki/View.aspx?ProjectName=PowerShellCX>

>

Esta é uma colecção útil de cmdlets e funções. Ela instala um menu de contexto “PowerShell Aqui” no WindowsExplorer que abre uma janela de comando PowerShell na pasta em que você clica com o botão direito do mouse. Também, o PSCX fornece um exemplo Profile.ps1 file.

Once PSCX está instalado, digite man about_pscx para ver uma visão geral dos cmdlets, provedores, etc. que vêm com o PSCX.

top

Livre-se da mensagem “execution of scripts is disabled”

> O primeiro problema que você provavelmente encontrará ao executar scripts PowerShell é algo assim:

PSH> .\myScript.ps1File D:\myScript.ps1 cannot be loaded. The fileD:\myScript.ps1 is not digitally signed. The script will not execute on thesystem. Please see "get-help about_signing" for more details..
At line:1 char:13 + .\myScript.ps1 <<<<

Isto é devido à configuração de segurança padrão no PowerShell que proíbe a execução de scripts maliciosos.

Pode alterar este comportamento fazendo isto:

PSH> set-executionPolicy RemoteSigned

>

Agora apenas scripts vindos de fontes remotas irão requerer assinatura digital.

top

Configure os seus “scripts:”. Localização da unidade PowerShell

Após ter escrito uma série de scripts PowerShell, você pode achar útil coletá-los em um lugar e criar um PSDrive chamado scripts: para encontrá-los rapidamente. Você poderia adicionar o seguinte ao seu perfil PSCX para criar tal PSDrive.

New-PSdrive -name scripts -PSprovider filesystem -root C:\bin\PowerShellScripts

top

Configure o seu prompt de comando

Para configurar o seu prompt de comando, simplesmente crie uma função chamada prompt e coloque-a no seu perfil. Por exemplo, o seguinte fará com que o diretório de trabalho seja exibido.

function prompt { "$pwd> " }

Nota que você pode colocar qualquer código que quiser dentro da função prompt e esse código será executado toda vez que você acertar o retorno.

top

Tarefas diversas

Escreva na tela

Use Write-Host para escrever a saída. Você pode opcionalmente especificar -foregroundcolor para colorir a saída. Por exemplo, erros e avisos podem ser destacados em vermelho.

Exemplo:

Write-Host "Hello world" -foregroundcolor red

top

Usuário imediato para entrada

Utilizar Read-Host.

Exemplo:

$a = Read-Host "Enter your name"Write-Host "Hello" $a

top

Manipular datas

O cmdlet get-date devolve um objecto DateTime. Sem argumentos, retorna a hora e data atuais. Com um argumento string, sem necessidade de citar, ele analisa a string em uma data.

Exemplo: Encontre o número de dias e horas desde o bicentenário dos EUA.

(get-date) - (get-date 7/4/1976)

Você também pode lançar cordas para DateTime objeto usando o elenco .

top

Enviar e-mail

Utilizar o Send-SmtpMail cmdlet das Extensões da Comunidade PowerShell.

Exemplo:

Send-SmtpMail -SmtpHost wotan.mdacc.tmc.edu -from [email protected] -to [email protected] -body "hello world">

top

Dormir

Utilizar o Start-Sleep cmdlet. Leva segundos por padrão, mas tem uma opção -milliseconds.

Exemplo:

Write-Host "hello"; Start-Sleep 5; Write-Host "world"

top

Listar um diretório (recursivamente)

Você pode usar o comando dir, que é realmente um apelido para Get-ChildItem. Para listar um diretório recursivamente, basta adicionar o comando -recurse opção.

Exemplo:

dir f:\bin -recurse

top

Testar se um arquivo existe

Use test-path.

top

Ler linhas de arquivo em um array

Use get-content.

Exemplo:

$a = (get-content foo.txt)

top

Escrever em um arquivo

Use Out-File. A menos que você queira uma saída Unicode, especifique -encoding ASCII

Exemplo:

$foo | out-file -encoding ASCII foo.txt

top

Renomear um arquivo

Use Rename-Item ou seu pseudônimo ren.

top

Apagar um arquivo

Use Delete-Item ou seu pseudônimo del.

top

Trabalhar com expressões regulares

Ver expressões regulares em PowerShell e Perl.

top

Dividir e unir cordas

As cordas têm um método split. O argumento para split() é uma string contendo caracteres para dividir. A função ::split é mais geral. Seu primeiro argumento é a string a dividir, e seu segundo argumento é uma expressão regular sobre a qual dividir.

Exemplo:

$a.split("`t ")>

dividirá a string $a em um array de strings, dividindo onde quer que haja uma aba ou um espaço.

Exemplo:

>$a = "123,456,apple"; ::split($a, ",(?!\d)") >

dividirá $a em vírgulas não seguidas de dígitos. Então a divisão retornaria “123,456” e “apple”.

Se a string que você está dividindo é um caminho do Windows, você pode querer usar o comando especializado Split-Path.

Para juntar uma array em uma única string, use o método ::join. O primeiro argumento é o caracter de separação e o segundo é o array.

Exemplo:

$a = 1, 2, 3;#note: this is an array, not a string$b = ::join("*", $a)

Agora $b contém “1*2*3”.

top

Pegue uma página web

Utilize o objeto Get-Url do PSCX ou o objeto net.webclient do .NET. O primeiro é mais sucinto mas o segundo permite mais opções.

Exemplo:

$w = Get-Url "https://www.w3.org"

$w = (new-object net.webclient).DownloadString("https://www.w3.org")

O código (new-object net.webclient) cria um objecto .NET WebClient com muitos métodos úteis. Por exemplo, você poderia chamar DownladFile para salvar diretamente no disco ao invés de em uma string. Há também UploadData e UploadFile métodos.

top

Ler e escrever no registo

Pode navegar no registo como navegaria no sistema de ficheiros, embora haja alguns detalhes a saber.

Cada colmeia do registo é como uma unidade. Assim, por exemplo, para explorar HKEY_CURRENT_USER, você pode cd HKCU: e depois usar cd para trabalhar na árvore. Use Get-ItemProperty para ler e Set-ItemProperty para escrever. Você também pode usar Remove-ItemProperty para apagar.

Exemplo:

Os comandos abaixo listarão o conteúdo do nó de registo que configura a shell cmd.exe. Ao configurar CompletionChar para 9, ativamos a conclusão da aba.

cd HKCU:\Software\Microsoft\Command ProcessorGet-ItemProperty .Set-ItemProperty . -name CompletionChar -Value 9

Este artigo do TechNet vai para mais detalhes.

top

Entender aspas

PowerShell tem quatro tipos de aspas: aspas simples e duplas ordinárias, e strings simples e duplas aqui. Dentro de aspas duplas e double here-strings, os nomes das variáveis são substituídos pelos seus valores e as sequências de escape PowerShell são interpretadas. Entre aspas simples e strings simples, os nomes de variáveis não são expandidos e as seqüências de escape não são interpretadas. Por exemplo, o código snippet

 $a = "bar" 'foo`t$a', "foo`t$a"

produzirá a saída

 foo`t$a foo bar

porque dentro da aspa dupla, `t se expande para uma aba e $a se expande para “bar”.

PowerShell here-strings são como documentos aqui em Perl. Dentro de uma corda aqui, aspas duplas e simples não são especiais, mas citadas literalmente. Também, quebras de linha são preservadas.

Uma here-string começa com @" ou @' e termina com os mesmos símbolos na ordem oposta. Deve haver uma nova linha seguindo o marcador de abertura e antes do marcador de fechamento.

Exemplo

 $a = "bar" $b = @" foo "baz" 'qux' $a "@ $b

produtos

 foo "baz" 'qux' bar

e

 $a = "bar" $b = @' foo "baz" 'qux' $a '@ $b

produtos

 foo "baz" 'qux' $a

Note que não deve haver espaço branco após a citação abrindo uma corda here-string. Caso contrário, você receberá a mensagem “Token não reconhecido no texto fonte”

Apesar de serem parecidos, as cadeias PowerShell here-strings e C# verbatim são bastante diferentes. A tabela seguinte resume as diferenças.

C# strings verbatim PowerShell aqui…strings
Pode conter quebras de linha Deve conter quebras de linha
Apenas variedade de aspas duplas Variedades de aspas simples e duplas
Begins com @” Begins com @” (ou @’) mais uma quebra de linha
Ends com “ Ends com uma quebra de linha seguida de “@” (ou ‘@)
Não pode conter un…escapou aspas duplas Pode conter aspas
Desliga sequências de fuga C# ‘@ desliga as sequências de fuga PowerShell mas “@ não

top

Tempo um comando

Use Measure-Command para cronometrar o tempo que uma tarefa demora a completar.

top

Texto à fala

Utilizar Out-Speech do PSCX.

top

Acessar a área de transferência do Windows

Utilizar os cmdlets do PSCX Get-Clipboard e Out-Clipboard para ler e escrever na área de transferência.

top

Carregar um conjunto .NET

Você pode chamar LoadWithPartialName. Por exemplo, para carregar a montagem para a API do Team Foundation Server, você executaria

::LoadWithPartialName("Microsoft.TeamFoundation.Client")>

>Ver também Resolve-Assembly de PSCX.

top

Executar código criado em tempo de execução

O comando Invoke-Expression é análogo a eval em Perl ou JavaScript. Invoke-Expression $str executa o código contido na string $str.

top

Executa um programa com um espaço em seu caminho

Coloca aspas ao redor do caminho e cola um sinal de amperímetro na frente. Por exemplo,

& "C:\Program Files\WinEdt Team\WinEdt\WinEdt.exe"

lançará o executável WinEdt.exe que tem dois espaços em seu caminho completo.

Nota que você não pode deixar de fora o sinal e o sinal. Ao contrário de cmd.exe, o PowerShell não assume que todas as cordas são comandos. Sem o sinal de varredura, um caminho citado é apenas uma string.

top

Deixe uma resposta

O seu endereço de email não será publicado.