PowerShell - .
|
Новый участник Сообщения: 21 |
Добрый день. С помощью Invoke-Sqlcmd пытаюсь сделать, чтобы скрипт выполнял запросы сразу на нескольких SQL базах. Вот пример кода. Скрипт сохраняет в переменные строки с двух текстовых файлов.
Проблема заключается в том, что $SQLName сохраняет только первую строку из файла komp.txt и пытается на одном и том же компьютере подключиться к базе из переменной $SQLBD. |
|
Отправлено: 15:31, 27-07-2021 |
Новый участник Сообщения: 21
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
|
|
Отправлено: 08:57, 01-08-2021 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
fascinating rhythm Сообщения: 6676
|
Профиль | Отправить PM | Цитировать Можно организовать общение с пользователем через командную строку, задавая вопросы или предоставляя выбор из пунктов. Это сильно сэкономит объём кода и силы для его написания.
|
------- Отправлено: 09:12, 01-08-2021 | #22 |
Новый участник Сообщения: 21
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
|
|
Отправлено: 09:18, 02-08-2021 | #23 |
fascinating rhythm Сообщения: 6676
|
Профиль | Отправить PM | Цитировать Сколько там баз?
Уберите вложенный foreach с базами и сделайте несколько строк Invoke-Sqlcmd, прописав там имена баз в явном виде. Будет так работать? |
------- Отправлено: 09:40, 02-08-2021 | #24 |
Crazy Сообщения: 1231
|
Профиль | Отправить PM | Цитировать Цитата valerarom2021:
Именно, для такого случая, рекомендовал: Цитата YuS_2:
Напишите, что в итоге требуется получить. Составьте вручную результирующие строки, которые покажут, как именно должен осуществляться доступ к базам. |
||
------- Отправлено: 10:27, 02-08-2021 | #25 |
Новый участник Сообщения: 21
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
Цитата DJ Mogarych:
Цитата YuS_2:
Цитата YuS_2:
|
||||
Отправлено: 10:36, 02-08-2021 | #26 |
fascinating rhythm Сообщения: 6676
|
Профиль | Отправить PM | Цитировать Сами по себе вложенные циклы работают нормально.
$servers = 1..5 |% {"server$($_.ToString("00"))"} $dbs = 1..3 |% {"db$($_.ToString("00"))"} foreach ($server in $servers) { foreach ($db in $dbs) { "Invoke-Sqlcmd -server $server -database $db" } } Invoke-Sqlcmd -server server01 -database db01 Invoke-Sqlcmd -server server01 -database db02 Invoke-Sqlcmd -server server01 -database db03 Invoke-Sqlcmd -server server02 -database db01 Invoke-Sqlcmd -server server02 -database db02 Invoke-Sqlcmd -server server02 -database db03 Invoke-Sqlcmd -server server03 -database db01 Invoke-Sqlcmd -server server03 -database db02 Invoke-Sqlcmd -server server03 -database db03 Invoke-Sqlcmd -server server04 -database db01 Invoke-Sqlcmd -server server04 -database db02 Invoke-Sqlcmd -server server04 -database db03 Invoke-Sqlcmd -server server05 -database db01 Invoke-Sqlcmd -server server05 -database db02 Invoke-Sqlcmd -server server05 -database db03 Возможно, следовало бы базы перечислять в самом запросе и делать один запрос на хост, чем заниматься ковровой бомбардировкой хоста 50-ю запросами. |
------- Отправлено: 11:39, 02-08-2021 | #27 |
Новый участник Сообщения: 21
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
|
|
Отправлено: 11:55, 02-08-2021 | #28 |
Crazy Сообщения: 1231
|
Профиль | Отправить PM | Цитировать Цитата valerarom2021:
![]() Вам же не отказывают в помощи, но любая задача решается быстрее, если правильно составить её условия... Цитата valerarom2021:
А вот в цикле происходит разбор того, что записано в массиве. Ещё раз: циклы отрабатывают ровно так, как и должны. Просто Вы недопонимаете, что содержат переменные в каждой итерации каждого цикла. |
||
------- Последний раз редактировалось YuS_2, 02-08-2021 в 12:02. Отправлено: 11:56, 02-08-2021 | #29 |
Новый участник Сообщения: 21
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Get-Content сохраняет строки в массив $SQLNames. Дальше с коллекцией работает foreach. В данном случает в массиве только первая строка из файла komp.txt, а их там 50. Получается имя компьютера не меняется, только обновляется переменная $SQLBDs. В итоге скрипт на одном компьютере пытается соединиться с базами со списка bd.txt Надеюсь сейчас понятно. Объяснил. Как мне сделать чтобы массивы $SQLNames, $SQLBDs совпадали так ? например: R76-356785-N DB352785, следующее R76-356787-N DB352787 Либо используя один текстовый файл считывать сразу R76-356785-N DB352785 |
|
Последний раз редактировалось valerarom2021, 02-08-2021 в 12:22. Отправлено: 12:14, 02-08-2021 | #30 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - [блог] Игнорирование проверки сертификата для Invoke-WebRequest/Invoke-RestMethod | Kazun | Скриптовые языки администрирования Windows | 0 | 07-09-2017 05:30 | |
PowerShell - Invoke-WebRequest NoProxy | Elven | Скриптовые языки администрирования Windows | 2 | 18-05-2017 16:43 | |
PowerShell - [блог] Отправка Post запроса используя Invoke-WebRequest | Kazun | Скриптовые языки администрирования Windows | 0 | 04-09-2016 16:30 | |
C/C++ - [решено] C# Invoke(), работает не как надо, почему? | Barit | Программирование и базы данных | 1 | 21-04-2012 15:02 | |
PowerShell - [блог] Invoke-SQL | Xaegr | Скриптовые языки администрирования Windows | 0 | 17-08-2010 00:30 |
|