【问题标题】:Make "cmd /c" command in foreach UNIQUE在 foreach UNIQUE 中创建“cmd /c”命令
【发布时间】:2018-10-03 14:57:23
【问题描述】:

我有一个脚本,它运行一个命令来启动一个名为 Process.ps1 的 PowerShell 脚本来处理表中的一些多维数据集。

$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")
    $CUBE = $CUBE | Select-Object -Unique
    #Write-Host " > CUBE $($i): $($CUBE[-1])`n"
    cmd /c "runPowerShell.bat $Script $($CUBE)"    #where $Script is Process.ps1 script that processes on each CUBE selected from table in order
}

由于某种原因,它在同一个多维数据集上运行了两次处理。

如何向cmd /c "runPowerShell.bat $Script $($CUBE)" 命令添加“唯一”方面,以便如果再次传回相同的$CUBE,它会忽略它并循环处理下一个不同的多维数据集?

有一个Select-Object -Unique,但那是针对对象,而不是命令...

【问题讨论】:

  • 我猜你的数据库查询返回多行具有相同的多维数据集名称。将每一行通过Select-Object -Unique 管道并没有帮助,因为每一行只包含一个名称。你能把SQL查询改成SELECT DISTINCT cube_name FROM ... 吗?
  • @AnsgarWiechers 与 $CUBE += $row.Item("cube_name") | 不一样选择对象-唯一?因为我试过了,但还不够
  • @AnsgarWiechers 听从您的建议,如果我确实使用 $CUBE = SELECT DISTINCT cube_name FROM ....,那么我该如何更改我的 for 循环以循环它呢?因为 foreach 会丢失一些东西,就像它会 foreach($CUBE in...???) {cmd /c "runPowerShell.bat $Script $($CUBE)"}
  • 我的意思是$Table = Query "SELECT DISTINCT cube_name FROM ..."
  • @AnsgarWiechers 错误:“使用“1”参数调用“填充”的异常:“如果指定了 SELECT DISTINCT,则 ORDER BY 项必须出现在选择列表中。””

标签: powershell


【解决方案1】:

我想通了。

我这样修改了我的查询语句:

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

它现在只存储一个不同的多维数据集,因此 cmd /c "runPowerShell.bat $Script $($CUBE)" 只运行该多维数据集一次

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2014-05-30
    • 2020-01-16
    • 2015-10-03
    • 1970-01-01
    相关资源
    最近更新 更多