Array di Byte in PowerShell
- Convertire i dati in un array di byte in PowerShell
- Convertire i dati in un array di byte in PowerShell 5+
- Convertire i dati in un array di byte in PowerShell 7+
- Convertire un array di byte in stringa in PowerShell
- Convertire una stringa in un array di byte in PowerShell

Questo articolo mira a dimostrare come convertire dati presenti in varie forme in un array di byte utilizzando l’API di scripting PowerShell.
Convertire i dati in un array di byte in PowerShell
Durante l’automazione di compiti e la gestione di dati, i dati potrebbero dover essere elaborati in un modo specifico per estrarre informazioni utili o modificare i dati in modo significativo. La gestione di tali dati in PowerShell può a volte diventare scomoda da elaborare, specialmente in un altro tipo di dati.
Per rendere l’elaborazione più facile o ridurre il numero di calcoli di elaborazione, può essere ideale in alcuni casi convertire i dati in un array di byte e poi eseguire operazioni su di esso invece dei dati originali.
Considera il seguente codice:
$data = Get-Content "a.exe"
Get-Item "a.exe" | Format-List -Property * -Force
Write-Host "File Datatype: "$data.GetType().Name
Questo fornisce il seguente output:
< Output redacted >
.
.
.
.
BaseName : a
Target :
LinkType :
Length : 400644
.
.
.
Extension : .exe
Name : a.exe
Exists : True
.
.
.
.
.
Attributes : Archive
File Datatype: Object[]
Dall’output sopra, il file che abbiamo aperto è un file eseguibile Windows (exe
). Dopo aver esaminato i suoi attributi utilizzando i cmdlet Get-Item
e Format-List
, si possono ottenere intuizioni significative riguardo al file, specialmente le dimensioni, che possono rivelarsi piuttosto utili durante le iterazioni.
Un aspetto sfavorevole di questa situazione è che i dati del file recuperati utilizzando il cmdlet Get-Content
restituiscono Object[]
.
Vediamo come possiamo convertire questo in Byte[]
per operazioni dipendenti dallo scenario.
Convertire i dati in un array di byte in PowerShell 5+
Considera il seguente codice:
$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] }
Questo fornisce il seguente output:
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
Con il casting di tipo e il parametro -Encoding
, è possibile leggere il file come un array di byte direttamente. Possiamo verificare che il risultato sia effettivamente un array di byte utilizzando il metodo GetType()
e accedendo alla sua proprietà chiamata Name
.
Per verificare ulteriormente che i dati siano stati effettivamente convertiti correttamente, possiamo scrivere un piccolo ciclo for
e stampare alcuni dei byte del file.
Convertire i dati in un array di byte in PowerShell 7+
Considera il seguente codice:
[byte[]]$data = Get-Content "a.exe" -AsByteStream
Write-Host $data.GetType().Name
Questo fornisce il seguente output:
textByte[]
La maggior parte della sintassi è la stessa tra le versioni. L’unica differenza è che -Encoding Byte
è stato sostituito da -AsByteStream
.
Convertire un array di byte in stringa in PowerShell
Convertire un qualsiasi array di byte in una stringa è facile. Considera il seguente codice:
$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
Che fornisce il seguente output:
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.
Utilizzando il metodo UTF8.GetString
, possiamo convertire qualsiasi array di byte codificato in UTF8 di nuovo nella sua rappresentazione in stringa. Assicurati di prestare attenzione alla codifica del testo, poiché utilizzare questo metodo su altre codifiche (come ASCII) può dare risultati anomali.
Convertire una stringa in un array di byte in PowerShell
Analogamente a come un array di byte può essere convertito nella sua rappresentazione in stringa, una stringa può anche essere convertita nella sua rappresentazione in byte.
Considera il seguente codice:
$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] }
Questo dà l’output:
First 10 Bytes of String are:
78
0
101
0
118
0
101
0
114
0
Unicode.GetBytes
può essere utilizzato in questo scenario specifico per ottenere byte di una stringa Unicode. Assicurati che la stringa sia Unicode; in caso contrario, la conversione può comportare la perdita di dati importanti.
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