无法让 Exchange PowerShell 脚本在计划任务下运行

无法让 Exchange PowerShell 脚本在计划任务下运行

我有一个 PowerShell 脚本,直接输入到 PowerShell 中即可运行。PowerShell 程序使用以下快捷方式运行:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\bin\exshell.psc1" -noexit -command ". 'C:\Program Files\Microsoft\Exchange Server\bin\Exchange.ps1'"

我在 Windows 任务计划程序中尝试了大约 10 种不同的方法,首先打开上面的快捷方式,然后运行我保存的脚本文件,但不起作用。它挂在“正在运行”上。

该脚本位于此处:

Z:\Exchange PowerShell\MailboxesApproachingOverQuota.ps1

请注意,脚本内容可以复制并粘贴到上面的 PowerShell 快捷方式中,并且它可以正常运行,并按要求通过电子邮件将输出发送给我。

请注意,我使用的 PowerShell 实例来自上面显示的快捷方式,其中已经有参数 - 因此我不知道在任务计划程序中应该放在哪里。

请问有什么帮助吗?

谢谢 :)


编辑当我在 CMD 中直接使用以下命令时:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\bin\exshell.psc1" -noexit -command ". 'C:\Program Files\Microsoft\Exchange Server\bin\Exchange.ps1'; &'Z:\Exchange Powershell\MailboxesApproachingOverQuota.ps1'"

我得到: http://tinypic.com/r/n1fkmg/8

当我使用以下内容时:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\bin\exshell.psc1" -noexit -command ". 'C:\Program Files\Microsoft\Exchange Server\bin\Exchange.ps1'; &'Z:\Exchange Powershell\MailboxesApproachingOverQuota.ps1'"

我得到:http://tinypic.com/r/5bbac9/8

运行这个:

powershell -PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\bin\exshell.psc1" -noexit -exec bypass -command ". 'C:\Program Files\Microsoft\Exchange Server\bin\Exchange.ps1'"

打开 Exchange 命令行管理程序:http://tinypic.com/r/2dglulf/8

答案1

首先,让我告诉您如何从任务中运行脚本:

Program/script: 
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Add arguments (optional): 
-PSConsoleFile "C:\Program Files\Microsoft\Exchange Server\bin\exshell.psc1" -command ". 'C:\Program Files\Microsoft\Exchange Server\bin\Exchange.ps1'; &'Z:\Exchange Powershell\MailboxesApproachingOverQuota.ps1'"

还要注意,您用于运行脚本的用户 ID 可能需要在本地服务器上获得权限。

更新:删除了 -noexit

答案2

我猜这个脚本没有签名。您是否已使用 cmdlet 启用未签名脚本的执行Set-ExecutionPolicy -ExecutionPolicy Unrestricted

答案3

我遇到了同样的问题,发现最简单的解决方法是通过 bat 文件调用命令。我可以从命令行运行整个命令,但如果我尝试使用计划任务,无论我做什么,它都不会起作用。

单行批处理文件解决了这个问题。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -version 2.0 -command ". 'C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; c:\psscripts\accessrights.ps1"

我在 PS 脚本中设置了记录,以便查看它是否完成以及它运行了哪些命令。我还运行了 get-mailboxparmission -identity username:\calendar 来确认更改已反映出来。

干杯

皮特

答案4

简单的脚本文件通过任务调度程序工作。当我使用该-Sendmail:$true参数时,它就可以工作。我创建了一个.bat文件,并在任务调度程序中运行该文件而不是 Powershell 脚本。此.bat文件在我的 Exchange 2016 上运行。

PowerShell.exe -noexit -command ". 'C:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1'; Connect-ExchangeServer -auto; . C:\Script\Get-ExchangeEnvironmentReport.ps1 -HTMLReport C:\Script\Get-exchangeReport.html -SendMail:$true -MailFrom:[email protected] -MailTo:[email protected] -MailServer:mail.domain.com"

相关内容