PowerShell - хранение нескольких результатов запроса в одной переменной - PullRequest
0 голосов
/ 28 мая 2020

TL; DR: Я ищу способ добавить результаты запроса SQL в переменную PowerShell DataRow, чтобы продолжить хранение результатов нескольких запросов.

Я честно новичок в PowerShell, и я «унаследовал» работающий сценарий, который запускает внутренний (разработанный компанией) сценарий оболочки PowerShell в качестве интерфейса для запросов к базе данных MS SQL. В основном сценарий делает следующее:

$ results =. \ Wrapper-script ""

$ results.GetType () сообщает мне, что это объект типа System.Data.DataRow.

Содержимое $ result обрабатывается ниже по потоку, и все это работает нормально.

Однако параметры оператора SQL SELECT становятся все длиннее и длиннее (он запрашивает атрибуты указанных c серверов. базы данных активов), поскольку список хостов, для которых мне нужно извлекать данные, становится длиннее. Итак, я пытался изменить скрипт, чтобы я мог просто заполнить текстовый файл хостами для запроса, прочитать его с помощью Get-Content, а затем использовать 'foreach' l oop для итерации по этому списку хостов и запустить один запрос SQL для каждого хоста, немного спите (чтобы не забивать БД) и просто продолжайте добавлять каждый набор результатов в эту переменную $ results. Я пробовал следующее:

$serverList = Get-Content -Path /path/to/file
foreach ($item in $serverList) {
    $curObj = .\wrapper-script "<sql SELECT statement>"
    $results += $curObj
}

Но скрипт здесь не работает, и я еще не уверен в причине, но я предполагаю, что + = не является допустимой операцией для этого типа объекта и, надеюсь, есть другой способ сделать это.

Мне нужно сохранить типы объектов нетронутыми, потому что это всего лишь часть гораздо большего сценария, и при моем текущем уровне навыков Po Sh мне нужно работать в этих пределах и не откусить больше, чем я могу прожевать.

Итак, я ищу способ просто добавлять результаты запроса SQL в существующую переменную DataRow. Возможно ли такое?

Спасибо!

1 Ответ

0 голосов
/ 06 июня 2020

Вот мой комментарий в качестве ответа.

Добавляя что-то в al oop к тому, что должно стать массивом, с использованием += конкатенации, весь массив необходимо каждый раз воссоздавать, что требует больших затрат для потребление памяти и скорость обработки.

Гораздо эффективнее позволить Powerhell собирать объекты для хранения с таким синтаксисом:

$results = foreach ($item in $serverList) { .\wrapper-script "<sql SELECT statement>" }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...