如何在PowerShell cmdlet中使用Get-Content?

时间:2013-02-09 00:20:03

标签: c# visual-studio-2010 powershell

问题是PowerShell 3.0 cmdletC#的{​​{1}}中使用.Net Framework 4.0。{/ p>

我们正在编写需要管道输入的PowerShell cmdlet。像...

Visual Studio 2010

Receive-Bytes cmdlet需要以与Set-Content相同的方式工作。像...

Get-Content .\somefile.bin -Encoding Byte | Receive-Bytes

我们尝试了以下三个选项:

Get-Content .\somefile.bin -Encoding Byte | Set-Content otherfile.bin -Encoding Byte

但是...... byte,byte [],BinaryReader都会导致相同的错误。

[System.Management.Automation.Parameter(Position = 1, Mandatory = true, ValueFromPipeline = true)]
public byte Input { private get; set; }
public byte[] Input { private get; set; }
public System.IO.BinaryReader Input { private get; set; }

我们注意到错误重复了几次,这表明Get-Content实际上发送了几个数据块。研究并发现情况(http://brianreiter.org/2010/01/29/powershells-object-pipeline-corrupts-piped-binary-data/),但这使我们无法接近解决它。

所以......问题是:我们如何设置System.Management.Automation.Parameter以接受从Get-Content发送的字节流?

更新:下面的答案指向在Get-Content上使用-Encoding Byte,在使用...的接收字节内使用...

+ Get-Content .\somefile.bin | Receive-Bytes
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: [Receive-Bytes], ParameterBindingException
+ FullyQualifiedErrorId : 

Receive-Bytes : The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.

IConvertible获取数据。但我们在Receive-Bytes中获得的内容与我们使用Get-Content选择的源文件不匹配。

那么......我们如何设置参数以将IConvertible更改回字节流?

1 个答案:

答案 0 :(得分:0)

看看this article

接近结束时,示例7似乎涵盖了您的问题。