我有一个 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"