10

最近、SQL Server 2012 SP3 の使用と、PowerShell スクリプトを使用した SQL Server 2012 の構築を開始しました。私たちの自動化プロセスには、データベース上で複数のデータベース スクリプトを実行するという要件があり、Invoke-Sqlcmdこの問題を発見するまでは非常に信頼できるものでした。

最近 SQL サーバーがインストールされたシステムで、PowerShell のデバッグ モードで適切なパラメーター セットを使用して実行するInvoke-sqlcmdと、問題は発生しません。

PowershellCommand : Invoke-Sqlcmd -InputFile $sStrJBSPExecRolePath -ServerInstance $sStrSQLName -ErrorAction Stop

しかし、同じサーバーを再構築した後、PowerShell オートメーション スクリプトを使用して同じクエリを実行すると、以下のエラーが発生します。 

「Invoke-Sqlcmd」という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してから再試行してください。

SQLPS のインポートなどを提案する多くのオンライン調査を行ったので、テストのためにスクリプトに以下のコマンドを追加しました。

get-pssnapin -Registered
Import-Module “sqlps” -DisableNameChecking**

上記をスクリプトに追加した後でも、同じエラーが発生します。しかし、同じスクリプトを手動で実行すると、まったく問題なく実行されます。何が悪いのかわかりません。

PowerShell オートメーション スクリプト - このスクリプトは、.Net Framework 3.5、SQL Server 2012、SQL Server 2012 SP3 をインストールし、SQL の最大メモリ制限などの SQL 設定を変更するために使用する SMO アセンブリを読み込みます。

4

2 に答える 2

0

これは完全な解決策ではありませんが、私にとってはうまくいく回避策です。

自動化からクエリを実行すると、実行中のユーザーは sqlcmd にアクセスできません。sqlcmd.exe が存在するディレクトリに対してコマンドを実行します。

置くだけ

CD "C:\Program Files (x86)\Microsoft SQL Server\Client SDK\ODBC\130\Tools\Binn".

sqlcmd の場所を取得するには、検索ボックスで SQLCMD.exe の場所を検索します。

見つからない場合は、欠落している場所にインストールする必要がありますが、あなたの場合は存在すると思います。場所を正しく取得する必要があります。

また、自動化スクリプトを実行するユーザーのパス変数を設定する必要があります。そうしないと、sqlcmd のみが認識され、実行されません。

$env:Path   += ";C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn\"

このパスは、それが機能しているローカルユーザーから取得できます$Env:Path

于 2016-12-05T05:23:00.160 に答える