PowerShell对象数据写入Azure Blob时CSV无换行问题求助
PowerBI活动日志转CSV上传Blob后记录同行问题解决
问题原因
ConvertTo-Csv返回的是字符串数组,每个元素对应CSV的一行。直接将该数组传入[System.Text.Encoding]::UTF8.GetBytes()时,PowerShell会隐式把数组转换为单个字符串,元素之间默认用空格拼接,最终导致所有记录挤在同一行。
解决方法
需要先把CSV行数组用换行符拼接成完整的CSV格式字符串,再转换为字节数组上传。修改代码中生成内容的部分即可:
修正后的完整代码
# Get PowerBI metrics $Result = Get-PowerBIActivityEvent -StartDateTime 2023-03-13T23:58:59 -EndDateTime 2023-03-13T23:59:59 $Result = ($Result | ConvertFrom-Json) | Select-Object * $Result = $Result | ConvertTo-Csv -NoTypeInformation Connect-AzAccount -ServicePrincipal -TenantId $TenantId -Credential $Credential # Create a context object using Azure AD credentials $ctx = New-AzStorageContext -StorageAccountName $accountName -UseConnectedAccount $container = Get-AzStorageContainer -Name $containerName -Context $ctx $date_loaded = (Get-Date -Format "MMddyyyy").ToString() # 关键修改:将CSV行数组用换行符拼接为完整字符串 $csvFullContent = $Result -join "`r`n" $content = [System.Text.Encoding]::UTF8.GetBytes($csvFullContent) $container.CloudBlobContainer.GetBlockBlobReference($date_loaded + ".csv").UploadFromByteArray($content, 0, $content.Length)
关键修改说明
- 用
-join "rn"将数组中的每一行CSV内容拼接成带Windows标准换行符的完整字符串(如果需要适配Unix环境,可改用-join "n"`) - 再将拼接后的完整字符串转换为字节数组,上传后就能保持每行一条记录的CSV格式
内容的提问来源于stack exchange,提问作者Oleg Kazanskyi
相关产品推荐
相关产品推荐

