function ServiceRestart
{
Param
(
$ErrorLog,
$Services,
$MaxSize
)
$Time = Get-Date -Format 'yyyy:MM:dd HH:mm:ss'
$Result = (Get-Item $ErrorLog).length
if($Result -gt $MaxSize)
{
Clear-Content $ErrorLog
}
Try
{
Foreach($Service in $Services)
{
Restart-Service -DisplayName $Service -ErrorAction Stop
}
} Catch
{
"ERROR: $Service could not be restarted $Time" | Add-Content $ErrorLog
}
}
ServiceRestart -ErrorLog -Services -MaxSize
我需要从任务计划程序中传递以下参数
- 错误日志
- 服务
- MaxSize
我目前的任务安排程序设置如下
程序/脚本:C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe
添加参数(可选):
-Command“& \ ServerName \ C $ \ Users ***** \ Documents \ Scripts \ Scheduled-ServiceRestart.ps1
-ErrorLog'ServerName \ C $ \ Users ***** \ Documents \ log \ ScriptErrors.txt'
-Services'foo1','foo2'
-MaxSize'5MB'“
当我运行计划任务时,没有任何事情发生,可能出现问题。
答案 0 :(得分:4)
我建议安排任务使用-File
参数而不是-Command
。例如:
程序/脚本:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
添加参数(可选):-NoProfile -ExecutionPolicy Unrestricted -File 'Scheduled-ServiceRestart.ps1' -ErrorLog 'ScriptErrors.txt' -Services 'foo1','foo2' -MaxSize 5MB
开始于(可选):C:\Users\<username>\Documents\Scripts
您可以在&#34;开始&#34;中指定脚本的起始目录。任务的属性,并避免脚本和日志文件的冗长路径名称。 (请注意,我假设您在本地计算机上运行脚本的副本,而不是通过网络运行,这增加了潜在的复杂性和失败的可能性。)
答案 1 :(得分:1)
首先需要导入该功能。我建议将该功能保存为模块并将其放在system32或程序文件的modules文件夹中。这样,当PowerShell启动时,它将自动导入您的功能。
执行此操作后,任务计划程序非常简单。
编程/脚本
Powershell
添加参数(可选):
-Command &{ServiceRestart -ErrorLog 'ServerName\C$\Users*****\Documents\log\ScriptErrors.txt' -Services 'foo1','foo2' -MaxSize '5MB'}
答案 2 :(得分:0)
至于问题的字面答案:可能你需要添加单引号来包围你的脚本位置,否则它会尝试将特殊字符/反斜杠解释为转义。
前:
-Command "& '\ServerName\C$\Users*****\Documents\Scripts\Scheduled-ServiceRestart.ps1' ...
您还可以在您的powershell脚本中添加一些基本日志记录,以确保它实际上正在启动。
我使用“-Command&amp;”生产风格Powershell预定任务&amp;如果字符串格式正确,它们可以正常工作。
答案 3 :(得分:0)
显然,在使用计划任务时,引号的选择有很大的不同。试试这个作为您的论据:
-Command "& '\\ServerName\C$\Users\...\Documents\Scripts\Scheduled-ServiceRestart.ps1' -ErrorLog '\\ServerName\C$\Users\...\Documents\log\ScriptErrors.txt' -Services 'foo1','foo2' -MaxSize '5MB'"