Azure Function中PowerShell将PSCustomObject数组转为CSV的问题
解决PowerShell数组转CSV时返回元数据的问题
问题出在ConvertTo-Csv的-InputObject参数处理逻辑上:当你直接传入整个System.Array对象时,它会把数组本身当作单个对象来序列化,输出的自然是数组的元数据(比如Length、LongLength这些属性),而不是数组里每个PSCustomObject的内容。
两种解决方法:
优先用管道传递数组:PowerShell管道会自动枚举数组中的每个元素,
ConvertTo-Csv会逐个处理每个PSCustomObject,生成符合预期的CSV格式:$csvContent = $new_users | ConvertTo-Csv -NoTypeInformation若必须用
-InputObject:需要手动展开数组,确保参数接收的是数组中的元素而非整个数组对象(这种方式不如管道直观,不推荐):$csvContent = ConvertTo-Csv -InputObject $new_users[0..($new_users.Count-1)] -NoTypeInformation
Azure Function完整示例代码
using namespace System.Net param($Request, $TriggerMetadata) # 读取输入Blob的CSV内容 $inputCsv = Get-Content -Path $TriggerMetadata.InputBlobPath -Raw | ConvertFrom-Csv # 处理数据生成PSCustomObject数组(示例逻辑,根据你的需求修改) $new_users = $inputCsv | ForEach-Object { [PSCustomObject]@{ # 保持与输入CSV一致的列名和格式 Username = $_.Username FullName = $_.FullName Department = $_.Department # 这里可以添加你的处理逻辑,比如新增字段或修改值 ProcessedDate = Get-Date -Format "yyyy-MM-dd" } } # 正确转换为CSV $outputCsv = $new_users | ConvertTo-Csv -NoTypeInformation # 写入输出Blob容器 $outputPath = "output.csv" Set-Content -Path $outputPath -Value $outputCsv -Encoding UTF8 Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{ StatusCode = [HttpStatusCode]::OK Body = "处理完成,结果已写入output.csv" })
内容的提问来源于stack exchange,提问作者ABF
相关产品推荐
相关产品推荐

