2009-08-15 4 views
3

Dies ist der C# -Code. Kannst du mir helfen, dies in Powershell zu übersetzen?Kann ich das in Powershell tun? Lesen Sie die Registrierung, schreiben Sie binäre Inhalte in Datei

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."); 
    } 
} 

Antwort

10

Sie haben keine Out-File verwenden möchten, weil es gibt als String und verwendet Unicode zu booten. Die folgenden Arbeiten basieren auf einer ähnlichen Registrierungseintrag:

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

Beachten Sie, dass Set-Content ist nützlich, wenn Sie mehr direkte Kontrolle über wollen, was vor allem auf eine Datei geschrieben wird, wenn Sie rohe Bytes schreiben möchten.

+0

+1 Ich wusste nichts über Set-Content. Nett! –

-1

Versuchen Sie, die folgenden

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

Hinweis: Out-File speichert die Daten nicht im Binärformat. Es wird das Byte-Array nehmen und jedes Byte als eine Display-Nummer ausgeben. –

+0

Ja, Out-File ist keine gute Wahl. Es soll Daten in eine Datei schreiben, so wie es in der Konsole angezeigt wird. – 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' 
} 

ich meine Antwort zu verlassen (siehe oben) als Beispiel für .NET-Objekte von Powershell-Zugriff; aber nach keith-hill Antwort zu sehen hatte ich meine zu revidieren Set-Inhalt zu verwenden, wie gut:

$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' 
} 
Verwandte Themen