質問は、inでPowerShell 3.0
cmdlet
使用するためのものです。C#
.Net Framework 4.0
Visual Studio 2010
パイプラインからの入力を必要とする PowerShell コマンドレットを作成しています。お気に入り...
Get-Content .\somefile.bin -Encoding Byte | Receive-Bytes
Receive-Bytes コマンドレットは、Set-Content と同じように機能する必要があります。お気に入り...
Get-Content .\somefile.bin -Encoding Byte | Set-Content otherfile.bin -Encoding Byte
次の 3 つのオプションを試しました。
[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; }
しかし... byte、byte[]、BinaryReader はすべて同じエラーになります。
+ 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.
エラーが数回繰り返されることに気付きました。これは、Get-Content が実際に複数のデータ チャンクを送信していたことを示唆しています。調査の結果、そうであることがわかりました ( http://brianreiter.org/2010/01/29/powershells-object-pipeline-corrupts-piped-binary-data/ ) が、それでは解決に近づきません。
そこで... 問題は、Get-Content から送信されたバイト ストリームを受け入れるように System.Management.Automation.Parameter をどのようにセットアップするかということです。
更新: 以下の回答は、Get-Content で -Encoding Byte を使用し、Receive-Bytes 内で使用することを示しています...
public IConvertible Input { private get; set; }
IConvertible はデータを取得します。しかし、Receive-Bytes で取得した内容は、Get-Content で選択したソース ファイルと一致しません。
では、IConvertible をバイト ストリームに戻すには、パラメータをどのように設定すればよいでしょうか。