Показать полную графическую версию : скрипт отключения всех заданий, по заданным условиям
Подскажите, как написать скрипт на 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 файл с предупреждением ("задания в планировщике отключены")
Кто-нибудь может помочь сделать такой скрипт?
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]."
}
берите и сравнивайте, как хотите.
Но мне категорически не нравится Ваша идея с отключением всех заданий.
Iska, Я проверю . Да ничего страшного не будет. Система у меня win 2012x64
но если вы думаете, что лучше все задания не отключать, то можно ли вставить название заданий. которые точно можно
например, задание1,заданния2...
Система у меня 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/).
Iska, а где скачать powershell 6? у меня судя по всему первая %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
где скачать powershell 6? »
Первая же ссылка в Яндексе при поиске по этим трём словам, ведёт как ни странно на сайт Микрософт: Установка PowerShell Core в Windows (https://docs.microsoft.com/ru-ru/powershell/scripting/install/installing-powershell-core-on-windows?view=powershell-6)...
у меня судя по всему первая %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe »
У Вас никак не может быть первая ;). v1.0 в имени пути — это просто демонстрация непродуманной концепции от Microsoft.
Если я правильно понимаю, командлет Get-ScheduledTask требует PowerShell 6. »
не совсем. Достаточно PowerShellVersion = '3.0', что записано в самом модуле...
YuS_2, что надо сделать, чтобы стал доступен данный командлет? Что-то импортировать, как я понимаю?
что надо сделать, чтобы стал доступен данный командлет? »
Боюсь, что только поменять версию ОС... ибо, если, конечно, не ошибаюсь, то ScheduledTask может быть доступен только с версии Win 8.1
В предыдущих версиях ОС, есть модуль PSScheduledJob, но у него возможностей поменьше...
если вы думаете, что лучше все задания не отключать, то можно ли вставить название заданий. которые точно можно
например, задание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 'задания в планировщике отключены'
}
}
}
}
я устанавливать не буду »
Да, кстати, существует портабельный вариант (ну, как портабельный... в профайле пользователя каталог он создает и устанавливает туда же файлы помощи и т.п., а также в реестр пишет необходимые ключи), установки не требует, достаточно указать в PATH путь к pwsh.exe и то, только из целей удобства запуска...
C powershell v 5.1 они могут работать параллельно и не пересекаются между собой.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC