Войти

Показать полную графическую версию : скрипт отключения всех заданий, по заданным условиям


kontox
23-03-2019, 18:01
Подскажите, как написать скрипт на 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
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
Iska, Я проверю . Да ничего страшного не будет. Система у меня win 2012x64
но если вы думаете, что лучше все задания не отключать, то можно ли вставить название заданий. которые точно можно
например, задание1,заданния2...

Iska
24-03-2019, 15:18
Система у меня win 2012x64 »
Если я правильно понимаю, командлет Get-ScheduledTask (https://docs.microsoft.com/en-us/powershell/module/scheduledtasks/get-scheduledtask) требует PowerShell 6. Посмотрите, так ли это, и, если — да, то встанет ли на неё PowerShell 6 (надо полагать, ответ тоже — да). Затем можете попробовать сами, либо подождать решения от более опытных коллег (я устанавливать не буду).

P.S. Можете руководствоваться обзорной статьёй: Weekend Scripter: Use PowerShell to Document Scheduled Tasks | Scripting (https://devblogs.microsoft.com/scripting/weekend-scripter-use-powershell-to-document-scheduled-tasks/).

kontox
24-03-2019, 15:23
Iska, а где скачать powershell 6? у меня судя по всему первая %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

mwz
24-03-2019, 15:48
где скачать powershell 6? »

Первая же ссылка в Яндексе при поиске по этим трём словам, ведёт как ни странно на сайт Микрософт: Установка PowerShell Core в Windows (https://docs.microsoft.com/ru-ru/powershell/scripting/install/installing-powershell-core-on-windows?view=powershell-6)...

Iska
24-03-2019, 16:15
у меня судя по всему первая %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe »
У Вас никак не может быть первая ;). v1.0 в имени пути — это просто демонстрация непродуманной концепции от Microsoft.

YuS_2
24-03-2019, 18:01
Если я правильно понимаю, командлет Get-ScheduledTask требует PowerShell 6. »
не совсем. Достаточно PowerShellVersion = '3.0', что записано в самом модуле...

Iska
24-03-2019, 18:38
YuS_2, что надо сделать, чтобы стал доступен данный командлет? Что-то импортировать, как я понимаю?

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

Iska
24-03-2019, 22:01
YuS_2, спасибо, ясно.

Busla
25-03-2019, 00:44
если вы думаете, что лучше все задания не отключать, то можно ли вставить название заданий. которые точно можно
например, задание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
я устанавливать не буду »
Да, кстати, существует портабельный вариант (ну, как портабельный... в профайле пользователя каталог он создает и устанавливает туда же файлы помощи и т.п., а также в реестр пишет необходимые ключи), установки не требует, достаточно указать в PATH путь к pwsh.exe и то, только из целей удобства запуска...
C powershell v 5.1 они могут работать параллельно и не пересекаются между собой.




© OSzone.net 2001-2012