提问人:carlosmhd27 提问时间:11/17/2023 更新时间:11/17/2023 访问量:19
如何使用 Azure 函数应用以身份验证方式修改 .msapp 文件?
How to authomatically modify .msapp files using Azure Function Apps?
问:
在过去的几天里,我一直在尝试创建一个脚本来修改画布应用(Microsoft Power Platform)源文件。从本质上讲,这个想法是能够将新的 theme.json 文件发送到函数应用并接收一个有效的 .msapp 文件。正如大多数来源所建议的那样,我们可以通过解压缩 .msapp 文件、更改任何文件(在本例中为 theme.json)并使用 .msapp 扩展名再次压缩来修改它。下载源文件时,它已经附带了一个 PowerShell 5.1 脚本,该脚本完全可以做到这一点:
$AppName = Get-ChildItem -Directory -Exclude "NewMSAPP", "*RECYCLE.BIN" -Name
$NewMSAPP = ".\NewMSAPP"
# [...]
# # Compress & change extension for new MSAPP file in NewMSAPP folder
Compress-Archive -Path ".\$AppName\*" -DestinationPath "$NewMSAPP\$AppName.zip" -Update
Rename-Item -Path "$NewMSAPP\$AppName.zip" -NewName $AppName".msapp"
最大的问题是,当尝试使用 bash(在 Mac 和 Linux 上)、Python 或 C# 执行此操作时,我们收到以下错误:
由于此错误,我们决定在 PowerShell 上创建 azure 函数,这导致了相同的错误。主要原因似乎与 PowerShell 7.2 上的意外行为有关,这是 Azure Functions 上的默认且唯一的选项。我们通过在 PowerShell 7.2 中本地运行代码来确认这一点。为了缩短此错误,我们找到了 [PowerApp 语言工具]https://github.com/microsoft/PowerApps-Language-Tooling/blob/master/README.md),这是一个不错的 dotnet CLI 工具,可用于打包和解压缩 .msapp 文件。多亏了这一点,我们可以将 dotnet 包添加到 并将包安装为:Compress-Archive
requirements.psd1
dotnet tool update --global Microsoft.PowerApps.CLI.Tool
然后通过以下方式创建 .msapp 文件:
pac canvas pack --msapp ToApp.msapp --sources FromSourceFolder
有了这个,代码在本地完美运行,我们可以更改文件并打包文件夹。但是,在 Azure 函数应用上运行时,尝试使用 dotnet 安装 UnauthorizedAccessException 权限:Microsoft.PowerApps.CLI.Tool
在这个阶段,我们尝试使用 runas 命令以 admin 身份运行该命令,但我们失败了。我们想知道是否有办法在 Azure 函数应用中安装 Microsoft Power Apps CLI (pac) 包,我们无法将其添加到 PowerShell 库中,因为它不在 PowerShell 库中;或者,如果有其他方法可以使用 Azure 函数应用创建此 .msapp 文件,则可以使用任何其他编程语言。requirements.psd1
为了您的兴趣,这里是完整的代码(我留下了安装和使用 pac 包的部分注释):
$sourceDir = "TemplateTablet"
#$sourceDir = "TemplateTablet2" # Change "References" to "Src" if TemplateTablet2 is used
$appName = New-Guid
# Decodes base64 string
$decodedBytes = [System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($Base64String))
Write-Output "App name: $($appName)"
# Creates new folder
New-Item -ItemType Directory -Path "tmp\$($appName)"
# Copies template to new folder
Get-ChildItem -Path $sourceDir | Copy-Item -Destination "tmp\$($appName)" -Recurse -Container
# Check if Themes.json file exists
if(!(Test-Path "tmp\$($appName)\References\Themes.json")) { #"tmp\$($appName)\Src\Themes.json"
# Creates themes file
New-item "tmp\$($appName)\References\Themes.json" -ItemType File -Value $decodedBytes #"tmp\$($appName)\Src\Themes.json"
Write-Output "Themes.json file does not exists. Creating one."
} else {
Remove-item "tmp\$($appName)\References\Themes.json" #"tmp\$($appName)\Src\Themes.json"
New-item "tmp\$($appName)\References\Themes.json" -ItemType File -Value $decodedBytes #"tmp\$($appName)\Src\Themes.json"
Write-Output "Themes.json already exists. Deleting and creating new one."
}
# zip and rename folder
Compress-Archive -Path "tmp\$($appName)\*" -DestinationPath "tmp\$($appName).zip" -Update
Rename-Item -Path "tmp\$($appName).zip" -NewName $appName".msapp"
# dotnet tool update --global Microsoft.PowerApps.CLI.Tool
# pac canvas pack --sources "tmp\$($appName)" --msapp "HelloWorld.msapp"
# pac canvas pack --sources "tmp\$($appName)\" --msapp HelloWorld.msapp
# Encoding file to b64
答: 暂无答案
评论