У меня есть следующий сценарий powershell, который должен выполнять команду процесса для кубов после упорядочения их последовательности в таблице
param($App_input, $Script) #%2 and %3 arguments from cmd line input;
Function Query($Query) {
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$Server;Initial Catalog=$Database;Integrated Security=SSPI"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.Connection = $SqlConnection
$SqlCmd.CommandText = $Query
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$a=$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0] }
#$cube = Query "SELECT DISTINCT cube_name, sequence FROM [dbo].[$cubeTable] WHERE [application] = '$App_input' ORDER BY [sequence]" | Select -ExpandProperty cube_name;
$Table = Query "SELECT * from [dbo].[$cubeTable]"
# -ExpandProperty trims the column name, so it only outputs the value, not with header!
$App = Query "SELECT DISTINCT[application] FROM [dbo].[$cubeTable] WHERE [application] = '$App_input'" | Select -ExpandProperty application;
$i=0
$CUBE = @()
foreach($row in $Table | where { $_.application -match $App })
{
$i++
$CUBE += $row.Item("cube_name")
write-host " > CUBE $($i):" $CUBE[$CUBE -1]
cmd /c "runPowerShell.bat $Script $CUBE" #where $Script is Process.ps1 script that processes on each CUBE selected from table in order
}
Это гипотетическая таблица:
например: если бы я должен был передать параметр приложения и параметр сценария как таковой:
someBatchFile.bat SSP Process.ps1
сценарий должен сначала проверить, что цикл возвращает результаты только в том случае, когда столбец [application] = SSP, поэтому в этом случае следует избегать третьей строки.однако, предложение where, которое у меня есть $_.application -match $App
, по какой-то причине не имеет никакого эффекта, и powershell возвращает все строки независимо от того, ...
после того, как эта проверка выполнена, сценарий должен упорядочить строки (из 2, 2, 1 к 1, 2, 2) возвращая CUBE2, CUBE1 (только один раз с момента его отличия), который передается на каждой итерации в $CUBE
в строке cmd.
по существу, в этих примерах итерации должны выглядеть следующим образом:
cmd / c "runPowerShell.bat $ Process.ps1 CUBE2"
cmd / c"runPowerShell.bat $ Process.ps1 CUBE1"
Я знаю, что order by будет полезен в этом случае, но я не знаю, как я могу использовать это в случае foreach и $row.Item