Powershell

Comandos Básicos

Essencial

Acessado o powershell via prompt de comando.

powershell

Versão do Powershell

$PSVersionTable

Verificando versão disponíveis do Powershell no máquina atual

$PSVersionTable.PSVersion

Verificando qual linguagem do Powershell está em uso no momento, sendo eles ConstrainedLanguage ou FullLanguage.

$ExecutionContext.SessionState.LanguageMode

Listando as variáveis de ambiente

dir env:

Renomeando o título da janela

$host.UI.RawUI.WindowTitle = "<NOME>"

Modos de exibição

# Modo Lista, onde apresentar resultados mais completos
ls | Format-List
ls | fl

# Modo Tabela, que vem por padrão na saída dos resultados
ls | Format-Table
ls | ft

# Exibe m popup GUI com melhor visualização
ls | Out-GridView

Quando executarmos algum comando e recebermos algum retorno que contenha algo como {valor1, valor2, valor3, val...}, não temos como saber o restante dos valores. Para vermos a lista completa, precismos utilizar o seguinte comando:

Exibindo todos os alias

Comando para saber quais serviços estão presentes no SO e quais os seus executáveis

Informações sobre partições do disco

Acessado o powershell via prompt de comando sem entrar no modo interativo

Verificando se o SO é 64 bits

Detalhes do SO

Lista completa de comandos disponíveis

Buscando todos os Process do tipo Cmdlet

Executando comandos através do PowerShell

Buscamos por algum comando

Exibindo mensagem na tela

Diretório atual

Lendo arquivos

Lista os processos em execução

Procurando por um processo que começe com Calc e executando um kill para finalizá-lo

Buscando o path completo de determinado executável

Alterando User Agent em requisições web

Configurando Proxy em requisições web

Para verificar as configurações atuais de Proxy, basta digitar:

Windows Defender

Vendo logs do que o Defender bloqueou

Get-Help

Semelhante ao comando man do Linux, temos o Get-Help no Powershell, que serve como um manual para os comandos disponíveis

Podemos utilizar argumentos adicionais no nosso helper, como por exemplo:

Properties

Vendo as propriedades de um comando (objeto). No exemplo abaixo, utilizamos o Get-Process (ps) como exemplo, mas podemos utilizar outros comando em seu lugar. Note que o Get-Member possui o alias gm.

Como tudo no Powershell é um objeto, uma simples string pode conter Method e Property. No exemplo abaixo, estamos dando um echo em abc (lembrando que não precisamos escrever echo) e pegando as suas informações de acesso.

Filtrando somente por Member-Type que possua o valor Method

Acessando as propriedades

Ao vermos um tipo de Property ao executar o Get-Member, devemos especificar o formato, como por exemplo, o Format-List (ou fl`) para poder acessar suas propriedades

Manipulando Saídas

Abaixo alguns métodos que podemos acessar com uma string:

Select

Select-String

Procurando pela string "pass" em todos os arquivos txt

Array

Removendo valores duplicados no array

Exibe todos os valores do array menos o primeiro

Exibe todos os valores do array menos os 3 primeiros

Modules

Verificando todos os Módulos que estão importados na sessão atual

Verificando todos os Módulos que estão dispóníveis para serem importados

Para importar um Módulos presente no resultado do comando acima, basta executar:

Caso seja um módulo baixado da internet ou até mesmo desenvolvido por conta própria, execute:

Também podemos importar Módulos, usando a técnica Dot-Sourcing, que consiste na seguinte estrutura

Outra maneira diferente de fazer um importar um módulo:

Localizando o diretório do Módulos. Caso coloque scripts nesses diretórios, eles serão carregados automaticamente no Powershell, permitindo serem executados de forma nativa

Listando todos os cmdlet de um determinado Módulo

Caso tenha queira executar alguma function no resultado do comando acima e não sabe ao certo como utilizar, execute o comando abaixo para ter mais detalhes sobre o seu uso

Foreach

Multiplando por 2, cada um dos itens

Matando todos os processos do Chrome, semelhante a um ps -Name Chrome | kill

Where-Object

Executando comandos e realizando filtros. Note que a ? pode ser substituída por Where-Object

Por exemplo, para pegarmos todos os serviços que estão em execução, podemos executar o seguinte comando:

Bypass Para Copiar Arquivos

Profile

Os Profiles são perfis, onde scripts são executados assim que o Powershell for inicializado. Para executarmos um comando sem um perfil, podemos utilizar um comando seguindo o exemplo abaixo:

Redes

Exibindo detalhes sobre as unidade de rede que estão mapeadas

Verificando conectividade

Verificando portas com Test-NetConnection.

Verificando portas com Net.Sockets.TcpClient.

Converte um arquivo com hostname em IP's

IPv4NetworkScan.ps1

Lendo, Filtrando, Pesquisando e Manipulando Saídas

Filtrando palavras de forma semelhante ao grep (Linux)

Quebrando string em partes

Substituindo caracteres

Listando todos os arquivos de forma recursiva

Contando quantidade de resultados (linhas), semelhante ao wc -l do Linux

Retornando softwares instalados no computador

Retornando softwares instalados no computador, filtrando somente por produtos que não contém o nome "Microsoft"

WEB

Baixando um arquivo

Método HTTP

Pegando somente o Status Code

Pegando somente o conteúdo html

Pegando somente o header

Pegando somente os links de uma página web

Usuários e Grupos

Listando usuários

Listando grupos

Usuários locais que fazem parte de um determinado grupo

Segurança

Ignorando política de execução, pois o PowerShell é altamente monitorado usando ACLs, histórico de comandos, System Center Configuration Manager [SCCM], etc.

ExecutionPolicy

Tipos de perfil:

  • Default = Política de execução padrão. Restricted para usuários em Desktop e RemoteSigned caso seja um servidor

  • RemoteSigned = Os scripts baixados na internet são obrigados a ter uma assinatura digital de uma fonte confiável

  • Restricted = Comandos individuais podem ser executados, porém arquivos ps1 não podem

  • Unrestricted = Script que não são assinados podem ser executados

  • Undefined = Não possui política definida para o escopo atual

  • AllSigned = Os scripts executados devem ser assinados por uma fonte confiável

Verificando a configuração atual

Verificando a permissão de um determinado escopo

Verificando a permissão de todos os escopos

Realizando bypass para pegar todos os acessos

Outra maneira de realizarmos bypass, é alterando o $AuthorizationManager por $null, é executando o comando abaixo. Nada é exibido na tela e se executarmos um Get-ExecutionPolicy, nada irá ser alterado também, porém mesmo assim podemos executar arquivos ps1 no powershell.

Bypass na execução de um único arquivo

Executa um comando com bypass e em seguida já volta para o padrão de segurança do Powershell

Deixa o terminal com permissões de execução. Note que para ter êxito com esse comando, precisa ter acesso administrador

Altera a permissão no escopo Process

Altera a permissão no escopo CurrentUser -Force

Verificando permissões de diretório

Service Unquoted

Retorna um conjunto de serviços que possui um caminho inseguro configurado incorretamente durante a instalação

Condições / Repetidores

Contadores

Foreach

Sites

Last updated

Was this helpful?