You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建PowerShell Azure Function实现CSV转制表符分隔TXT文件

PowerShell Azure Function 实现Blob CSV转制表符TXT方案

前置准备

  • 创建PowerShell 7.0+ 运行时的Azure Function(推荐选Runtime栈版本~4),触发器优先选Blob触发器,直接监控你存放abc.csv的存储容器,文件匹配规则填*.csv,Logic App生成完CSV文件会自动触发函数,不用额外做Logic App到Function的调用配置。
  • 给Function开启系统分配托管标识,到目标存储账号的访问控制(IAM)页面,给这个托管标识分配存储Blob数据参与者角色,不用硬编码存储密钥。
  • 打开Function的requirements.psd1配置文件,取消Az.Storage模块的注释,保存后平台会自动安装依赖模块,不用手动上传。
  • 给Function加输出Blob绑定,目标路径填对应容器下的{name}.txt,也就是源文件叫abc.csv的话,自动生成abc.txt作为输出文件。

核心脚本(Function入口run.ps1)

using namespace System.IO
using namespace Microsoft.WindowsAzure.Storage.Blob

# 接收触发器传入的输入Blob流
param([Stream]$inputBlob, $TriggerMetadata)

# 读取输入Blob的CSV内容,自动解析CSV结构,避免字段内逗号导致转换错误
$reader = New-Object StreamReader($inputBlob)
$csvContent = $reader.ReadToEnd() | ConvertFrom-Csv
$reader.Close()

# 转换为制表符分隔格式,去掉多余的类型头信息
$tsvContent = $csvContent | ConvertTo-Csv -Delimiter "`t" -NoTypeInformation | Out-String

# 直接推送到输出绑定的Blob,不需要手动写存储连接逻辑
Push-OutputBinding -Name outputBlob -Value ([MemoryStream]::new([Text.Encoding]::UTF8.GetBytes($tsvContent)))

可选:不用输出绑定、手动调用存储SDK的写法

如果需要自定义目标存储路径、或者跨存储账号操作,可以用托管标识直接拿存储客户端操作,不需要连接字符串:

# 拿到当前Function的托管标识凭证
$ctx = New-AzStorageContext -StorageAccountName "你的存储账号名" -UseConnectedAccount

# 读取源Blob内容
$tempSourcePath = Join-Path $env:TEMP "abc.csv"
Get-AzStorageBlobContent -Container "你的源容器名" -Blob "abc.csv" -Destination $tempSourcePath -Context $ctx -Force
$csvContent = Import-Csv -Path $tempSourcePath

# 转换格式后写入目标Blob
$tsvTempPath = Join-Path $env:TEMP "abc.txt"
$csvContent | Export-Csv -Path $tsvTempPath -Delimiter "`t" -NoTypeInformation -Encoding UTF8
Set-AzStorageBlobContent -File $tsvTempPath -Container "你的目标容器名" -Blob "abc.txt" -Context $ctx -Force

# 清理临时文件
Remove-Item $tempSourcePath, $tsvTempPath -Force

注意事项

  • 绝对不要用(Get-Content xxx).Replace(',', "t")`这种简单替换的写法,只要CSV字段里有被双引号包裹的逗号(比如地址、备注类字段),转换后的文件会直接列错位。
  • 处理超过100MB的大CSV文件时,不要把全量内容读进内存,改成逐行读取解析的流式逻辑,避免函数内存超限被强制终止。
  • 函数应用的应用设置里别硬存存储连接字符串,用托管标识鉴权的方式,后续存储密钥轮换也不需要改函数配置。
  • 如果需要保留Logic App主动调用的逻辑,把触发器换成HTTP触发器,在请求体里传入源Blob的容器名、文件名参数,替换脚本里的硬编码路径值就行。

兼容性提示:如果你的CSV带GBK等非UTF8编码,读取内容的时候给StreamReader指定对应编码参数即可,默认是UTF8无BOM格式,适配绝大多数场景。

内容的提问来源于stack exchange,提问作者user13747070

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.05 16:15:46