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

PowerShell脚本转EXE后功能正常但上传时显示错误信息

问题分析

你的PowerShell脚本编译为EXE后,文件上传成功但显示带ERROR:前缀的进度信息,根源在于:
az storage blob upload的进度提示是通过**标准错误流(stderr)**输出的,而ps2exe编译后的程序会将所有stderr内容自动添加ERROR:前缀显示,但这些进度行并非真正的错误,只是az CLI的进度反馈。

解决方案

以下两种方案可解决问题,同时保留进度提示:

方案一:处理az输出,分离进度与错误

修改脚本中的上传命令部分,通过捕获输出并过滤,让进度正常显示,仅真正的错误才标记为错误:

# 替换原脚本中的az上传命令为以下代码
# 启动az上传进程,重定向输出到临时文件
$uploadArgs = "storage blob upload --file `"$FilePath`" --account-name $accountName --container-name $containerName/XXXX/ --auth-mode login --overwrite"
$uploadProcess = Start-Process az -ArgumentList $uploadArgs -NoNewWindow -PassThru -RedirectStandardError ".\az_stderr.tmp" -RedirectStandardOutput ".\az_stdout.tmp"

# 实时读取并显示进度
while (!$uploadProcess.HasExited) {
    # 读取最新的进度行
    $latestLine = Get-Content ".\az_stderr.tmp" -Tail 1
    if ($latestLine -match 'Alive\[.*\] \d+\.\d+%') {
        # 使用`r实现进度行覆盖,避免刷屏
        Write-Host "`r$latestLine" -NoNewline
    }
    Start-Sleep -Milliseconds 100
}

# 完成后换行,显示最终输出
Write-Host ""
Get-Content ".\az_stdout.tmp"

# 检查并输出真正的错误
$allStdErr = Get-Content ".\az_stderr.tmp"
$realErrors = $allStdErr | Where-Object { $_ -notmatch 'Alive\[.*\] \d+\.\d+%' -and $_ -ne "" }
if ($realErrors) {
    Write-Error "上传错误:`n$($realErrors -join "`n")"
}

# 清理临时文件
Remove-Item ".\az_stderr.tmp", ".\az_stdout.tmp" -ErrorAction SilentlyContinue

方案二:简化重定向输出(快速解决)

如果不需要严格区分错误和进度,可直接将az的stderr重定向到stdout,并用Write-Host输出,避免ps2exe添加ERROR:前缀:

# 替换原az上传命令
az storage blob upload --file $FilePath --account-name $accountName --container-name $containerName/XXXX/ --auth-mode login --overwrite 2>&1 | ForEach-Object {
    Write-Host $_
}
验证方法

修改脚本后,重新使用原编译命令生成EXE:

ps2exe .\Upload-Files-To-Blob.ps1 Test-Upload.exe -iconFile "upload_icon.ico" -title "Test Upload Utility" -copyright "Copyright (C) 2024" -version "1.0" -verbose

双击运行EXE后,进度信息会正常显示,不再带有ERROR:前缀。

内容的提问来源于stack exchange,提问作者JT-66

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:55:09