完全な質問:snappinsを使用してInvoke SQLコマンドを使用してPowershellスクリプトを作成しましたが、SQLジョブにSQL Serverバージョンが含まれている必要がありますが、PowershellのSQL Serverバージョンは多少不具合があります。Powershellスクリプトは、SQLジョブに必要なInvoke-SQLコマンドを使用して、PowershellのSQL Serverバージョンはやや不自由ですが、回避策がありますか?
SQL Management Studioのバージョンのpowershellは、スクリプトで使用したコマンドレットを認識しないため、スナップインの使用を許可していません。 PowerShellスクリプトではなく、コマンドラインプロンプトとして実行するようにしましたが、コードは多少動作しますが、ジョブの履歴を確認しても、invoke-sqlはまだ認識されていないコマンドレットです。私は、リモートサーバ上でコードを実行しているので、私の標準とは異なるクレデンシャルで、プリロードされたsnappinsがロードされていないことがわかりますが、やや疑わしいです。
また、私は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
SQL Serverではスナップインの使用が許可されていないため、get-pssnapinとadd-pssnapinはエラー: – Jerome
@userのように認識されないため、エラーが表示されませんでした。それはできますか? – JNK
ジョブステップは、PowerShellスクリプトの1行目でエラーを受け取りました。対応する行は 'IF((Get-PSSnapin -Name sqlserverprovidersnapin100 -ErrorAction SilentlyContinue)-eq $ null)'です。スクリプトを訂正し、ジョブのスケジュールを変更してください。 PowerShellから返されるエラー情報は次のとおりです。 'Get-PSSnapin'という用語は、コマンドレット、関数、スクリプトファイル、または実行可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してから、もう一度やり直してください。 'プロセス終了コード-1。 – Jerome