天天看點

powershell obtain windows task status用powershell script 擷取windows task status

用powershell script 擷取windows task status

# Description   : This script is designed to check scheduled tasks for windows

#		servers and alert in case tasks failed in Nagios style output.

#############################################################################



#define states for opsview

[email protected]{ "OK"=0;"WARNING"=1;"CRITICAL"=2;"UNKNOWN"=3 }



$TaskStruct = New-Object PSObject -Property @{

Struct_TaskServer = [string]"";

Struct_TaskName = [string]"";

Struct_TaskPath = [string]"";

Struct_TaskLastTaskResult = [int]0;



}



#function help

Function check_help {

Write-Host @"

check_ms_win_task.ps1:

This script is designed to check check Windows 2008 or higher scheduled tasks and alert in case tasks failed in Nagios style output.

Arguments:

    -H  | --Hostname     => Optional hostname

    -T	| --Taskname	=> Name of Task.

    -P  | --Pathname	=> Path of Task

    -h  | --Help         => Print this help output.

"@

    Exit $return_status["OK"]

} 



Function Process_Args {

    Param ( 

        [Parameter(Mandatory=$True)]$Args

    )

    try {

For ( $i = 0; $i -lt $Args.count; $i=$i+2 ) { 

$CurrentArg = $Args[$i].ToString()

#write-host "CurrentArg is $CurrentArg"

if ($i -lt $Args.Count-1) {

$Value = $Args[$i+1].ToString();

                             

} else {

$Value = ""

};

switch -regex -case ($CurrentArg) {

"^(-h|--Help)$" {

   check_help

   

}

"(-H|--Hostname)" {

   $TaskStruct.Struct_TaskServer =  $Value

 #  write-host $TaskStruct.TaskServer

   

}

"(-T|--Taskname)" {

   $TaskStruct.Struct_TaskName =  $Value

 #  write-host $TaskStruct.TaskName

}

"(-P|--Pathname)" {

   $TaskStruct.Struct_TaskPath =  $Value

 #  write-host $TaskStruct.TaskPath

  

}

default {

   throw "Illegal arguments detected: $_"

}

}

}

}

catch {

Write-Host "Critical - $_"

Exit $return_status["CRITICAL"]

}

}



#main function 

Function Check_MS_Win_Tasks {





#first connect to task schedule program

$service = New-Object -ComObject Schedule.Service

$service.Connect("")



$OutputString = ""

$ExitCode=[int]3



$folder = ""

$task = ""



#specify the task

try {

$folder = $service.GetFolder($TaskStruct.Struct_TaskPath)

} catch [Exception]

{

$OutputString = "Critical - Task Path " + $TaskStruct.Struct_TaskPath + " does not exist,please check."

$ExitCode = $return_status["CRITICAL"]

write-host $OutputString

exit $ExitCode

}

try {

$task = $folder.GetTask($TaskStruct.Struct_TaskName)

} catch [exception]

{

$OutputString = "Critical - Task " + $TaskStruct.Struct_TaskName + " does not exist,please check"

$ExitCode = $return_status["CRITICAL"]

write-host $OutputString

exit $ExitCode

}



$TaskName = $task.Name

$TaskPath = $task.Path

$LastTaskResult = $task.LastTaskResult





if ($LastTaskResult -eq "0" -and $task.Enabled)

{

$OutputString = "OK - Task $TaskName success."

$ExitCode = $return_status["OK"]

}

elseif ($LastTaskResult -eq "0x00041301" -and $task.Enabled)

{

$OutputString = "OK - Task $TaskName is still running."

$ExitCode = $return_status["OK"]

}

elseif ($task.Enabled)

{

$OutputString = "Critical - Task $TaskName fail."

$ExitCode = $return_status["CRITICAL"]

}

else

{

$OutputString = "Critical - Task $TaskName disable."

$ExitCode = $return_status["CRITICAL"]

}

#	write-host "taskname is $TaskName, taskpath is $TaskPath, lasttaskresult is $LastTaskResult"

write-host $OutputString

exit $ExitCode



}





if($Args.length -ge 1)

{

Process_Args $Args

}



if(($TaskStruct.Struct_TaskName -eq "") -or ($TaskStruct.Struct_TaskPath -eq ""))

{

check_help

}



Check_MS_Win_Tasks

           

繼續閱讀