2013-07-04 2 views
11

Ich habe einige PowerShell-Code, der eine COM-API verwendet. Ich erhalte einen Type Mismatch-Fehler, wenn ich ein Byte-Array übergebe. Hier ist, wie ich das Array erschaffe, sowie eine Art InformationenErstellen von Byte [] in PowerShell

PS C:\> $bytes = Get-Content $file -Encoding byte 
PS C:\> $bytes.GetType() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  Object[]         System.Array 


PS C:\> $bytes[0].GetType() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  Byte          System.ValueType 

Stochern mit der API, habe ich festgestellt, dass es für einen Byte sucht [] mit einem Basistyp von System.Array.

Was ich versuche zu tun ist, konvertieren $ Bytes in den gleichen Typ wie $ r.data. Aus irgendeinem Grund werden $ Bytes als Objekt [] erstellt. Wie kann ich es in ein Byte [] umwandeln?

Antwort

13

Guss es in einem Byte-Array:

[byte[]]$bytes = Get-Content $file -Encoding byte 
7

Diese Antwort ist für die Frage ohne Kontext. Ich füge es wegen der Suchergebnisse hinzu.

[System.Byte[]]::CreateInstance([System.Byte],<Length>) 
+1

Vielen Dank dafür! rettete mir ein paar extra googeln –

+0

Hat nicht für mich gearbeitet. Siehe meine Antwort. – Andrew

+1

@Andrew, du hast Recht. Ich habe es korrigiert. –

2

In PS 5.1, dies:

[System.Byte[]]::CreateInstance(<Length>)

nicht für mich arbeiten. Anstatt also ich tat:

new-object byte[] 4

, die in einem leeren Byte führte [4]: ​​

0 
0 
0 
0 
+1

Das hat für mich funktioniert. –