我写好了一个powershell数据库状态监控脚本,能在Exchange Management Shell 窗口下运行,但是我放在windows计划任务里就运行不了,经测试在CMD下指定路径调用脚本提示以下错误:(请大神们帮助)
PS E:\> .\Script_database.psl
无法将“.\Script_database.psl”项识别为 cmdlet、函数、脚本文件或可运行程序的名
称。请检查名称的拼写,如果包括路径,请确保路径正确,然后重试。
所在位置 行:1 字符: 22
+ .\Script_database.psl <<<<
+ CategoryInfo : ObjectNotFound: (.\Script_database.psl:String) [
], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
- 请研究Exchange Management Shell控制台的快捷方式,看它在启动时导入了那些脚本库或者模块。
- 请在计划任务中配置要执行的程序为PowerShell.exe的全路径
- 请在计划任务中配置的执行程序的参数为 -File d:\a\Script_database.psl全路径。(如果需要加载一些必须的模块,也在Script_database.psl加载)
- 请确认你的脚本中有没有依赖当前用户的profile,如果有,请更新你的计划任务的运行账号为你自己的账号,比如域账号。
- 请确认你的脚本是否有需要提升权限的命令,如果有请在计划任务中配置提升权限。
我查看控制台启动有加载这个 -version 2.0 -noexit -command “. ‘C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1’; Connect-ExchangeServer -auto ” 但是在计划任务里配置执行参数为这个时,任务成功执行但还是只打开Powershell 那个窗口,没有调用E:\Script_database.psl 脚本。怎么让它自动调用呢?
. ‘C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1的意思是加载加载脚本库。你把它写在你的E:\Script_database.psl第一行。Connect-ExchangeServer -auto, 我没有用过但是顾名思义,他是要根据你当前的默认用户账号登陆ExchangeServer,所以我我的答案中的第四点非常重要,需要让计划任务以域账号运行。
Connect-ExchangeServer -auto 写在你的Script_database.psl中的第二行。
你的计划任务重的参数应当为 -version 2.0 -noexit -File E:\Script_database.psl
按照您的指导, E:\Script_database.psl 代码修改如:
. ‘C:\Program Files\Microsoft\Exchange Server\V14\bin\RemoteExchange.ps1’;
Connect-ExchangeServer -auto
$dbs = get-mailboxdatabase
foreach ($db in $dbs)
{
$dbname = $db.name
$shujk = Get-MailboxDatabase -Identity $dbname -status
if ($shujk.mounted -eq $True)
{
$msg = “alert! your $shujk database was dismounted!”
$nSmtpserver = “XXXXXXXXX”
$nFrom = “XXXXXXXXX ”
$nTo = “XXXXXX”
$nSubject = “Database status alert”
send-mailmessage -bodyashtml -subject $nSubject -Smtpserver $nSmtpserver -From $nFrom -To $nTo -body $Msg
}
else
{
# do nothing
}
}
在windows powershell 调用这个脚本还是报错;
PS E:\> .\Script_database.psl
无法将“.\Script_database.psl”项识别为 cmdlet、函数、脚本文件或可运行程序的名
称。请检查名称的拼写,如果包括路径,请确保路径正确,然后重试。
所在位置 行:1 字符: 22
+ .\Script_database.psl <<<<
+ CategoryInfo : ObjectNotFound: (.\Script_database.psl:String) [
], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
不要调用 .\Script_database.psl
你直接用全路径就可以了。
D:\Users\mosser\Script_database.psl
Windows PowerShell
版权所有 (C) 2009 Microsoft Corporation。保留所有权利。
PS C:\Users\TEMP> e:\Script_database.psl
无法将“e:\Script_database.psl”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确
保路径正确,然后重试。
所在位置 行:1 字符: 23
+ e:\Script_database.psl <<<<
+ CategoryInfo : ObjectNotFound: (e:\Script_database.psl:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
感谢您的指导,我刚是名称打错了,手动输入的没有复制。再次测试已经可以使用了!
Windows PowerShell
版权所有 (C) 2009 Microsoft Corporation。保留所有权利。
PS C:\Users\TEMP> e:\Script_database.ps1
欢迎使用 Exchange 命令行管理程序!
cmdlet 的完整列表: Get-Command
仅 Exchange cmdlet: Get-ExCommand
与特定字符串匹配的 cmdlet: Help **
获取常规帮助: Help
获取有关 cmdlet 的帮助: Help or -?
显示快速参考指南: QuickRef
Exchange 团队博客: Get-ExBlog
显示命令的完整输出: | Format-List
第 #9 天的提示:
是不是希望查看 cmdlet 的帮助,但是不希望通读页面和 Shell 窗口中的文本页面?只需结合使用 Online 开关和 Get-Help cmdlet 即
可。Online 开关通知 Shell 在默认浏览器中打开联机版本的 cmdlet 帮助主题。请键入:
Get-Help -Online
详细信息: 正在连接到 xxxxxxxxxxx
详细信息: 已连接到 xxxxxxxxxx
PS C:\Users\TEMP>
日志名称: Microsoft-Windows-TaskScheduler/Operational
来源: Microsoft-Windows-TaskScheduler
日期: 2016/5/18 16:01:01
事件 ID: 322
任务类别: 启动请求已被忽略,实例已在运行
级别: 警告
关键字:
用户: SYSTEM
计算机: NF-CAS2.transgd.com.cn
描述:
任务计划程序未启动任务“\Database status alert”,因为相同任务的实例“{fd457497-e186-4a61-a1b8-17de3e6a3a11}”正在运行。
事件 Xml:
<Event xmlns=”http://schemas.microsoft.com/win/2004/08/events/event”>
<System>
<Provider Name=”Microsoft-Windows-TaskScheduler” Guid=”{DE7B24EA-73C8-4A09-985D-5BDADCFA9017}” />
<EventID>322</EventID>
<Version>0</Version>
<Level>3</Level>
<Task>322</Task>
<Opcode>0</Opcode>
<Keywords>0x8000000000000000</Keywords>
<TimeCreated SystemTime=”2016-05-18T08:01:01.221766700Z” />
<EventRecordID>477461</EventRecordID>
<Correlation ActivityID=”{FD457497-E186-4A61-A1B8-17DE3E6A3A11}” />
<Execution ProcessID=”856″ ThreadID=”636″ />
<Channel>Microsoft-Windows-TaskScheduler/Operational</Channel>
<Computer>NF-XXX.transgd.com.cn</Computer>
<Security UserID=”S-1-5-18″ />
</System>
<EventData Name=”NewInstanceIgnored”>
<Data Name=”TaskName”>\Database status alert</Data>
<Data Name=”TaskInstanceId”>{FD457497-E186-4A61-A1B8-17DE3E6A3A11}</Data>
</EventData>
</Event>
请确保你的脚本在执行以后控制台正常退出了,还要确保脚本的执行时间。
比如设定计划任务每10分钟执行一次,结构每次任务执行的脚本需要20分钟,这样肯定是有问题的。