ActiveBatch ExecutePowerShellScript将字节数组转换为字符串

时间:2012-05-24 11:31:42

标签: .net powershell encoding bytearray

我正在尝试使用ActiveBatch ExecutePowerShellScript 作业步骤将System.Byte[]转换为字符串。 ActiveBatch作业步骤有一个属性来指定InputObjects,我将其设置为上一个作业步骤的输出(这只是作业步骤编辑器中的一个字段,而不是PowerShell代码)。然后,您显然可以访问PowerShell脚本中名为$input的变量..

只有$input我得到一个转换为整数的字节列表。使用$input | gm我得到:

There are 25 output objects generated by the Powershell script

   TypeName: System.Byte[]

Name           MemberType    Definition                                         
----           ----------    ----------                                         
Count          AliasProperty Count = Length     
Address        Method        System.Byte&, mscorlib, Version=2.0.0.0, Culture...

如果我尝试[System.Text.Encoding]::Unicode.GetString($input),我会:

  

执行PowerShell脚本时遇到异常:找不到重载   对于“GetString”和参数计数:“1”。

如果我尝试[System.Text.Encoding]::Unicode.GetString(,$input),我会:

  

执行PowerShell脚本时遇到异常:在方法中缺少')'   调用

如果我尝试:

[byte[]]$bytes = $input
[System.Text.Encoding]::Unicode.GetString($bytes)

我明白了:

  

执行PowerShell脚本时遇到异常:无法转换   “System.Management.Automation.Runspaces.PipelineReader 1+<GetReadEnumerator>d__0[System.Object]" value of type "System.Management.Automation.Runspaces.PipelineReader 1 + d__0 [[System.Object的,   mscorlib,版本= 2.0.0.0,文化=中性,   PublicKeyToken = b77a5c561934e089]]“输入”System.Byte []“。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

$bytes = $input | Select-Object
[System.Text.Encoding]::ASCII.GetString($bytes)

显然你必须使用Select-Object,字节数组是以ASCII而不是unicode形式出现的。