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 a biblioteca das Extensões da Comunidade
- Livre-se da mensagem “execution of scripts is disabled”
- Configure os seus “scripts:”. Localização da unidade PowerShell
- Configure o seu prompt de comando
- Tarefas diversas
- Escreva na tela
- Usuário imediato para entrada
- Manipular datas
- Enviar e-mail
- Dormir
- Listar um diretório (recursivamente)
- Testar se um arquivo existe
- Ler linhas de arquivo em um array
- Escrever em um arquivo
- Renomear um arquivo
- Apagar um arquivo
- Trabalhar com expressões regulares
- Dividir e unir cordas
- Pegue uma página web
- Ler e escrever no registo
- Entender aspas
- Tempo um comando
- Texto à fala
- Acessar a área de transferência do Windows
- Carregar um conjunto .NET
- Executar código criado em tempo de execução
- Executa um programa com um espaço em seu caminho
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