Byte-Array in PowerShell
- Konvertieren Sie Daten in ein Byte-Array in PowerShell
- Konvertieren Sie Daten in ein Byte-Array in PowerShell 5+
- Konvertieren Sie Daten in ein Byte-Array in PowerShell 7+
- Konvertieren Sie ein Byte-Array in PowerShell in einen String
- Konvertieren Sie eine Zeichenfolge in ein Byte-Array in PowerShell
Dieser Artikel soll zeigen, wie Daten, die in verschiedenen Formen vorliegen, mithilfe der PowerShell-Skripting-API in ein Byte-Array konvertiert werden.
Konvertieren Sie Daten in ein Byte-Array in PowerShell
Bei der Automatisierung von Aufgaben und der Verarbeitung von Daten müssen die Daten möglicherweise auf eine bestimmte Weise verarbeitet werden, um nützliche Informationen zu extrahieren oder Daten auf sinnvolle Weise zu ändern. Der Umgang mit solchen Daten in PowerShell kann manchmal unbequem zu verarbeiten sein, insbesondere bei einem anderen Datentyp.
Um die Verarbeitung zu vereinfachen oder die Anzahl der Verarbeitungsberechnungen zu reduzieren, kann es in manchen Fällen ideal sein, die Daten in ein Byte-Array zu konvertieren und dann anstelle der ursprünglichen Daten Operationen darauf durchzuführen.
Betrachten Sie den folgenden Code:
$data = Get-Content "a.exe"
Get-Item "a.exe" | Format-List -Property * -Force
Write-Host "File Datatype: "$data.GetType().Name
Dies ergibt die folgende Ausgabe:
< Output redacted >
.
.
.
.
BaseName : a
Target :
LinkType :
Length : 400644
.
.
.
Extension : .exe
Name : a.exe
Exists : True
.
.
.
.
.
Attributes : Archive
File Datatype: Object[]
Aus der obigen Ausgabe ist die Datei, die wir geöffnet haben, eine ausführbare Windows-Datei (exe
). Nachdem man sich ihre Attribute mit den Cmdlets Get-Item
und Format-List
angesehen hat, können aussagekräftige Einblicke in die Datei gewonnen werden, insbesondere in Bezug auf die Größe, was sich bei Iterationen als sehr nützlich erweisen kann.
Ein ungünstiger Aspekt dieser Situation ist, dass die abgerufenen Dateidaten mithilfe des Cmdlets Get-Content
darin bestehen, dass Object[]
zurückgegeben wird.
Mal sehen, wie wir das für szenarioabhängige Operationen in Byte[]
umwandeln können.
Konvertieren Sie Daten in ein Byte-Array in PowerShell 5+
Betrachten Sie den folgenden Code:
$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] }
Dies ergibt die folgende Ausgabe:
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
Mit Type Casting und dem Parameter -Encoding
ist es möglich, die Datei direkt als Byte-Array auszulesen. Wir können überprüfen, ob das Ergebnis tatsächlich ein Byte-Array ist, indem wir die Methode GetType()
verwenden und auf ihre Eigenschaft namens Name
zugreifen.
Um weiter zu überprüfen, ob die Daten tatsächlich korrekt konvertiert wurden, können wir eine kleine for
-Schleife schreiben und einige der Bytes der Datei drucken.
Konvertieren Sie Daten in ein Byte-Array in PowerShell 7+
Betrachten Sie den folgenden Code:
[byte[]]$data = Get-Content "a.exe" -AsByteStream
Write-Host $data.GetType().Name
Dies ergibt die folgende Ausgabe:
textByte[]
Der größte Teil der Syntax ist zwischen den Versionen gleich. Der einzige Unterschied besteht darin, dass -Encoding Byte
durch -AsByteStream
ersetzt wurde.
Konvertieren Sie ein Byte-Array in PowerShell in einen String
Das Konvertieren eines beliebigen Byte-Arrays in einen String ist einfach. Betrachten Sie den folgenden Code:
$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
Was die folgende Ausgabe ergibt:
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.
Mit der Methode UTF8.GetString
können wir jedes UTF8-codierte Byte-Array wieder in seine String-Darstellung umwandeln. Achten Sie unbedingt auf die Codierung des Textes, da die Verwendung dieser Methode bei anderen Codierungen (z. B. ASCII) zu anormalen Ergebnissen führen kann.
Konvertieren Sie eine Zeichenfolge in ein Byte-Array in PowerShell
Ähnlich wie ein Byte-Array in seine String-Darstellung konvertiert werden kann, kann auch ein String in seine Byte-Darstellung konvertiert werden.
Betrachten Sie den folgenden Code:
$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] }
Dies ergibt die Ausgabe:
First 10 Bytes of String are:
78
0
101
0
118
0
101
0
114
0
Unicode.GetBytes
kann in diesem speziellen Szenario verwendet werden, um Bytes einer Unicode-Zeichenfolge zu erhalten. Stellen Sie sicher, dass die Zeichenfolge Unicode ist; andernfalls kann die Konvertierung zum Verlust wichtiger Daten führen.
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