Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   скрипт отключения всех заданий, по заданным условиям (http://forum.oszone.net/showthread.php?t=339806)

kontox 23-03-2019 18:01 2864762

скрипт отключения всех заданий, по заданным условиям
 
Вложений: 1
Подскажите, как написать скрипт на PS, с таким алгоритмом
1. есть файл csv
"C:\Users\admin\Documents\f.csv"
его формат сейчас
"","promoaction","promoeffect1","returneff","promo_return","dataload"
"1",18557,18568,0,18557,2019-03-23 17:11:28
каждое утро понедельника, в 11 часов, csv файл пополняется новой строчкой
например, 25 числа может быть так.
"","promoaction","promoeffect1","returneff","promo_return","dataload"
"2",18558,18568,0,18558,2019-03-25 11:00:00

2. Так вот, как сделать, что если по колонкам promoaction и promo_return (другие колонки не трогаем, их значение не важно)
значение меньше чем в предыдущую дату(dataload колонка)
Ну, например
"","promoaction","promoeffect1","returneff","promo_return","dataload"
"3",1000,18568,0,1000,2019-03-25 11:00:00 (1000<18558)

а также, если в какой то из колонок promoaction и promo_return значения не равны, например в promoaction =18558,, а в promo_return=18559,

то все задание которые запланированы на вторник (там есть задания их много, они раз в неделю во вторник в taskschd.msc запускаются)
не должны запуститься, а просто перенести выполнение на следующий вторник.

Ну а если в promoaction и promo_return значения больше чем в предыдущую дату, и значения promoaction = promo_return
то все в порядке, ничего отключать не надо

данный ps должен запускаться каждый пн в 12 часов дня. В случае, если задания были отключены, на рабочем столе создать .txt файл с предупреждением ("задания в планировщике отключены")

Кто-нибудь может помочь сделать такой скрипт?

Iska 24-03-2019 13:31 2864849

kontox, какая операционная система? И что значит:
Цитата:

Цитата kontox
если по колонкам promoaction и promo_return … значение меньше … а также, если … значения не равны »

?! Если меньше — то, ясен пень, они будут не равны. И как именно «меньше»?! По обеим полям меньше одновременно? По любому из полей?

Так-то сравнение не представляет сложностей:
Код:

$sSourceFile = 'C:\Мои проекты\0254\f.csv'

$aCSV = Import-Csv -Path $sSourceFile -WarningAction SilentlyContinue

if($aCSV.Count -ge 2) {
    $lUpperBound = $aCSV.GetUpperBound(0)
   
    $lCurrPromoAction = $aCSV[$lUpperBound].promoaction
    $lCurrPromoReturn = $aCSV[$lUpperBound].promo_return
    $lPrevPromoAction = $aCSV[$lUpperBound - 1].promoaction
    $lPrevPromoReturn = $aCSV[$lUpperBound - 1].promo_return

    Write-Host $lCurrPromoAction, $lCurrPromoReturn, $lPrevPromoAction, $lPrevPromoReturn
} else {
    Write-Host "Need at least two strings in csv file [$sSourceFile]."
}

берите и сравнивайте, как хотите.

Но мне категорически не нравится Ваша идея с отключением всех заданий.

kontox 24-03-2019 14:51 2864870

Iska, Я проверю . Да ничего страшного не будет. Система у меня win 2012x64
но если вы думаете, что лучше все задания не отключать, то можно ли вставить название заданий. которые точно можно
например, задание1,заданния2...

Iska 24-03-2019 15:18 2864874

Цитата:

Цитата kontox
Система у меня win 2012x64 »

Если я правильно понимаю, командлет Get-ScheduledTask требует PowerShell 6. Посмотрите, так ли это, и, если — да, то встанет ли на неё PowerShell 6 (надо полагать, ответ тоже — да). Затем можете попробовать сами, либо подождать решения от более опытных коллег (я устанавливать не буду).

P.S. Можете руководствоваться обзорной статьёй: Weekend Scripter: Use PowerShell to Document Scheduled Tasks | Scripting.

kontox 24-03-2019 15:23 2864876

Iska, а где скачать powershell 6? у меня судя по всему первая %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

mwz 24-03-2019 15:48 2864877

Цитата:

Цитата kontox
где скачать powershell 6? »

Первая же ссылка в Яндексе при поиске по этим трём словам, ведёт как ни странно на сайт Микрософт: Установка PowerShell Core в Windows...

Iska 24-03-2019 16:15 2864878

Цитата:

Цитата kontox
у меня судя по всему первая %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe »

У Вас никак не может быть первая ;). v1.0 в имени пути — это просто демонстрация непродуманной концепции от Microsoft.

YuS_2 24-03-2019 18:01 2864882

Цитата:

Цитата Iska
Если я правильно понимаю, командлет Get-ScheduledTask требует PowerShell 6. »

не совсем. Достаточно PowerShellVersion = '3.0', что записано в самом модуле...

Iska 24-03-2019 18:38 2864890

YuS_2, что надо сделать, чтобы стал доступен данный командлет? Что-то импортировать, как я понимаю?

YuS_2 24-03-2019 20:03 2864898

Цитата:

Цитата Iska
что надо сделать, чтобы стал доступен данный командлет? »

Боюсь, что только поменять версию ОС... ибо, если, конечно, не ошибаюсь, то ScheduledTask может быть доступен только с версии Win 8.1
В предыдущих версиях ОС, есть модуль PSScheduledJob, но у него возможностей поменьше...

Iska 24-03-2019 22:01 2864908

YuS_2, спасибо, ясно.

Busla 25-03-2019 00:44 2864917

Цитата:

Цитата kontox
если вы думаете, что лучше все задания не отключать, то можно ли вставить название заданий. которые точно можно
например, задание1,заданния2... »

лучше эти задания ссыпать в отдельную папку, например BusinessLogic

Код:

Import-csv 'C:\Users\admin\Documents\f.csv' | .{
    begin {
        $current = $null
    }
    process {
        $previous = $current
        $current = $_
    }
    end {
        switch  (@{previous = $previous; last = $current}) {
            ({ $null -eq $_.previous -or $null -eq $_.last }) { break }
            ({ $_.last.promoaction -gt $_.previous.promoaction `
                -and $_.last.promo_return -gt $_.previous.promo_return `
                -and $_.last.promoaction -eq $_.last.promo_return }) {
                    Get-ScheduledTask -TaskPath "\BusinessLogic\" | Enable-ScheduledTask
                    break
                }
            default {
                Get-ScheduledTask -TaskPath "\BusinessLogic\" | Disable-ScheduledTask
                Set-Content -Path ([Environment]::GetFolderPath("Desktop") + '\result.txt') -Value 'задания в планировщике отключены'
            }
        }
    }
}


YuS_2 25-03-2019 07:37 2864923

Цитата:

Цитата Iska
я устанавливать не буду »

Да, кстати, существует портабельный вариант (ну, как портабельный... в профайле пользователя каталог он создает и устанавливает туда же файлы помощи и т.п., а также в реестр пишет необходимые ключи), установки не требует, достаточно указать в PATH путь к pwsh.exe и то, только из целей удобства запуска...
C powershell v 5.1 они могут работать параллельно и не пересекаются между собой.


Время: 20:29.

Время: 20:29.
© OSzone.net 2001-