Полный вопрос: у вас есть сценарий Powershell, использующий команду Invoke SQL, используя snappins, мне нужно, чтобы они были включены в задание SQL, версия Powershell для SQL Server несколько повреждена, кто-нибудь знает обходной путь?
Из того, что я собрал, версия powershell для SQL Management Studio недостаточно мощная, не позволяет использовать оснастки, поэтому она не распознает командлеты, которые я использовал в сценарии. Я попытался запустить его в задании как приглашение командной строки, а не сценарий Powershell, из-за чего код несколько работает, однако я проверяю историю задания, и он говорит, что invoke-sql по-прежнему не является распознанным командлетом. Я предполагаю, что, поскольку я запускаю код на удаленном сервере с учетными данными, отличными от моих стандартных, мой профиль с предварительно загруженными снимками не загружается, хотя это несколько сомнительно.
Кроме того, поскольку я новичок в powershell, буду очень признателен за любые советы по улучшению практики кодирования / оптимизации моего кода!
Код выглядит следующим образом:
# define parameters
param
(
$file = "\\server\folder\file.ps1"
)
"invoke-sqlcmd -query """ | out-file "\\server\folder\file.ps1"
# retrieve set of table objects
$path = invoke-sqlcmd -query "select TableName from table WITH (NoLock)" -database db -server server
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$so = New-Object Microsoft.SqlServer.Management.Smo.ScriptingOptions
$so.DriPrimaryKey = $false
$so.Nocollation = $true
$so.IncludeIfNotExists = $true
$so.NoIdentities = $true
$so.AnsiPadding = $false
# script each table
foreach ($table in $path)
{
#$holder = $table
$table = get-item sqlserver:\sql\server\default\databases\database\tables\dbo.$($table.TableName)
$table.script($so) | out-file -append $file
}
(get-content "\\server\folder\file.ps1") -notmatch "ANSI_NULLS" | out-file "\\server\folder\file.ps1"
(get-content "\\server\folder\file.ps1") -notmatch " AS "| out-file "\\server\folder\file.ps1"
(get-content "\\server\folder\file.ps1") -notmatch "Quoted_" | out-file "\\server\folder\file.ps1"
(get-content "\\server\folder\file.ps1") -replace "\) ON \[PRIMARY\].*", ")" | out-file "\\server\folder\file.ps1"
(get-content "\\server\folder\file.ps1") -replace "\[text\]", "[nvarchar](max)" | out-file "\\server\folder\file.ps1"
(get-content "\\server\folder\file.ps1") -replace " SPARSE ", "" | out-file "\\server\folder\file.ps1"
(get-content "\\server\folder\file.ps1") -replace "COLUMN_SET FOR ALL_SPARSE_COLUMNS", "" | out-file "\\server\folder\file.ps1"
""" -database database -server server" | out-file "\\server\folder\file.ps1" -append