Array de Bytes no PowerShell

  1. Converter Dados em um Array de Bytes no PowerShell
  2. Converter Dados em um Array de Bytes no PowerShell 5+
  3. Converter Dados em um Array de Bytes no PowerShell 7+
  4. Converter Array de Bytes em String no PowerShell
  5. Converter String em Array de Bytes no PowerShell
Array de Bytes no PowerShell

Este artigo tem como objetivo demonstrar como converter dados presentes em várias formas para um array de bytes usando a API de script do PowerShell.

Converter Dados em um Array de Bytes no PowerShell

Ao automatizar tarefas e lidar com dados, pode ser necessário processar os dados de uma maneira específica para extrair informações úteis ou modificar os dados de maneira significativa. Lidar com tais dados no PowerShell pode às vezes se tornar inconveniente de processar, especialmente em outro tipo de dado.

Para facilitar o processamento ou reduzir o número de cálculos de processamento, pode ser ideal em alguns casos converter os dados em um array de bytes e, em seguida, realizar operações sobre isso em vez dos dados originais.

Considere o seguinte código:

$data = Get-Content "a.exe"

Get-Item "a.exe" | Format-List -Property * -Force
Write-Host "File Datatype: "$data.GetType().Name

Isso gera a seguinte saída:

< Output redacted >
.
.
.
.
BaseName            : a
Target              :
LinkType            :
Length              : 400644
.
.
.
Extension           : .exe
Name                : a.exe
Exists              : True
.
.
.
.
.
Attributes          : Archive
File Datatype:  Object[]

A partir da saída acima, o arquivo que abrimos é um arquivo executável do Windows (exe). Após conferir seus atributos usando os cmdlets Get-Item e Format-List, pode-se obter uma visão significativa sobre o arquivo, especialmente o tamanho, que pode ser bastante útil durante iterações.

Um aspecto desfavorável dessa situação é que os dados do arquivo recuperados ao usar o cmdlet Get-Content retornam Object[].

Vamos ver como podemos converter isso em Byte[] para operações dependentes do cenário.

Converter Dados em um Array de Bytes no PowerShell 5+

Considere o seguinte código:

$file = "a.exe"

[byte[]]$data = Get-Content $file -Encoding Byte
Write-Host "File Datatype: "$data.GetType().Name

for ($i = 0; $i -lt 10; $i++) { Write-Host $data[$i] }

Isso gera a seguinte saída:

File Datatype:  Byte[]
Byte No 0 :  77
Byte No 1 :  90
Byte No 2 :  144
Byte No 3 :  0
Byte No 4 :  3
Byte No 5 :  0
Byte No 6 :  0
Byte No 7 :  0
Byte No 8 :  4
Byte No 9 :  0
Byte No 10 :  0

Com a conversão de tipo e o parâmetro -Encoding, é possível ler o arquivo como um array de bytes diretamente. Podemos verificar que o resultado é de fato um array de bytes usando o método GetType() e acessando sua propriedade chamada Name.

Para verificar ainda mais se os dados foram realmente convertidos corretamente, podemos escrever um pequeno loop for e imprimir alguns dos bytes do arquivo.

Converter Dados em um Array de Bytes no PowerShell 7+

Considere o seguinte código:

[byte[]]$data = Get-Content "a.exe" -AsByteStream

Write-Host $data.GetType().Name

Isso gera a seguinte saída:

textByte[]

A maior parte da sintaxe é a mesma entre as versões. A única diferença é que -Encoding Byte foi substituído por -AsByteStream.

Converter Array de Bytes em String no PowerShell

Converter qualquer array de bytes dado em uma string é fácil. Considere o seguinte código:

$array = @(0x54, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x69, 0x66, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, 0x64, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x73, 0x63, 0x61, 0x70, 0x65, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x65, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x61, 0x6e, 0x6b, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x61, 0x6e, 0x65, 0x2e)

$string = [System.Text.Encoding]::UTF8.GetString($array)
$string

O que gera a seguinte saída:

The object of life is not to be on the side of the majority but to escape finding oneself in the ranks of the insane.

Usando o método UTF8.GetString, podemos converter qualquer array de bytes codificado em UTF8 de volta à sua representação em string. Certifique-se de observar a codificação do texto, pois usar este método em outras codificações (como ASCII) pode gerar resultados anormais.

Converter String em Array de Bytes no PowerShell

De maneira semelhante a como um array de bytes pode ser convertido em sua representação em string, uma string também pode ser convertida em sua representação em bytes.

Considere o seguinte código:

$string = "Never esteem anything as of advantage to you that will make you break your word or lose your self-respect."

$bytes = [System.Text.Encoding]::Unicode.GetBytes($string)
Write-Host "First 10 Bytes of String are: "

for ($i = 0; $i -lt 10; $i++) { Write-Host $bytes[$i] }

Isso gera a saída:

First 10 Bytes of String are:
78
0
101
0
118
0
101
0
114
0

Unicode.GetBytes pode ser usado neste cenário específico para obter bytes de uma string Unicode. Certifique-se de que a string seja Unicode; caso contrário, a conversão pode resultar na perda de dados importantes.

Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Artigo relacionado - PowerShell Array