Почему этот процесс выполняется дважды? - PullRequest
0 голосов
/ 03 октября 2018

У меня есть скрипт, который обрабатывает некоторые кубы в таблице, и когда я запускаю его по отдельности, как, например, напрямую, он обрабатывает, как и ожидалось, кубик ОДИН РАЗ.однако, когда я вызываю его с помощью этой команды цикла пакетного файла, она по какой-то причине дублирует обработку?

вот обычный сценарий процесса:

Invoke-ASCmd –InputFile $JSON_file -Server $Destination_Server >$process_output

Scripts> runPowerShell.bat Process.ps1 CUBE

Process directly

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

$Table = Query "SELECT * from [dbo].[$cubeTable] WHERE [application] = '$App_input' ORDER BY [sequence]"
    $i=0
$CUBE = @()

foreach($row in $Table)
{   
    Write-host "`r`n---------------------------START of Script-----------------------------"
    write-host "`r`n [Application] :  $App_input"
    write-host " [Script]      :  $Script"
    $i++
    $CUBE += $row.Item("cube_name")
    #write-host " > CUBE $($i): $($CUBE[-1])`n"
    cmd /c "runPowerShell.bat $Script $($CUBE[-1])" #where $Script is Process.ps1 script that processes on each CUBE selected from table in order
}

Этот автономный скрипт называется scriptWrapper.ps1, который в основном циклично запускается для выполнения этой команды для обработки нескольких кубов, вместо того, чтобы мне приходилось указывать команду для каждого куба, который у меня есть в таблице.он вызывается через этот пакетный файл:

Powershell.exe -ExecutionPolicy ByPass -File %psFile% %2 %3 %4 %5

, поэтому, когда я запускаю его так:

Scripts>runPowerShell.bat scriptWrapper.ps1 CUBES_CATEGORY Proc.ps1

, он обрабатывает один и тот же куб дважды:

Twice processed

Я почти уверен, что что-то происходит в цикле scriptWrapper.ps1, но я не могу указать на это ...

1 Ответ

0 голосов
/ 03 октября 2018

Я понял это.В основном $Table хранил все строки независимо от того, повторяется ли куб n раз.это не учитывало избыточность.

Мне просто нужно было изменить оператор запроса в $ Table:

$Table = Query "SELECT DISTINCT[cube_name], [sequence] from [dbo].[$cubeTable] WHERE [application] = '$App_input' ORDER BY [sequence]"

Теперь он просто хранит один отдельный куб, поэтому cmd /c "runPowerShell.bat $Script $($CUBE)" запускает только этот куб один раз

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