1

完全な質問: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 

答えて

1

は、だから私は自分の質問への答えを考え出しました。このサイトを使用する:http://www.mssqltips.com/tip.asp?tip=1684http://www.mssqltips.com/tip.asp?tip=1199

は、私は彼がSQL Serverエージェントプロキシを使用して、そうすることができたことを考え出したので、私は黄色いレンガの道をたどって、基本的に私は自分のアカウントにプロキシを設定し、ことができましたフィーチャーを介して外部パワーシェルを使用する。プロキシの作成時には、オブジェクトエクスプローラの[有価証券]タブに資格情報を作成してから、資格情報を選択する必要があります。基本的には、powershellという名前のプロキシを作成し、powershellサブシステムを使用してログイン情報を使用して資格を作成しました。 VOILA!

0

あなたはSNAPINSを毎回追加する必要があります。あなたのエディタでは、すでに別のスクリプト/タブ/セッションから読み込まれている可能性があります。 SQL Serverでは、スクリプトの先頭に次のようなものを追加する必要があります。

IF ((Get-PSSnapin -Name sqlserverprovidersnapin100 -ErrorAction SilentlyContinue) -eq $null) 
    { 
     Add-PsSnapin sqlserverprovidersnapin100 
    } 
IF ((Get-PSSnapin -Name sqlservercmdletsnapin100 -ErrorAction SilentlyContinue) -eq $null) 
    { 
     Add-PsSnapin sqlservercmdletsnapin100 
    } 
+0

SQL Serverではスナップインの使用が許可されていないため、get-pssnapinとadd-pssnapinはエラー: – Jerome

+0

@userのように認識されないため、エラーが表示されませんでした。それはできますか? – JNK

+0

ジョブステップは、PowerShellスクリプトの1行目でエラーを受け取りました。対応する行は 'IF((Get-PSSnapin -Name sqlserverprovidersnapin100 -ErrorAction SilentlyContinue)-eq $ null)'です。スクリプトを訂正し、ジョブのスケジュールを変更してください。 PowerShellから返されるエラー情報は次のとおりです。 'Get-PSSnapin'という用語は、コマンドレット、関数、スクリプトファイル、または実行可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してから、もう一度やり直してください。 'プロセス終了コード-1。 – Jerome

0

私はあなたがこの問題を回避しようとしているエラーがわからない - あなたはそれを投稿することができますか?

これはPowerShellのプロンプトから試しましたか?

のAdd-PSSnapinコマンドSqlServerCmdletSnapin100

+0

私は、powershellコマンドプロンプトでうまく動作しますが、問題は、スナップインを許可しないpowershellのSQL Managements Studiosバージョンでは機能しないということです。 – Jerome

+0

@ user823694あなたは何を得ていますか? – Matt

関連する問題