Цикл по массиву баз данных для запуска SQL-запроса к базе данных - PullRequest
1 голос
/ 12 марта 2019

Я пытаюсь выполнить один и тот же запрос SQL для нескольких баз данных и вывести результат в отдельный текстовый файл для каждой базы данных.То, что я делаю до сих пор, имеет проблемы с именем выходного файла.Когда я изменяю имя файла только на C:\TEMP\usersoutput_$Num.txt, он помещает все в один файл.Вот мой код:

$DBArray = @("DataBase1","DataBase2","DataBase3","DataBase4","DataBase5")
$Num = 0

foreach ($element in $DBArray) {
    (Invoke-Sqlcmd -Query "...." -ServerInstance Server2 -Database $DBArray[$Num] -Verbose
    ) *>> C:\TEMP\usersoutput_$DBArray[$Num].txt |
    foreach {$Num = $Num + 1}
}

Где я не так с этим;это лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 12 марта 2019
  1. Если вы уже используете цикл foreach, вам не нужно использовать счетчик приращений.
  2. Если вы используете цикл foreach, вам нужно получить доступ к элементам внутрицикл с использованием переменной $element, а не $DBArray.
  3. Используйте $($element) - для вычисления выражения внутри переменной .

Нижебудет работать на вас -

$DBArray = @("DataBase1","DataBase2","DataBase3","DataBase4","DataBase5")
foreach ($element in $DBArray)
{
    (Invoke-Sqlcmd -Query "...." -ServerInstance Server2 -Database $element -Verbose) *>> C:\TEMP\usersoutput_$($element).txt
}
2 голосов
/ 12 марта 2019

Чтобы PowerShell правильно анализировал что-либо более сложное, чем имя переменной внутри строки, поместите выражение в $():

C:\TEMP\usersoutput_$($DBArray[$Num]).txt

Но поскольку вы уже используете цикл foreach, вам не нужна индексная переменная $Num:

foreach ($db in $DBArray) {
    Invoke-Sqlcmd -Query "...." -ServerInstance "Server2" -Database $db -Verbose |
    Out-File "C:\TEMP\usersoutput_$db.txt"
}

или

"DataBase1","DataBase2","DataBase3","DataBase4","DataBase5" | foreach {
    Invoke-Sqlcmd -Query "...." -ServerInstance "Server2" -Database $_ -Verbose |
    Out-File "C:\TEMP\usersoutput_$_.txt"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...