1

完全な質問:PowershellスクリプトでInvoke SQLコマンドを使用し、スナップピンを使用している場合、SQLジョブに含める必要があります。PowershellのSQL Serverバージョンはやや機能不全です。回避策を知っている人はいますか?

私が収集したものから、SQL Management StudioのバージョンのPowerShellは十分に機能しておらず、スナップピンを使用できません。そのため、スクリプトで使用したコマンドレットを認識しません。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
4

3 に答える 3

1

それで、私は自分の質問に対する答えを見つけました。このサイトの使用: http://www.mssqltips.com/tip.asp?tip=1684および http://www.mssqltips.com/tip.asp?tip=1199

彼は SQL Server エージェント プロキシを使用してこれを実行できることがわかったので、黄色いレンガの道をたどりました。基本的には、自分のアカウントにプロキシを設定し、機能を通じて外部の PowerShell を使用できるようになりました。注: プロキシの作成時に資格情報を選択できるようにするには、オブジェクト エクスプローラーの [セキュリティ] タブで資格情報を作成する必要があります。基本的に、powershell サブシステムを使用して powershell という名前のプロキシを作成し、ログイン情報を使用して資格情報を作成しました。出来上がり!

于 2011-07-08T13:26:34.663 に答える
0

回避しようとしているエラーがわかりません。投稿できますか?

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

追加 PSSnapin SqlServerCmdletSnapin100

于 2011-07-07T16:15:15.053 に答える
0

毎回スナップインを追加する必要があります。エディターでは、別のスクリプト/タブ/セッションから既にそれらをロードしている可能性があります。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
    }
于 2011-07-07T16:04:08.837 に答える