У меня есть скрипт, который мне нужно периодически запускать, чтобы проверить состояние нескольких заданий и предупредить меня, если они выполняются дольше 15 минут. Тем не менее, я получаю сообщение об ошибке, используя schtasks, говоря: «Доступ запрещен.»
Вот сценарий:
$server = "server.com"
$taskarray = @("Receive Orders","Send Inventory","Send Shippments")
$maxminutes="0"
$scriptpath = "C:\Path\ToCSVFolder"
$dateyest=(get-date(get-date).AddDays(-1) -format g)
foreach($scheduledtask in $taskarray){
# Send email function
function sendEmail {
$from = New-Object System.Net.Mail.MailAddress "email@email.com";
$to = New-Object System.Net.Mail.MailAddress "email@email.com";
$mail = New-Object System.Net.Mail.MailMessage $from, $to;
$mail.Subject = "Scheduled Task ( $scheduledtask ) on $server has been
running for longer than $maxminutes minutes.";
$mail.Body = "Scheduled Task ( $scheduledtask ) on $server has been
running for longer than $maxminutes minutes. Total Runtime for (
$scheduledtask ): $datediff .";
# Connect to mail relay
$smtpserver = "smtp"
$smtp = New-Object System.Net.Mail.SmtpClient ($smtpserver);
# Send Email
$smtp.Send($mail);
}
schtasks /query /s $server /FO CSV /v >
"$scriptpath\ScheduleTaskMon.csv";
$longrunning = Import-Csv "$scriptpath\ScheduleTaskMon.csv" |
Where-Object {[DateTime]$_."Last Run Time" -gt [DateTime]$dateyest -and
$_."Status" -eq "Running" -and $_."TaskName" -eq "$scheduledtask"};
if (!$longrunning) { continue }
$datediff=([DateTime]::Now)-([DateTime]$longrunning."Last Run Time")
if (($datediff.TotalMinutes) -gt $maxminutes)
{sendemail};
}
Это ошибка, которую я получаю:
schtasks : ERROR: Access is denied.
At C:\Users\xxx\Desktop\script.ps1:35 char:1
+ schtasks /query /s $server /FO CSV /v > "$scriptpath\ScheduleTaskMon. ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (ERROR: Access is denied.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError