#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...