none
SQL2008R2のPOWERSHELL起動 RRS feed

  • 質問

  • お世話になります。

    SQLManagement Studioからpowershellを起動すると
    下記のエラーが表示されます。
    原因がわかりません。対応策を押してください。

    また通常(?)のpowershellからもSQLを使用したいのですが、可能ですか?

    用語 'Add-PSSnapin' は、コマンドレット、関数、スクリプト ファイル、または操作可
    能なプログラムの名前として認識されません。名前が正しく記述されていることを確認
    し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してくだ
    さい。
    発生場所 C:\Users\(ユーザー名)\Documents\WindowsPowerShell\profile.ps1:3 文字:13
    + Add-PSSnapin <<<<  Pscx
        + CategoryInfo          : ObjectNotFound: (Add-PSSnapin:String) []、Command
        NotFoundException
        + FullyQualifiedErrorId : CommandNotFoundException

    C:\Users\(ユーザー名)\Documents\WindowsPowerShell\profile.ps1 : SQL Server Power
    Shell プロバイダー エラー: パス SQLSERVER:\get- は存在しません。有効なパスを指
    定してください。
    発生場所 行:1 文字:2
    + . <<<<  'C:\Users\(ユーザー名)\Documents\WindowsPowerShell\profile.ps1'
        + CategoryInfo          : NotSpecified: (:) [profile.ps1]、GenericProviderE
        xception
        + FullyQualifiedErrorId : Microsoft.SqlServer.Management.PowerShell.Generi
       cProviderException,profile.ps1

    2010年9月14日 4:50

回答

  • まず、1つめのエラーは、

    Add-PSSnapin Pscx

    が原因と思われます。

    Add-PSSnapin の引数となり得るもの(登録済みの Snapin) を調べるには、

    Get-PSSnapin -Registered

    を実行します。このコマンドの結果にでてきたものについては、Add-PSSnapin

    することができます。でてこなければ… Snapin できません。

     

    2つめは、"$Pscx:ProfileDir\PscxConfig.ps1" に原因がありそうです。

    PowerShell の設定ファイル (profile.ps1) から、別の PowerShell スクリプトを

    呼び出しているようですね。このスクリプトを調べていただけますか?

     

    • 回答としてマーク OTAKA 2010年9月17日 5:24
    2010年9月15日 11:46
  • profile.ps1をリネームして(つまり無効化して)、SQLからpowershellを実行してみたのですが、
    get-commandも実行できませんでした。

    これは私のSQL-POWERSHELLだけなの現象なのでしょうか?


    単に、プロバイダがSQLだからではないでしょうか。
    SQLPS.EXEを実行していただいて、

    cd C:\

    とでもしていただければ、Get-Commandが使用できます。

    その時、たしかにAdd/GetともにPSSnapinが出てきません。
    きっと、SQL Server専用のPowerShellだから、スナップインを追加させないんだ、程度に納得していました^^;

    (補足)
    SQLPS.EXEは、SQL Management StudioからよばれるSQL Server PowerShellのことです。SQL Serverの32bit側のBinn以下にいます。
    例:(32bit環境の場合、x86をなくして読んでください)
    C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn

    • 編集済み ChukiMVP 2010年9月16日 10:42 補足追加
    • 回答としてマーク OTAKA 2010年9月17日 5:24
    2010年9月16日 10:20

すべての返信

  • メッセージを読ませていただきますと、PowerShell の設定ファイルが悪さをしているようです。

    差し支えなければ、

    'C:\Users\(ユーザー名)\Documents\WindowsPowerShell\profile.ps1'

    を掲載していただけないでしょうか?

    ちなみに、私は、profile.ps1 ではなく、Microsoft.PowerShell_profile.ps1 に

    ファイル名を変更していますが、Windows PowerShell 起動時も Management Studio

    からの PowerShell 起動時も、エラーはでていません。

     

    2010年9月14日 11:35
  • profile.ps1 ファイルを見れば、具体的なアドバイスができるかもしれませんが、

     

    私の予想では、profile.ps1 の中で Add-PSSnapin のコマンドラインに改行コードが

    入ってしまった(もしくは、バッククォート (`) を消してしまった)のではないかと思います。

     

    もし、SQL Server のスナップインを読み込みたいと考えているなら、

    Add-PSSnapin "SQLServerProviderSnapin100"

    Add-PSSnapin "SQLServerCmdletSnapin100"

    といった感じで、思い切って1行で書いてしまったほうがいいと思います。

     

    また、2つめのエラーに関しては、PSDrive とコマンドレットが連結してしまっている

    ようです。(SQLSERVER:\get-)

    これも、記述として、問題ありです。

    2010年9月14日 11:48
  • ご返事ありがとうございます。

    >ちなみに、私は、profile.ps1 ではなく、Microsoft.PowerShell_profile.ps1 に

    私もprofile.ps1 ではなく、Microsoft.PowerShell_profile.ps1 に自分の作成したスクリプトを記述していますが、
    PSCXをインストールすると、profile.ps1が作成されていて以下の内容になっていました。

    #region ----------- Beginning of PSCX 1.2 Initialization --------------------

    Add-PSSnapin Pscx

    #region ----------- Preference Variables ------------------------------------
    # The following preferences variables can be uncommented out to change their
    # value before executing the PscxConfig.  Each preference is shown set to its
    # default value.

    (途中省略※すべてコメント化されているので)

    # ---------------------------------------------------------------------------
    # Configure PSCX based on the settings above (or their defaults).
    # ---------------------------------------------------------------------------
    . "$Pscx:ProfileDir\PscxConfig.ps1"

    #endregion -------- End of PSCX 1.2 Initialization --------------------------

    そしてSQLらしき文字はありませんでした。

    どこのプロファイルなのでしょうか?

     

    2010年9月15日 3:57
  • まず、1つめのエラーは、

    Add-PSSnapin Pscx

    が原因と思われます。

    Add-PSSnapin の引数となり得るもの(登録済みの Snapin) を調べるには、

    Get-PSSnapin -Registered

    を実行します。このコマンドの結果にでてきたものについては、Add-PSSnapin

    することができます。でてこなければ… Snapin できません。

     

    2つめは、"$Pscx:ProfileDir\PscxConfig.ps1" に原因がありそうです。

    PowerShell の設定ファイル (profile.ps1) から、別の PowerShell スクリプトを

    呼び出しているようですね。このスクリプトを調べていただけますか?

     

    • 回答としてマーク OTAKA 2010年9月17日 5:24
    2010年9月15日 11:46
  • それと、もう1つ気をつけていただくといいかな…と思うのは、

    PowerShell を起動する際、「管理者として実行する」ことです。

    PowerShell のアイコンを、右クリックして「管理者として実行する」をクリックするか、

    プロパティから「管理者として実行する」をチェックするか…は、お好みで(笑)

     

    2010年9月15日 11:59
  • ご返事ありがとうございます。

    確かに、profile.ps1 をリネームかけて、SQLからpowershellを実行したらエラーは表示されませんでした。

    どうも、SQLから実行されるpowershellなんですが、
    Add-PSSnapin Get-PSSnapin コマンドレットがなさけなんですが・・・
    下記は、「Get-PSSnapin -Registered」をSQLから実行したPOWERSHELLで実行したときのエラーです。

    用語 'Get-PSSnapin' は、コマンドレット、関数、スクリプト ファイル、または操作可
    能なプログラムの名前として認識されません。名前が正しく記述されていることを確認
    し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してくだ
    さい。
    発生場所 行:1 文字:13
    + Get-PSSnapin <<<<  -Registered
        + CategoryInfo          : ObjectNotFound: (Get-PSSnapin:String) []、Command
        NotFoundException
        + FullyQualifiedErrorId : CommandNotFoundException

     また、get-ps まで入力してタブキーでコマンドレットの候補を出してみたのですが、
    候補に挙がるのは、get-psdriveとget-psproviderだけでした。

    ちなみに、通常のpowershellから下記のコマンドを実行したところ問題なく実行されました。
    Add-PSSnapin "SQLServerProviderSnapin100"
    Add-PSSnapin "SQLServerCmdletSnapin100"

    上記でコマンドにより通常のpowershellが使用できるので、SQLからPOWERSHELLは行う必要がなくなりましたが、
    なんかしっくりこないですね。

     

    2010年9月16日 2:41
  • コマンドレットの存在は隠すことができるので、PscxConfig.ps1あたりにそういうコードがまぎれているのかもしれませんね。

    参考:
    http://www.ravichaganti.com/blog/?p=1208

    2010年9月16日 7:29
    モデレータ
  • ご返事ありがとうございます。

    profile.ps1をリネームして(つまり無効化して)、SQLからpowershellを実行してみたのですが、
    get-commandも実行できませんでした。

    これは私のSQL-POWERSHELLだけなの現象なのでしょうか?

    2010年9月16日 9:39
  • profile.ps1をリネームして(つまり無効化して)、SQLからpowershellを実行してみたのですが、
    get-commandも実行できませんでした。

    これは私のSQL-POWERSHELLだけなの現象なのでしょうか?


    単に、プロバイダがSQLだからではないでしょうか。
    SQLPS.EXEを実行していただいて、

    cd C:\

    とでもしていただければ、Get-Commandが使用できます。

    その時、たしかにAdd/GetともにPSSnapinが出てきません。
    きっと、SQL Server専用のPowerShellだから、スナップインを追加させないんだ、程度に納得していました^^;

    (補足)
    SQLPS.EXEは、SQL Management StudioからよばれるSQL Server PowerShellのことです。SQL Serverの32bit側のBinn以下にいます。
    例:(32bit環境の場合、x86をなくして読んでください)
    C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn

    • 編集済み ChukiMVP 2010年9月16日 10:42 補足追加
    • 回答としてマーク OTAKA 2010年9月17日 5:24
    2010年9月16日 10:20

  • もともとの profile.ps1 は、Windows PowerShell を管理者として起動する

    場合にプロファイルとして読み込まれても、エラーはでていなかったのではないで

    しょうか。

     

    Windows Power Shell は、Module や Snapin の追加はできるけれども

    SQL Server Power Shell は、SQL Server を管理するための環境として

    提供されているため、そういうことを許さない(もちろん安定動作のため)

    ということなのかもしれません。

     

    それにしても PSCX (Power Shell Community Extensions) のサイトを

    みると… Zip, BZip2 などの圧縮ファイルを作成するコマンドレットを含め、

    約 60 種類ものコマンドレットが追加されるようですね。う~ん、便利そう…。

     

    2010年9月16日 12:36
  • 皆様、ご返事ありがとうございます。

    いろいろ理解できてきました。
    profile.ps1の内容を、Microsoft.PowerShell_profile.ps1 に移すなどして
    対応すればできそうです。

    ありがとうございました。

    2010年9月17日 5:23