[ Част 1 | Част 2 | Част 3 ]
В част 1 и част 2 от тази серия представих ParamParser:модул PowerShell, който помага да анализира информацията за параметрите – включително стойности по подразбиране – от съхранени процедури и дефинирани от потребителя функции, защото SQL Server няма да го направи вместо нас.
В първите няколко итерации на кода просто имах .ps1 файл, който ви позволяваше да поставите едно или повече тела на модула в твърдо кодирана $procedure
променлива. В тези ранни версии липсваха много неща, но досега сме разгледали няколко неща:
- Сега е подходящ модул – можете да стартирате
Import-Module .\ParamParser.psm1
и след това извикайтеGet-ParsedParams
функционира по време на сесия (в допълнение към другите предимства, които получавате от модул). Това не беше тривиално преобразуване – поклон отново на Уил Уайт. - Поддръжка на дефинирани от потребителя функции – В част 2 обясних как имената на функциите са по-трудни за анализиране от имената на процедурите; сега кодът се справя правилно с това.
- Автоматизиране на ScriptDom.dll – нямаме право да разпространяваме този ключов файл и тъй като можете да срещнете проблеми, ако го нямате (или имате остаряла версия), Уил създаде
init.ps1
, който автоматично изтегля и извлича най-новата версия (понастоящем 150.4573.2) и я поставя в същата папка като другите файлове. - Допълнителни източници – все още можете да подавате необработен блок скрипт, ако желаете, но сега можете също да използвате множество екземпляри и бази данни като източници, да препращате директно към един или повече файлове или да изтегляте всички
.sql
файлове от една или повече директории. Ще покажа примерен синтаксис по-долу. - Изходът показва източник – тъй като можете да обработвате множество файлове или бази данни в едно извикване и може да имате няколко обекта с едно и също име, включително източникът помага да се разграничи. Не мога да направя много, ако имате два екземпляра на
CREATE PROCEDURE dbo.blat ...
в същия файл или необработен скрипт и източникът дори не е посочен, ако използвате-Script
и преминете в низ. - Подобрен резултат – все още можете да изхвърлите всичко в конзолата, но можете също да използвате
Out-GridView
за да видите резултатите във формат на мрежа (ето скучен пример от AdventureWorks2019) или регистрирайте информацията за параметрите в база данни за консумация на друго място.
Следвайте инструкциите в readme, за да изтеглите и настроите. След като клонирате хранилището, стартирайте .\init.ps1
и след това Import-Module .\ParamParser.psm1
. Тествайте го с прост пример, като:
Get-ParsedParams -Script "СЪЗДАВАНЕ НА ПРОЦЕДУРА dbo.a @b int =5 out КАТО ПЕЧАТ 1;" -GridView
Изход (щракнете за увеличаване):
Има обаче и много други комбинации от параметри. Заглавката на помощта показва добра част от възможния синтаксис (и отново благодаря на Уил за много невероятно почистване тук):
Get-ParsedParams -?
Резултати:
Get-ParsedParams [-Script]Get-ParsedParams [-File]
Get-ParsedParams [-Directory]
Get-ParsedParams [-ServerInstance]
Още няколко примера
За да анализирате всички обекти в c:\temp\db.sql
:
Get-ParsedParams -File "C:\temp\db.sql" -GridView
За да анализирате всички .sql файлове в c:\temp\scripts\
(рекурсивен) и h:\sql\
(също рекурсивно):
Get-ParsedParams -Директория "C:\temp\scripts\", "H:\sql\" -GridView
За да анализирате всички обекти в msdb
на локалния именуван екземпляр SQL2019
с помощта на удостоверяване на Windows:
Get-ParsedParams -ServerInstance ".\SQL2019" -База данни "msdb" -GridView
За да анализирате всички обекти в msdb
, floob
и AdventureWorks2019
на локалния именуван екземпляр SQL2019
и да получите подкана за идентификационни данни за SQL удостоверяване:
Get-ParsedParams -ServerInstance ".\SQL2019" -База данни "msdb","floob","AdventureWorks" -AuthenticationMode "SQL" -GridView
За да анализирате всички обекти в msdb
на локалния именуван екземпляр SQL2019
и предайте идентификационни данни за SQL удостоверяване:
$password =ConvertTo-SecureString -AsPlainText -Force -String "Str0ngP@ssw0rd"$credential =Нов-обект -TypeName "PSCredential" -ArgumentList "SQLAuthUsername", $passwordGet-ParsedInstance -Serta\9Ser. "msdb" -AuthenticationMode "SQL" -SqlCredential $credential -GridView
За да анализирате всички .sql файлове в c:\temp\scripts\
(рекурсивен) и поставете резултатите в таблица в локалния наименован екземпляр SQL2019
в база данни, Utility
, където вече сте създали dbo.ParameterSetTVP
, dbo.LogParameters
и др., използвайки удостоверяване на Windows:
Get-ParsedParams -Директория "C:\temp\scripts" -LogToDatabase -LogToDBServerInstance ".\SQL2019" -LogToDBDatabase "Помощна програма"
За да анализирате всички обекти в msdb
на локалния именуван екземпляр SQL2019
и пишете в Utility
база данни на същия екземпляр, като се използват същите идентификационни данни за SQL удостоверяване:
$password =ConvertTo-SecureString -AsPlainText -Force -String "Str0ngP@ssw0rd"$credential =Нов-обект -TypeName "PSCredential" -ArgumentList "SQLAuthUsername", $passwordGet-ParsedInstance -Serta\9Ser. "msdb" -Режим на удостоверяване "SQL" -SqlCredential $credential -LogToDatabase ` -LogToDBServerInstance ".\SQL2019" -LogToDBDatabase "Помощна програма" -LogToDBAuthenticationMode "SQL" -LogToDBAuthenticationMode "SQL" -LogToDBSql> $ToDBSql>Това започва да става объркано, но да се надяваме, че автоматизирате това, а не го пишете на ръка всеки път.
Следващия път
Както винаги, има още подобрения, които могат да бъдат направени. Не харесвам имената на параметрите, които измислих, но мисля, че има по-важни подобрения, като обработка на грешки и разширяемост, които трябва да се направят. Някакви предположения? Моля, уведомете ме или, още по-добре, допринесете!
[ Част 1 | Част 2 | Част 3 ]