旧情况:我有一个 .bat 文件,它复制一些文件,然后使用给定的脚本启动 powershell。此脚本将启动 PowerBI,然后执行一些查询并从 PowerBI 导出。当用户登录并仅锁定其 PC 时,由 taskscheduler 启动时,此操作可正常工作。
当前情况:我正在转移到 Windows 服务器,而不是使用带有 Windows 桌面的单独计算机。我将任务复制到服务器并将其更改为“无论用户是否登录都运行”。
我注意到,如果我在任务调度程序上强制“运行”,它会以某种隐藏模式运行(尽管我没有选中“隐藏”复选框),所以我看不到 PowerBI 启动。我猜它没有启动,因为我的 powershell 脚本在需要在 powershell 中查找数据的地方进一步失败了。
log_message "***********************************************"
log_message "Executing PBI_Exporter.ps1 at $($executionDate)"
log_message "Launching Power BI"
$template = "C:\LiveData\Eisen.pbix"
$PBIDesktop = "C:\Program Files\Microsoft Power BI Desktop\bin\PBIDesktop.exe"
$app = START-PROCESS $PBIDesktop $template -PassThru
log_message "Waiting $($waitoPBD) seconds for PBI to launch"
Start-Sleep -s $waitoPBD
log_message "Assuming PBI is launched and ready now"
$pathtofile = (Get-ChildItem -Path c:\users -Filter msmdsrv.port.txt -Recurse -ErrorAction SilentlyContinue -Force | sort LastWriteTime | select -last 1).FullName
$port = gc $pathtofile
$port = $port -replace '\D',''
$dataSource = "localhost:$port"
$pathtoDataBase_Name = $pathtofile -replace 'msmdsrv.port.txt',''
$Database_Name = Get-ChildItem -Path $pathtoDataBase_Name -Filter *.db.xml -Recurse -ErrorAction SilentlyContinue -Force
$Database_Name = $Database_Name.ToString().Split(".") | select -First 1
我可以确认 powershell 脚本至少被执行了,因为我可以看到日志文件被创建,并且它一直运行到它假设 PowerBI 已启动的消息。紧接着我收到一个错误无法将参数绑定到参数“Path”,因为它为空。所以我认为由于 powerBI 未执行,因此它为空。
有什么方法可以确认这一点(也许是一些 try/catch 块?)和/或解决这个问题?
答案1
这 ...
$app = START-PROCESS $PBIDesktop $template -PassThru
永远不会运行,因为您没有在任何地方的代码中调用它。
为什么要将标准 PowerShell 单行命令发送给变量?
那条线不正常,应该就是这样的......
START-PROCESS $PBIDesktop $template -PassThru
最后,当从 PowerShell 运行外部 exe 时,必须考虑并落实一些事项,才能使它们正常工作。请参阅...