Powershell должен выполнить команду для всех периодов года - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть команда, которую мне нужно запустить в PowerShell, я могу запустить ее напрямую, указав переменную. Пример:

command run 2017 Jan

Но мое требование - запустить команду в цикле для каждого из списка переменных:

Jan Feb Mar .... Oct Nov Dec

$ACSautoPath = "C:\sap\rexon\bin\rexon.bat"
$AutomationPath = "C:\Sap\Automation"
$LogPath = "C:\Sap\Automation\Log"
$BackupPath = "C:\Sap\Automation\Backup"
#Date Variables
$DaysToKeep = "-30"
$CurrentDate = Get-Date
$DatetoDelete = $CurrentDate.AddDays($DaysToKeep)
$TimeStamp = Get-Date -format "yyyyMMddHHmm"
$LogFileName = "Backup" + $TimeStamp + ".log"
#ACS Variables
$ACSdomain = "yourdomain"
$ACSurl = "XXXXXXXXXXXXXX"
$ACSuser = "yourusername"
$ACSpass = "c:\ Sap\Automation\password.epw"
#Snapshot Variables
$ACSExportName = "Snapshot"
$ACSExportDownloadName = $ACSExportName + ".zip"
$ACSExportRename = $ACSExportName + $TimeStamp + ".zip"
#Start Logging
Start-Transcript -path $LogPath\$LogFileName
#Log into ACS
Write-Host ([System.String]::Format("Login to source: {0}", [System.DateTime]::Now))
&$ACSautoPath "login" $ACSuser $ACSpass $ACSurl
#Run A rule
Write-Host ([System.String]::Format("Run A rule: {0}",[System.DateTime]::Now))
&$ACSautoPath Runrule cons india 2017 jan 
#Log out of ACS
Write-Host ([System.String]::Format("Logout of source: {0}",[System.DateTime]::Now))
&$ACSautoPath "logout"
#Stop Logging
Stop-Transcript

В строке: 27 пользователь должен предоставить переменную, такую ​​как Mar, тогда строка 27 должна быть выполнена для всех периодов в списке, как объяснено ниже,

Я должен указать любой период в середине, например Mar, тогда цикл должен выполнить команду для:

apr may jun july aug sep oct nov dec jan feb

Как этого достичь?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Итак, $ACSautoPath - это путь к пакетному файлу, которому вы передаете аргументы,
но откуда берется начальное значение 2017 jan?

Я предполагаю, что вы хотите начать с текущего месяца и повторить следующие одиннадцать:

$Start = Get-Date     # or set a fixed date with # -year 2017 -month 1
0..11|ForEach-Object {
    $Params = "Runrule cons india {0}" -f $Start.AddMonths($_).ToString('yyyy MMM')
    &$ACSautoPath $Params
}

С $ACSautoPath, временно установленным на Echo Я получаю этот вывод:

Runrule cons india 2018 Nov
Runrule cons india 2018 Dez
Runrule cons india 2019 Jan
Runrule cons india 2019 Feb
Runrule cons india 2019 Mrz
Runrule cons india 2019 Apr
Runrule cons india 2019 Mai
Runrule cons india 2019 Jun
Runrule cons india 2019 Jul
Runrule cons india 2019 Aug
Runrule cons india 2019 Sep
Runrule cons india 2019 Okt
0 голосов
/ 01 ноября 2018

Вы можете просмотреть месяцы из любой начальной точки, используя оператор модуля :

$months = [System.Globalization.CultureInfo]::CurrentCulture.DateTimeFormat.AbbreviatedMonthNames

$start = $months.IndexOf('Jul')

1 .. 12 | ForEach-Object { $months[++$start % 12] }

Что дает вывод, как это:

Aug
Sep
Oct
Nov
Dec
Jan
Feb
Mar
Apr
May
Jun
Jul

РЕДАКТИРОВАТЬ: Обновлен, чтобы включить обратную связь от довольно наблюдательного @ LotPings

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...