我看到很多关于将字节数组转换为字符串的问题和答案,但我的情况却截然不同,我无法找到一种方法来做我需要的事情。
我从某个 API 生成一个结果集并将其拉入变量 $jobandtasklist 中
然后我选择我想要的属性并将其导出到 csv 文件
$jobandtasklist | select Group, Name, Active, Taskname, ExitCodeResult, DatelastExecution, Description, TaskStdOutput, TaskErrOutput | Export-Csv c:\temp\ErrorReport.csv
然后我导入上述 csv 文件
$csvresults = Import-Csv -Path 'C:\temp\ErrorReport.csv'
TaskStdOutput 和 TaskErrOutput 的值如下所示
69 120 99 101 112 116 105 111 110 32 105 110 32 84 97 115 107 58 32 78 111 32 102 105 108 101 40 115 41 32 102 111 117 110 100
我希望将这些字节值转换为等效的字符串(我希望输出基本上对人眼来说是可读的)
我尝试下面
foreach ($result in $csvresults) {
If ($result.TaskStdOutput -gt 1 ) {
$result.TaskstdOutput = [System.Text.Encoding]::UTF8.GetString($result.TaskStdOutput)
}
else {
if ($result.TaskErroutput -gt 1) {
$result.TaskErrOutput = [System.Text.Encoding]::UTF8.GetString($result.TaskErrOutput)
} } }
但它会引发以下错误
无法转换参数“bytes”,其值为:“92 92 80 65 82 70 79 82 65 80 48 48 50 92 97 112 120 36 92 120 109 108 92 114 101 113 117 101 115 116 46 120 109 108 32 62 32 92 92 80 65 82 70 79 82 65 80 48 48 50 92 97 112 120 36 92 120 109 108 92 114 101 113 117 101 115 116 50 48 49 55 48 54 48 57 49 54 49 55 46 120 109 108",将“GetString”转换为类型“System.Byte[]”:“无法将值“92 92 80 65 82 70 79 82 65 80 48 48 50 92 97 112 120 36 92 120 109 108 92 114 101 113 117 101 115 116 46 120 109 108 32 62 32 92 92 80 65 82 70 79 82 65 80 48 48 50 92 97 112 120 36 92 120 109 108 92 114 101 113 117 101 115 116 50 48 49 55 48 54 48 57 49 54 49 55 46 120 109 108" 转换为类型“System.Byte[]”。错误:“无法将值“92 92 80 65 82 70 79 82 65 80 48 48 50 92 97 112 120 36 92 120 109 108 92 114 101 113 117 101 115 116 46 120 109 108 32 62 32 92” 92 80 65 82 70 79 82 65 80 48 48 50 92 97 112 120 36 92 120 109 108 92 114 101 113 117 101 115 116 50 48 49 55 48 54 48 57 49 54 49 55 46 120 109 108" 输入“System.Byte”。错误:“输入字符串格式不正确。”
我在这里做错了什么?
例如使用[System.Text.Encoding]::UTF8.GetString($jobandtasklist.TaskErrOutput)
将按照我的需要将所有字节值作为字符串返回,但这对我来说毫无用处,因为我需要根据结果转换这些值才能使它们具有任何意义(例如与特定作业相关联),而不是将所有组合的 TaskStdOutput 和 TaskErrOutput 放在一个巨大的 blob 中。