如何在Azure Functions中运行PowerShell脚本操作ADLS Gen2容器文件
在Azure Function中运行PowerShell脚本处理ADLS Gen2文件的操作步骤
前置准备
- 创建Azure Function资源,运行时栈选择PowerShell Core,版本建议选7.2及以上
- 为函数配置ADLS Gen2访问权限:启用函数的系统托管身份,给该身份分配对应ADLS Gen2容器的「存储Blob数据参与者」角色;也可以将存储账户连接字符串存入函数应用配置,键名为
ADLS_Storage_ConnString
步骤1:配置依赖模块
在函数应用的requirements.psd1文件中添加Az.Storage模块依赖,确保可以调用ADLS Gen2操作命令:
@{ 'Az.Storage' = '6.*' }
步骤2:编写适配Azure Function的PowerShell脚本
你原有的本地脚本无法直接在函数中运行,需要先完成ADLS Gen2的连接挂载,再执行对应操作,调整后参考代码如下:
# 引入依赖模块 Import-Module Az.Storage # 连接存储账户,此处使用应用配置中存储的连接字符串 $connString = $env:ADLS_Storage_ConnString $storageContext = New-AzStorageContext -ConnectionString $connString $containerName = "你的ADLS容器实际名称" # 挂载ADLS Gen2容器为PowerShell驱动器,即可兼容原生文件操作命令 New-PSDrive -Name ADLS -PSProvider AzureStorage -Root $containerName -Context $storageContext | Out-Null Set-Location ADLS: # --- 原有业务逻辑适配实现 --- # 1. 重命名目标目录下的txt文件 Get-ChildItem 'Inbound/BOB/2021/09/*.txt' | ForEach-Object { # 执行第一次重命名规则 $newName1 = $_.BaseName.Substring(0, $_.BaseName.Length - 16) + $_.Extension -replace "_"," " $_ | Rename-Item -NewName $newName1 -Force # 执行第二次重命名规则,截取名称第8位之后的内容 $renamedFile = Get-Item $newName1 $newName2 = $renamedFile.Name.Substring(8) $renamedFile | Rename-Item -NewName $newName2 -Force } # 2. 替换文件内的双竖线分隔符为单竖线 Get-ChildItem 'Inbound/BOB/2021/09/*.txt' | ForEach-Object { $content = Get-Content $_.FullName -Raw $content = $content.Replace('||', '|') $content | Set-Content $_.FullName -Force }
注意事项
- 原脚本中重复执行了两次替换操作,属于冗余代码,调整后已经移除重复逻辑
- 如果需要动态适配年月路径,可以将硬编码的
2021/09替换为Get-Date -Format "yyyy/MM"自动生成 - 触发方式可根据需求选择:定时批量处理选Timer Trigger,文件上传后自动处理选Blob Trigger
内容的提问来源于stack exchange,提问作者Azeem khan
相关产品推荐
相关产品推荐

