Truques com PowerShell
Utilizando PowerShell

Publicado em: 14/09/2017 00:00:00, por IVAN VARGAS

Para quem não sabe, o PowerShell é o prompt de comandos vitaminado do Windows (acho que começou a aparecer já na instalação do Windows 7 em diante), que possibilita realizar uma série de operações que o cmd.exe padrão não permite.

Com o PowerShell podemos interagir diretamente com a API do Windows e acessar classes e métodos da plataforma .NET.

Nesta página vou adicionar alguns comandos úteis que for encontrado por ai. Vamos lá, então.

Ah, antes de começar, abra o PowerShell clicando em Iniciar->Executar e pesquisa por Windows PowerShell. Será aberta uma janela azul, com o prompt de comando mais ou menos nesse padrao: PS C:\>. A partir dai é só digitar os comandos. Funções básicas do cmd.exe (como dir, ipconfig, ren, etc) fucnionam normalmente.

1. Lendo uma página Web

Para retornar o conteúdo de uma página web (seu código html) podemos fazer o seguinte:

PS C:\> $webClient = New-Object Net.WebClient
PS C:\> $str = $webClient.DownloadString('http://www.is5.com.br/ip.php')
PS C:\> Write-Output $str

Este comando irá imprimir o seu endereço IP externo na tela, uma vez que chamamos a página www.is5.com.br/ip.php que faz exatamente isso: retorna uma string com o endereço IP do cliente. Isso é útil quando você quer saber o seu endereço na internet.

2. Verificar se uma porta TCP/IP está aberta

PS C:\> $client = New-Object System.Net.Sockets.TCPClient('127.0.0.1',80)
PS C:\> Write-Output $client.Connected

Este se retornar True, a porta está aberta. Se retornar False ou der algum erro ao executar a primeira linha a porta está fechada.

Para ver os dados armazenados na variavel $client, basta dar um Write-Output direto nela ou digitar somente o nome da mesma:

PS C:\> $client

Client              : System.Net.Sockets.Socket
Available           : 4
Connected           : True
ExclusiveAddressUse : False
ReceiveBufferSize   : 8192
SendBufferSize      : 8192
ReceiveTimeout      : 0
SendTimeout         : 0
LingerState         : System.Net.Sockets.LingerOption
NoDelay             : False

3. Abrindo uma porta TCP/IP

PS C:\> $listener = [System.Net.Sockets.TcpListener]3281
PS C:\> $listener.start()
PS C:\> $client = $listener.AcceptTcpClient()

Com este comando podemos abrir uma porta TCP qualquer, aqui utilizo como exemplo a porta 3281 (escolha uma porta qualquer q não esteja em uso, obviamente) e aguardamos a conexão de clientes.

Para testar se esta funcionando, abra um outro terminal (pode ser PowerShell ou cmd.exe mesmo), e tente conectar por Telnet ou utilizando o exemplo do item 2.

c:\> telnet localhost 3281

4. Escrevendo um servidor de ECO

Somente abrir uma porta não é muito útil.

Mas, se abrirmos uma porta, aguardar conexão, dizer "bem vindo" quando o cliente se conectar e imprimir em tela tudo o que o cliente digitar do outro lado?

Dificil? Nem tanto! Viva o PowerShell :)

PS C:\> $listener = [System.Net.Sockets.TcpListener]3281
PS C:\> $listener.start() 
PS C:\> $client = $listener.AcceptTcpClient()

... Aqui o PowerShell aguarda conexões. Em outro terminal conecte-se a esta porta. Ex: telnet localhost 3281.

PS C:\> $stream = $client.GetStream()
PS C:\> $enviar = ([text.encoding]::ASCII).GetBytes("Bem vindo mestre!")
PS C:\> $stream.Write($enviar, 0, $enviar.Length)

... Aqui a msg de boas vindas foi enviada. Verifique no terminal cliente.

PS C:\> [byte[]]$bytes = 0..65535|%{0}
PS C:\> $encod = New-Objet -TypeName System.Text.ASCIIEncoding
PS C:\> while (($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0) {  
>>  $data = $encod.GetString($bytes, 0, $i)
>>  Write-OutPut $data
>>}
>> pressione ENTER para iniciar. 

... Aqui criamos um loop para receber o que for digitado pelo terminal cliente. 
... No cliente digite alguma coisa. O que voce digitar lah serah replicado aqui:)

Interenssante, não? Com base nisso pode ser desenvolvido um script para administração remota e coisas do tipo. Futuramente veremos algo nesse sentido.

Por enquanto é isso. Logo posto aqui mais dicas sobre o PowerShell e de como gerar scripts para automatizar ainda mais estas funcionalidades :)

 

Abraço.



IS5 TECNOLOGIA

São Lourenço do Sul/RS
Telefone: (53)9963-5721
E-mail: contato@is5.com.br
Facebook: fb.com/is5tecnologia
Skype: ivan_is5
GitHub: github.com/isvargas
O QUE FAZEMOS

Automação Comercial
Desenvolvimento de Sistemas
Hospedagem e Desenvolvimento de Sites
Aplicativos Mobile
Consultoria e Projetos Freelancer
Desenvolvido por is5 tecnologia