2009-08-15 3 views
3

Ceci est le code C#. Pouvez-vous m'aider à traduire cela en PowerShell?Puis-je faire cela en PowerShell? Lire le registre, écrire les contenus binaires dans le fichier

private static void Main(string[] args) 
{ 
    byte[] buffer = (byte[]) Registry.LocalMachine.OpenSubKey(@"HARDWARE\ACPI\DSDT\HP____\8510x\00010000").GetValue("00000000"); 
    if (File.Exists("8510x.orig")) 
    { 
     Console.WriteLine("File 8510x.orig already exists."); 
    } 
    else 
    { 
     using (FileStream stream = new FileStream("8510x.orig", FileMode.CreateNew)) 
     { 
      stream.Write(buffer, 0, buffer.Length); 
      stream.Flush(); 
      stream.Close(); 
     } 
     Console.WriteLine("Wrote 8510x.orig."); 
    } 
} 

Répondre

10

Vous ne voulez pas utiliser Out-File, car il produit comme une chaîne et utilise unicode pour démarrer. Les travaux suivants à partir d'une entrée de registre similaire:

$b = Get-ItemProperty HKLM:\HARDWARE\ACPI\DSDT\A7546\A7546011\00000011 00000000 
$b.'00000000' | Set-Content foo.txt -enc byte 

Notez que Set-Content est utile lorsque vous souhaitez un contrôle plus direct sur ce qui est écrit dans le fichier, surtout si vous voulez écrire octets bruts.

+0

+1 Je ne connaissais pas Set-Content. Agréable! –

-1

Effectuez les opérations suivantes

$a = gp "hklm:\HARDWARE\ACPI\DSDT\HP____\8510x\0001000" "00000000" 
$a."00000000" | out-file 8610x.orig 
+0

Remarque: out-file ne conserve pas les données au format binaire. Il prendra le tableau d'octets et écrira chaque octet comme un numéro d'affichage. –

+0

Oui, Out-File n'est pas un bon choix. Il est destiné à écrire des données dans un fichier de la même manière qu'il est affiché dans la console. – JasonMArcher

4
$a = gp 'HKLM:\HARDWARE\ACPI\DSDT\HP____\8510x\0001000' '00000000' 

if (test-path 8510x.orig) 
{ 
    echo 'File 8510x.orig already exists.' 
} 
else 
{ 
    [System.IO.File]::WriteAllBytes("8510x.orig",$a."00000000") 
    echo 'Wrote 8510x.orig' 
} 

Je quitte ma réponse précédente (ci-dessus) comme un exemple d'accéder à des objets .NET à partir PowerShell; mais après avoir vu la réponse de keith-hill je devais moi réviser pour utiliser contenu mis ainsi:

$a = gp HKLM:\HARDWARE\ACPI\DSDT\HP____\8510x\0001000 00000000 

if (test-path 8510x.orig) 
{ 
    echo 'File 8510x.orig already exists.' 
} 
else 
{ 
    $a.'00000000' | Set-Content 8510x.orig -enc byte 
    echo 'Wrote 8510x.orig' 
} 
Questions connexes