Как зациклить два аргумента в одном цикле foreach после завершения 1-го аргумента?

#powershell #foreach

#powershell #foreach

Вопрос:

Предположим, у меня есть два разных типа серверов

 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] }

$servers_typeA = Query "SELECT DISTINCT [server_typeA] FROM table" | Select -ExpandProperty server_typeA;
$servers_typeB = Query "SELECT DISTINCT [server_typeB] FROM table" | Select -ExpandProperty server_typeB;
  

У меня есть forloop, который на данный момент перебирает серверы в TypeA и отображает соединения баз данных для каждого из серверов в $servers_typeA

 foreach($server in $servers_typeA)
  

вместо дублирования того же цикла для TypeB, так

 foreach($server in $servers_typeB)
  

Могу ли я каким-либо образом указать forloop, чтобы он зацикливал TypeB после A?

По сути, вот так?

 foreach($server in $servers_typeA then $servers_typeB)
  

Комментарии:

1. foreach($server in @($servers_typeA, $servers_typeB)) … массив массивов. Когда вы начнете изучать основы Powershell?

2. Насколько я знаю, нет. Сколько времени или ввода это сэкономило бы? Вы МОГЛИ бы вложить их; но это тоже не сэкономило бы время.

3. @Olaf lol я уже знаю основы …. я больше года пишу сценарии в powershell, автоматизацией всего нашего отдела занимаюсь я. все, о чем я прошу, это есть ли способ. вот и все. массив массивов не будет работать в моем случае, потому что аргументы не являются массивом. вместо этого они содержат результаты из инструкции query, которая сохраняется с помощью свойства expand.

4. Итак, тогда покажите нам, что находится в этих переменных

Ответ №1:

Вы можете просто объединить массивы с , чтобы выполнить цикл по их объединенным элементам; упрощенный пример:

 $servers_typeA = 'foo', 'bar'
$servers_typeB = 'baz', 'bam'

foreach ($server in $servers_typeA   $servers_typeB) {
  "processing server $server..."
}
  

Примечание: Если есть вероятность, что LHS конкатенации на самом деле является скаляром, а не массивом, используйте @(...) вокруг него (не обязательно для RHS): @($servers_typeA) $servers_typeB

Приведенное выше приводит:

 processing server foo...
processing server bar...
processing server baz...
processing server bam...