Windows 服务器任务计划程序启动 powershell 来启动 powerBI

Windows 服务器任务计划程序启动 powershell 来启动 powerBI

旧情况:我有一个 .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 时,必须考虑并落实一些事项,才能使它们正常工作。请参阅...

PowerShell:运行可执行文件

解决 PowerShell 中的外部命令行问题

在 Powershell 中运行外部命令的 5 大技巧

正确执行 PowerShell 中的外部命令

使用 Windows PowerShell 运行旧的命令行工具(及其最奇怪的参数)

另请参阅重定向 powershell-pipe 外部命令输出到另一个外部命令

相关内容