【问题标题】:powershell increment value and give same value to same object everytimepowershell递增值并每次给同一个对象相同的值
【发布时间】:2021-08-20 15:54:51
【问题描述】:

我有监控软件的脚本,我想监控失败或成功的 windows 计划任务。

Powershell 脚本如下所示:

#Monitor windows tasks for checkmk raw 1.6.0
#Last update: 31.05.2021

$tasks = Get-ScheduledTask | Get-ScheduledTaskInfo | Select TaskName,LastRunTime,LastTaskResult

#CHECKMK states
#$OK = "0 MWT -"
#$Warning = "1 MWT -"
#$Crit = "2 MWT -"
#$Unknown = "3 MWT -"

$incre

foreach($task in $tasks)
{
    if($($task.LastTaskResult) -eq 0){
        $incre++
        Write-Host "0 MWT$incre - Scheduled task: $($task.TaskName) was succesfull"
    }
    else{
        $incre++
        Write-Host "2 MWT$incre - Scheduled task: $($task.TaskName) has failed."
    }
}

Clear-Variable -Name "incre"

脚本的输出是这样的:

2 MWT1 - Scheduled task: ftp has failed.
0 MWT2 - Scheduled task: Optimize Start Menu Cache Files-S-1-5-21-3586077036-2416152140-2432273966-1104 was succesfull
0 MWT3 - Scheduled task: Adobe Acrobat Update Task was succesfull
0 MWT4 - Scheduled task: FSRM_Update was succesfull

每一行都为我们的监控软件添加服务。它需要有不同的名称,这就是我为每行 MWT1、2、3 递增值的原因。

问题是,每次运行脚本时,我都需要为每个对象设置相同的增量值。而且它需要是动态的,当我添加任务时,它会给它以前从未使用过的数字,他们会坚持使用它,当我删除任务时,它将删除该数字并且永远不会再次使用,或者它只会用于新的创建任务。

有没有可能?

【问题讨论】:

    标签: powershell increment monitor check-mk


    【解决方案1】:

    如果我理解正确,为什么不向您在变量$tasks 中收集的任务对象添加一个计算属性,该属性将包含递增的数字作为属性?

    类似这样的:

    $id = 0
    $tasks = Get-ScheduledTask | Get-ScheduledTaskInfo | 
             ForEach-Object {
                 $_ | Select-Object TaskName, @{Name = 'TaskId'; Expression = {($script:id++)}},
                                    LastRunTime,LastTaskResult
             }
    
    foreach($task in $tasks) {
        if ($task.LastTaskResult -eq 0){
            Write-Host "0 MWT$($task.TaskId) - Scheduled task: $($task.TaskName) was succesfull"
        }
        else{
            Write-Host "2 MWT$($task.TaskId) - Scheduled task: $($task.TaskName) has failed."
        }
    }
    

    【讨论】:

    • 同样的问题,每次我运行脚本时,每次运行脚本时每个对象都有不同的 id
    • @JohnyWave 是的,当然.. 每次调用Get-ScheduledTask 时,您都会以不同的顺序获得不同的对象列表。有些任务是新的,有些已经不复存在。,这并不是说您可以在这些对象中永久存储额外的属性,只要您保留数组$tasks,这只会“存在”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多