2009-08-15 22 views
3

这是C#代码。你能帮我把这个翻译成PowerShell吗?我可以在PowerShell中执行此操作吗?阅读注册表,将二进制内容写入文件

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

回答

10

你不想因为它输出作为一个字符串,并使用Unicode开机使用,输出文件。基于类似的注册表项下面的工作:

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

注意,当你想要什么获取写入文件,特别是如果你想写原始字节更直接的控制设定的内容是非常有用的。

+0

+1我不知道Set-Content。太好了! – 2009-08-15 17:35:26

-1

请尝试以下

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

注意:out-file不会以二进制格式保存数据。它将采用字节数组并将每个字节写入显示数字。 – 2009-08-15 17:22:53

+0

是的,Out-File不是一个好的选择。这意味着将数据写入文件的方式与控制台中显示的方式相同。 – JasonMArcher 2009-08-16 03:54:37

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' 
} 

我要离开我以前的答复(见上文)从PowerShell中访问.NET对象的示例;但看到基思 - 希尔的回答后,我不得不修改我的使用设置的内容,以及:

$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' 
} 
相关问题