2013-07-04 1 views
11

Ho un codice PowerShell che utilizza un'API COM. Ricevo un errore di mancata corrispondenza di tipo quando passo in un array di byte. Ecco come sto creando la matrice, così come alcune informazioni di tipoCreazione di 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 

Gironzolando con l'API, ho scoperto che è alla ricerca di un byte [] con un tipo di base di System.Array.

PS C:\> $r.data.GetType() 

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

PS C:\> $r.data[0].gettype() 

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

Quello che sto cercando di fare è convertire $ byte nello stesso tipo di $ r.data. Per qualche motivo, $ byte viene creato come oggetto []. Come posso lanciarlo su un Byte []?

risposta

13

Fusioni in un array di byte:

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

Questa risposta è per la domanda senza contesto. Lo aggiungo a causa dei risultati di ricerca.

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

Grazie per questo! mi ha salvato un sacco di googling in più –

+0

Non ha funzionato per me. Vedi la mia risposta. – Andrew

+1

@ Andrew, hai ragione. L'ho corretto –

2

In PS 5.1, questo:

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

non ha funzionato per me. Così, invece ho fatto:

new-object byte[] 4

che ha portato in un byte vuoto [4]: ​​

0 
0 
0 
0 
+1

Questo ha funzionato per me. –