PowerShell é um shell de linha de comando baseado em tarefas e linguagem de script desenvolvido no .NET. Inicialmente, apenas um componente do Windows.
Ele foi escrito com C# e seu código fonte está disponível no GitHub
O PowerShell já está disponível para Windows 10 e 11, logo, não precisa instalar nada. Mas, se você estiver em outro sistema operacional, como Ubuntu, por exemplo, você pode usar o snap:
sudo snap install powershell --classic
Após instalado, basta confirmar a instalação verificando a versão, ex.:
pwsh --version
PowerShell 7.5.0
Abaixo alguns exemplos de uso.
Crie um arquivo com extensão .ps1
, exemplo: main.ps1
e insira o conteúdo abaixo:
# Programa básico com PowerShell
Write-Host 'Hello, World!'
Comentários podem ser feitos usando o tralha:
#
Salve e rode com o comando:
pwsh main.ps1
A saída deverá ser: Hello, World!.
Exemplo download do arquivo 81by.txt e salvar com o nome: logo-ps.png
.
Sempre é necessário direcionar para um arquivo local com
-OutFile
.
Invoke-WebRequest -Uri "http://0x0.st/81by.txt" -OutFile "logo-ps.png"
Precisa do cifrão estilo PHP e Perl.
$url = "http://0x0.st/81by.txt"
$file = "logo-ps.png"
Write-Host "A url é: " + $url + " e o arquivo: " $file
O operador de concatenação:
+
(mais) é opcional, poderia ser também:
Write-Host "A url é: " $url " e o arquivo: " $file
if else
Verificar se o arquivo foi salvo com sucesso:
$url = "http://0x0.st/81by.txt"
$file = "logo-ps.png"
Write-Host "A url é: " + $url + " e o arquivo: " $file
Invoke-WebRequest -Uri $url -OutFile $file
if(Test-Path $file 2>$null && (Get-Content $file 2>$null)){
Write-Host "Arquivo foi baixado com sucesso!"
}else{
Write-Host "Falha ao baixar o arquivo ou o arquivo está vazio."
}
Note também o uso de:
&&
operador lógico2>$url
similar ao 2>/dev/null
Test-Path
e Get-Content
Adicionando funções para otimizar rotinas. Tudo que fizemos anteriormente, mas agora dentro de uma função que podemos mudar a URL e o nome do arquivo sempre precisar reescrever sempre que quisermos reutilizar para outros fins.
$url = "http://0x0.st/81by.txt"
$file = "logo-ps.png"
Function SaveFile {
param($url, $file)
Write-Host "A url é: " + $url + " e o arquivo: " $file
Invoke-WebRequest -Uri $url -OutFile $file
if(Test-Path $file 2>$null && (Get-Content $file 2>$null)){
Write-Host "Arquivo foi baixado com sucesso!"
}else{
Write-Host "Falha ao baixar o arquivo ou o arquivo está vazio."
}
}
SaveFile $url $file
Alguns detalhes nesse código:
param()
que está dentro do bloco de chavesSaveFile $1 $2
e não: SaveFile($1, $2)
, mas em alguns outros casos, como inteiros podemos usar estilo a maioria das linguagens de programação, exemplo:Function IncNumber {
param($x)
++$x
Write-Host $x
}
IncNumber(2) # 3
Nesse outro exemplo, note também o uso do operador ++
do lado esquerdo para incrementar.
Nesse caso, vamos ver o conteúdo do próprio arquivo: main.ps1
, estilo comando cat:
Comentamos a chamada da função:
SaveFile
e adicionamos mais uma linha com:
Get-Content "main.ps1"
A saída será:
$url = "http://0x0.st/81by.txt"
$file = "logo-ps.png"
Function SaveFile {
param($url, $file)
Write-Host "A url é: " + $url + " e o arquivo: " $file
Invoke-WebRequest -Uri $url -OutFile $file
if(Test-Path $file 2>$null && (Get-Content $file 2>$null)){
Write-Host "Arquivo foi baixado com sucesso!"
}else{
Write-Host "Falha ao baixar o arquivo ou o arquivo está vazio."
}
}
#SaveFile $url $file
Get-Content "main.ps1"
Pedindo confirmação para ver se ele realmente deseja ver o arquivo:
$resposta = Read-Host "Você deseja visualizar o arquivo? (sim/não)"
if ($resposta -eq "sim" -or $resposta -eq "s") {
Get-Content "main.ps1"
} else {
Write-Host "Você escolheu não exibir o arquivo."
}
Note também o uso do operador -or
(equivalente a ||
) para se aresposta for sim
ou s
.
Para mais informações baixe esse PDF e acesse os links abaixo: