Powershell крізь призму sql server, windows it pro

ІТ-інфраструктура для вашого підприємства

Минуло вже майже сім років з тих пір, як оболонка PowerShell стала надбанням фахівців в області інформаційних технологій, однак і сьогодні багато ІТ-професіонали не надто поспішають з'ясувати, що це за продукт. Тим часом, цілком можливо (це залежить від того, які завдання вам доводиться вирішувати на роботі), що PowerShell виявиться для вас воістину безцінним інструментом.

За задумом розробників Microsoft, PowerShell повинен стати засобом управління всіма типами серверів і платформ, що випускаються корпорацією. І якщо говорити про більшість ІТ-фахівців, питання не в тому, будуть чи не будуть вони користуватися технологією PowerShell, а в тому, коли саме вони почнуть з нею працювати.

Але як би там не було, в поданні фахівців з SQL Server оболонка PowerShell завжди була оповита якоюсь завісою таємниці. Так ось, я хочу представити вам цей продукт, якщо можна так висловитися, через призму SQL Server. Природно, у мене немає можливості розповісти про все, що вам слід знати про технології PowerShell, в одній статті, яка складається всього лише з декількох тисяч слів. Але я можу продемонструвати механізм взаємодії PowerShell і SQL Server, і може бути, на перший раз цього буде достатньо.

Але перед тим як я почну свою розповідь, дозвольте мені зробити одне важливе зауваження. Я не виступаю за заміну мови T-SQL засобами PowerShell. Якщо ви зараз керуєте системою SQL Server за допомогою цього діалекту, підстав відмовлятися від нього немає. Але справа в тому, що багато фахівців в області SQL Server вишукують способи включення оболонки PowerShell в свою повсякденну роботу. На мій погляд, максимального ефекту ми зможемо домогтися саме при спільному використанні PowerShell і T-SQL.

Отже, за справу

Цю політику необхідно визначати тільки один раз. Відзначимо, що при введенні зазначеної команди не слід вводити символи PS C:>, оскільки вони не є частиною команди. Це всього лише запрошення на введення команд, що вказує поточний каталог, в якому вам слід працювати. При вивченні технології PowerShell корисно включати дану інформацію, і саме з цієї причини я позначаю її тут, а також в наступних командах.

Далі імпортуйте модуль sqlps за допомогою наступної команди:

Цілком можливо, що в процесі імпортування модуля ви отримаєте попередження про неприпустимих дієсловах. Всі команди PowerShell, які називаються складовими командами (cmdlet), повинні відповідати стандарту іменування «дієслово - іменник». При цьому застосовуються дієслова повинні входити в список стандартних дієслів. NET, таких, як Get, Set і Remove. Дотримання стандарту іменування полегшує пошук команд. У модуль sqlps входить кілька команд, відступаючих від цього стандарту. Інакше кажучи, пошук однієї з імпортованих команд SQL, можливо, буде трохи складніше.

На екрані з'явиться список, подібний до наведеного на екрані 1.

Powershell крізь призму sql server, windows it pro

Екран 1. Отримання списку доступних складових команд в? Модулі sqlps

Відзначимо, що при використанні PowerShell 3.0 для запуску команди, що входить до складу модуля, наприклад команди Restore-SQLDatabase, необов'язково попередньо імпортувати модуль. А у версії PowerShell 2.0 для використання будь-якої з команд модуля sqlps цей модуль необхідно спочатку імпортувати, що я і зробив кілька секунд назад.

Наскільки можна судити по іменах складових команд на екрані 1, якщо угода про стандартний іменуванні «дієслово-іменник» дотримано, користувач може без особливих зусиль зрозуміти, яке завдання виконує та чи інша команда. Але якщо у вас є сумніви, можете звернутися за допомогою до програми PowerShell. Припустимо, ви хочете дізнатися, яку операцію виконує команда Invoke-SQLCmd. Введіть наступну команду:

Як показано на екрані 2, дана команда повертає відомості про те, яку дію виконує складова команда Invoke-SQLCmd і як нею користуватися.

Powershell крізь призму sql server, windows it pro

Екран 2. Отримання довідкової інформації про складову команді Invoke-SQLCmd

Якщо вам потрібна більш детальна інформація, можете додати параметр -full наступним чином:

А на ряді сайтів в Інтернеті є навіть вміст, розміщене членами спільноти користувачів.

Використання провайдера SQL Server

Модуль sqlps включає в себе провайдер SQLServer. Отримати відомості про провайдера SQLServer ви можете за допомогою наступної команди:

Результати її виконання представлені на екрані 3.

Powershell крізь призму sql server, windows it pro

Екран 3. Отримання довідкової інформації про провайдера SQL Server

Я рекомендую вам запустити цю команду і присвятити кілька хвилин вивчення відомостей про провайдера SQLServer. Головна думка, що міститься в цих даних, полягає в тому, що за допомогою згаданого провайдера користувач може переміщатися по екземпляру SQL Server, як якщо б це була файлова система, і витягувати інформацію або вносити зміни, використовуючи методи, які застосовуються при роботі з об'єктами PowerShell . Так, складова команда Set-Location використовується для зміни поточного каталогу, а команда Get-ChildItem - для формування переліку файлів і каталогів, що містяться в поточному каталозі. Той, хто знайомий з командами командної оболонки Windows (cmd.exe), напевно буде охоче використовувати відповідні псевдоніми даної складовою команди - cd і dir. Якщо, скажімо, у вас виникне потреба перейти на накопичувач SQL Server і сформувати опис його вмісту, потрібно виконати такі команди:

Подібним же чином ви можете звернутися до свого екземпляру SQL Server і пройти по його вмісту. Наприклад, якщо вашому примірнику SQL Server присвоєно ім'я chi-db01, потрібно запустити команди:

На екрані 4 представлені результати виконання обох наборів команд.

Powershell крізь призму sql server, windows it pro

Екран 4. Перелік накопичувачів PSDrives і опис їх вмісту

Результати її виконання представлені на екрані 5.

Powershell крізь призму sql server, windows it pro

Екран 5. Перелік облікових записів для входу

У журналі дана команда розміщується на декількох рядках, але при роботі на консолі PowerShell вам слід вводити її одним рядком. Це стосується і інших команд, які переносяться на наступний рядок. Як показано на екрані 6, дана команда формує список всіх облікових записів для входу з домену Globomantics, а також відомості про те, коли була створена кожна з облікових записів для входу, коли вона була змінена востаннє і з якою базою даних асоціюється за замовчуванням . Причому всі ці відомості представлені в зручному для читання форматі.

Powershell крізь призму sql server, windows it pro

Екран 6. Отримання відомостей про облікові записи для? Входу Globomantics

Якщо вираз, що міститься в цій команді, здається незрозумілим, нехай це вас не бентежить. Варто трохи попрактикуватися - і ви зможете розуміти його без жодного напруження. Я хочу, щоб ви отримали уявлення про те, чого я зміг домогтися за допомогою базового вираження PowerShell.

Підключення середовища PowerShell ISE необхідно, оскільки для передачі вихідних даних в розташовану в окремому вікні інтерактивну таблицю, показану на екрані 7, команда використовує складову команду Out-GridView. Як бачите, в таблиці міститься список баз даних, відсортованих за розміром, а також деякі інші відомості, що стосуються цих баз даних.

Powershell крізь призму sql server, windows it pro

Екран 7. Відображення в інтерактивній таблиці переліку баз даних, відсортованих за розміром

Крім того, користувач може вносити в об'єкти зміни за допомогою об'єктної моделі PowerShell. Для прикладу я у всіх подробицях опишу процедуру зміни числа допустимих спроб звернення до облікового запису (тобто процедуру зміни властивості AccountRetryAttempts) для Database Mail. Спочатку потрібно перейти в каталог Mail примірника chi-db01 і сформувати перелік складових його елементів.

У вмісті каталогу ви виявите об'єкт ConfigurationValues. Направивши по конвеєру результати виконання команди dir ConfigurationValues ​​складовою команді Get-Member, ви зможете отримати імена і описи властивостей і методів згаданого об'єкта. Команда виглядає наступним чином:

Результати її виконання представлені на екрані 8.

Powershell крізь призму sql server, windows it pro

Екран 8. Отримання імен та описів властивостей і методів об'єкта ConfigurationValues

Проаналізувавши отриману інформацію, ви зможете визначити, які властивості будуть використовуватися. В даному випадку ви будете задіяти властивості Name і Value і використовувати їх в команді.

Результати виконання команди відображені на екрані 9. Як бачите, число допустимих спроб звернення до облікового запису на даний момент встановлено рівним 1.

Powershell крізь призму sql server, windows it pro

Екран 9. Витяг поточного значення властивості AccountRetryAttempts

Щоб зрозуміти, як користуватися об'єктами накопичувача SQLServer, ви будете багаторазово передавати ці об'єкти за допомогою конвеєра. Щоб полегшити виконання цієї процедури, можете зберігати об'єкти в змінних. Для збереження об'єкта ConfigurationValues ​​в змінній $ config виконайте команду:

Змінна $ config представляє собою масив об'єктів конфігурації, значення яких ми можемо отримувати і встановлювати. Оскільки мова йде про масиві з індексом, що починається з нуля, а властивість AccountRetryAttempts - це перший ключ в даному масиві, для отримання і установки його значення можна використовувати параметр $ config [0]. Наприклад, наступна команда зчитує поточне значення властивості AccountRetryAttempts (тобто 1):

Ця команда встановлює значення параметра, що дорівнює 3:

Щоб переконатися в тому, що дане значення змінено, ми можемо використовувати в цій команді Get-Item:

Результати виконання команди представлені на екрані 10. Як ви можете переконатися, число допустимих спроб звернутися до облікового запису збільшилася до трьох.

Екран 10. Підтвердження отримання властивістю AccountRetryAttempts нового значення

Я готовий визнати, що управління системою SQL Server за допомогою провайдера SQL Server, описане мною вище, може представляти певні труднощі. Тому при можливості ви, ймовірно, захочете скористатися складовими командами sqlps, оскільки з ними працювати простіше.

Використання команд sqlps

Як випливає з назви команди Invoke-SQLCmd, її завдання - запускати команди SQL. Це завдання виконується за допомогою параметра Query. Фактично будь-який вираз T-SQL може бути виконано з командного рядка PowerShell, скажімо, таким чином:

На екрані 11 показані приблизні результати.

Екран 11. Зчитування версії SQL Server

Я працював на сервері SQL Server і запускав команду з локального екземпляра SQL Server, так що за замовчуванням вона виконувалася для локального комп'ютера. Однак користувач може вказати й іншу систему, а також другий примірник, в такий спосіб:

Встановивши модулі SQL Server PowerShell на своїй настільній системі, ви зможете з одного вузла управляти декількома серверами, що вельми зручно. Але поки давайте виконаємо кілька команд на локальному сервері. Припустимо, у вас є сценарій New-ComputerDataDB.sql, який забезпечує створення бази даних ComputerData. Ви можете запустити його на виконання за допомогою складовою команди Invoke-SQLCmd:

Крім створення бази даних ви можете сформувати нову таблицю з командного рядка PowerShell. Для цього вам потрібно буде створити рядок введення (here-string), що містить відповідний запит. Рядок here-string є рядком, що займає кілька рядків і створену з використанням особливого методу. Ось приклад такого рядка, призначеної для формування таблиці Computers:

Слід зауважити, що якщо ви створюєте рядок here-string в інтегрованому середовищі сценаріїв PowerShell ISE, вам потрібно простежити за тим, щоб всі рядки були вирівняні по лівому краю. Після запуску команди на виконання змінна $ query буде містити код, необхідний для створення таблиці Computers. Після цього ви зможете запустити цей код за допомогою такої, наприклад, команди:

Ця команда формує таблицю Computers в базі даних ComputerData, яка розміщується в екземплярі chi-db01.

Крім створення таблиць і баз даних ви можете виконувати безліч інших завдань. Наприклад, я написав нескладну функцію Update-MyDB, що дозволяє оновлювати таблицю Computers за допомогою даних, отриманих з моєї мережі. Далі я завантажив цю функцію в свій сеанс PowerShell за допомогою команди Invoke-SQLCmd:

Після завантаження функції я зміг запустити фрагмент коду таким чином:

Даний фрагмент коду спочатку зчитує список комп'ютерів з файлу MyComputers.txt. Потім для кожного внесеного в список комп'ютера він за допомогою засобу керування Windows Management Instrumentation (WMI) зчитує відомості про операційну систему. Нарешті, цей фрагмент коду запускає на виконання функцію Update-MyDB, яка оновлює відповідні відомості в таблиці Computers. На мій погляд, в цьому проявляється найважливіше гідність управління системою SQL Server за допомогою технології PowerShell, оскільки я можу інтегрувати запити SQL в команди PowerShell. Крім того, я можу з легкістю виконувати запит на отримання даних безпосередньо з оболонки PowerShell. Для цього потрібно ввести наступний код:

Результати представлені на екрані 12.

Powershell крізь призму sql server, windows it pro

Екран 12. Отримання відомостей про комп'ютери з бази даних ComputerData

Схожі статті