我有一个脚本,可以处理表中的某些多维数据集,并且当我单独运行它时(直接运行),它可以按预期方式处理多维数据集一次。但是,当我通过此批处理文件循环命令调用它时,由于某种原因,它会重复进行处理?
这是常规的Process脚本:
Invoke-ASCmd –InputFile $JSON_file -Server $Destination_Server >$process_output
脚本> runPowerShell.bat Process.ps1多维数据集
这是我用于其他目的的高级方法,但仍旨在达到相同的结果:
$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
它两次处理相同的多维数据集:
我很确定scriptWrapper.ps1循环中有什么问题,但我无法指出......
答案 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)"
仅运行一次该多维数据集