为什么此进程运行两次?

时间:2018-10-03 00:02:41

标签: sql-server powershell

我有一个脚本,可以处理表中的某些多维数据集,并且当我单独运行它时(直接运行),它可以按预期方式处理多维数据集一次。但是,当我通过此批处理文件循环命令调用它时,由于某种原因,它会重复进行处理?

这是常规的Process脚本:

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

脚本> runPowerShell.bat Process.ps1多维数据集

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 :(得分:0)

我知道了。基本上$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)"仅运行一次该多维数据集

相关问题