Tableau d'octets dans PowerShell

  1. Convertir des données en un tableau d’octets dans PowerShell
  2. Convertir des données en un tableau d’octets dans PowerShell 5+
  3. Convertir des données en un tableau d’octets dans PowerShell 7+
  4. Convertir un tableau d’octets en chaîne dans PowerShell
  5. Convertir une chaîne en tableau d’octets dans PowerShell
Tableau d'octets dans PowerShell

Cet article vise à démontrer comment convertir des données présentes sous diverses formes en un tableau d’octets en utilisant l’API de script PowerShell.

Convertir des données en un tableau d’octets dans PowerShell

Lors de l’automatisation des tâches et de la gestion des données, les données peuvent nécessiter d’être traitées d’une manière spécifique pour extraire des informations utiles ou modifier les données de manière significative. La gestion de telles données dans PowerShell peut parfois devenir peu pratique à traiter, en particulier dans un autre type de données.

Pour faciliter le traitement ou réduire le nombre de calculs de traitement, il peut être idéal dans certains cas de convertir les données en un tableau d’octets et ensuite effectuer des opérations sur cela au lieu des données originales.

Considérons le code suivant :

$data = Get-Content "a.exe"

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

Cela donne la sortie suivante :

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

À partir de la sortie ci-dessus, le fichier que nous avons ouvert est un fichier exécutable Windows (exe). Après avoir examiné ses attributs en utilisant les cmdlets Get-Item et Format-List, des informations significatives peuvent être obtenues concernant le fichier, en particulier la taille, ce qui peut se révéler très utile lors d’itérations.

Un aspect défavorable de cette situation est que les données de fichier récupérées en utilisant la cmdlet Get-Content est que Object[] est renvoyé.

Voyons comment nous pouvons convertir cela en Byte[] pour des opérations dépendant du scénario.

Convertir des données en un tableau d’octets dans PowerShell 5+

Considérons le code suivant :

$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] }

Cela donne la sortie suivante :

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

Avec le casting de type et le paramètre -Encoding, il est possible de lire le fichier directement en tant que tableau d’octets. Nous pouvons vérifier que le résultat est effectivement un tableau d’octets en utilisant la méthode GetType() et en accédant à sa propriété nommée Name.

Pour vérifier davantage que les données ont bien été converties correctement, nous pouvons écrire une petite boucle for et imprimer certains des octets du fichier.

Convertir des données en un tableau d’octets dans PowerShell 7+

Considérons le code suivant :

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

Write-Host $data.GetType().Name

Cela donne la sortie suivante :

textByte[]

La plupart de la syntaxe est la même entre les versions. La seule différence est que -Encoding Byte a été remplacé par -AsByteStream.

Convertir un tableau d’octets en chaîne dans PowerShell

Convertir n’importe quel tableau d’octets donné en une chaîne est facile. Considérons le code suivant :

$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

Ce qui donne la sortie suivante :

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.

En utilisant la méthode UTF8.GetString, nous pouvons convertir n’importe quel tableau d’octets codé en UTF8 à nouveau dans sa représentation sous forme de chaîne. Assurez-vous de faire attention à l’encodage du texte, car l’utilisation de cette méthode sur d’autres encodages (comme ASCII) peut donner des résultats anormaux.

Convertir une chaîne en tableau d’octets dans PowerShell

De manière similaire à la façon dont un tableau d’octets peut être converti en sa représentation sous forme de chaîne, une chaîne peut également être convertie en sa représentation sous forme d’octets.

Considérons le code suivant :

$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] }

Cela donne la sortie :

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

Unicode.GetBytes peut être utilisé dans ce scénario spécifique pour obtenir les octets d’une chaîne Unicode. Assurez-vous que la chaîne est Unicode ; sinon, la conversion peut entraîner la perte de données importantes.

Vous aimez nos tutoriels ? Abonnez-vous à DelftStack sur YouTube pour nous aider à créer davantage de tutoriels vidéo de haute qualité. Abonnez-vous
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

Article connexe - PowerShell Array