![如何在现有会话中启动应用程序](https://linux22.com/image/1407138/%E5%A6%82%E4%BD%95%E5%9C%A8%E7%8E%B0%E6%9C%89%E4%BC%9A%E8%AF%9D%E4%B8%AD%E5%90%AF%E5%8A%A8%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
当计划任务运行时,我希望在桌面上打开 Powershell 窗口来跟踪日志文件并查看进度。具体来说,我希望任务在桌面上打开窗口并运行Get-Content C:\LogFile.txt -Wait
。当任务完成后,我希望它关闭 powershell 窗口。
有没有办法在另一个用户下启动图形窗口?据我发现,大多数命令将在指定用户的权限下运行,但不会在桌面上创建窗口。
如果它可以在任务启动时以登录的用户身份运行而不是硬编码用户身份运行,那就更好了。
编辑:到目前为止,我有下面的代码。它在一定程度上有效。它创建了尾随窗口,但当我调用$p.kill()
它时,它会终止 psexec 进程,但不会终止 powershell 进程。我可以Ctrl-C
向 powershell 窗口发送一个吗?
# start tailing the log
$psexec = 'c:\psexec.exe'
$arguments = '-i powershell.exe -windowstyle maximized -command "& {get-content c:\logs\task_log.log -wait}"'
$p = start-process $psexec -argumentlist $arguments -passthru
# start the task
Some-task.exe
# kill the tail
$p.kill()
答案1
首先,您需要 PSExec.exe,它是免费的,由 sys internals 组提供。您需要一个类似这样的命令:
psexec \\RemoteComputer "%systemroot%\system32\windowspowershell\v1.0\powershell.exe" -u username -p password -i -h
阅读 PSExec 帮助文件并尝试各种设置。您最感兴趣的是“-i”开关,因为它指示要交互的会话。只需使用不带会话 ID 的“-i”(如示例中所示),psexec 就会选择一个。如果没有可用的会话 ID,它将使用会话 0。
您甚至可能会发现New-PSSession
和Enter-PSSession
Powershell cmdlet 更适合您的需求。在您的计算机上,在 powershell 中运行以下命令:
$Session = New-PSSession -ComputerName computer.domain.com
Enter-PSSession -Session $Session
当您运行这些命令时,您机器上的终端将成为远程机器上的终端。您在远程会话中输入的命令将在远程机器上执行,并将输出反馈给您的机器。完成后,输入命令Exit-PSSession
即可返回您自己的会话。