远程Powershell弹出消息给所有不工作的用户

时间:2015-08-19 18:58:19

标签: powershell

我在创建远程PowerShell弹出消息时遇到了一些问题。

我有一个工作脚本,显示我要发送给远程用户的弹出消息。但是,每当我将其捆绑在.ps1脚本中并远程运行时,它都不会向登录用户发送弹出消息。我知道脚本运行正常,因为我有脚本的其他部分正确执行。我能够在本地计算机上运行弹出消息,因此它不是脚本错误。

脚本是:

Invoke-WmiMethod -Class Win32_Process -ComputerName $computer -Name Create -ArgumentList "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe \\$computer\C$\folder\script.ps1

我将这个作为.ps1的一部分运行,它以下列方式调用:

SET @foo := 0;
UPDATE yourtable SET a=a+@foo, @foo := b ORDER BY x

我正在从在Windows 7企业桌面计算机上执行命令的服务器上运行脚本作为服务帐户。目标计算机执行策略设置为不受限制,因此我知道它不是脚本执行策略问题。

我预感到它没有弹出目标计算机的原因是因为运行脚本的帐户和登录到目标计算机的帐户不同,但我可能不正确。

1 个答案:

答案 0 :(得分:1)

你的预感是正确的。 PowerShell脚本在服务帐户的上下文中运行,并且不会显示给任何已登录的用户。 (例如,如果您的脚本启动了notepad.exe,它将只为服务帐户运行。)

当您在同一帐户下本地运行命令时,您会看到它弹出。

@Adrian R是正确的,您可以使用SELECT TotalCreditDenied = COUNT(CASE WHEN StatusId = 8 THEN 1 END), TotalCreditApproved = COUNT(CASE WHEN StatusId = 7 THEN 1 END), TotalCreditPaid = SUM(CreditInvoiceAmount), OutstandingBalance = SUM(CASE WHEN StatusId = 3 THEN ApproxCreditDue END), AverageTimeToPay = AVG(DATEDIFF(day,ReturnDate, CreditInvoiceDate)) FROM Table1 WHERE ManufacturerId = 1 发送消息,或者更多的命令行友好:

msg.exe

如果要显示更复杂的内容(即完整的Windows窗体)而不是经典消息框,则需要在用户上下文中运行某些内容。一种方法是使用PsExecnet send /users message (交互式选项),而不是使用PowerShell远程处理。