2016-03-24 12 views
0

StackOverflowの別の投稿にスクリプトがありますが、必要なものと同じように見えますが、.ps1ファイルの種類を実行しようとするとエラーが表示されますSSMS内のPowerShellPowershellからSSMS内の.PS1ファイルを実行できません

$server = "APPDEV2014" 
cls 
Import-Module "sqlps" -DisableNameChecking 

$databases = Invoke-Sqlcmd -Query "select name from sys.databases where name not in ('master', 'tempdb', 'model', 'msdb')" -ServerInstance $server 
foreach ($db in $databases) { 
    $dbName = $db.name 
    $procedures = Invoke-Sqlcmd -Query "select SCHEMA_NAME(schema_id) as [schema], name from $dbName.sys.procedures" -ServerInstance $server 
    foreach ($proc in $procedures) { 
     if ($schema) { 
      $shortName = $proc.schema + "." + $proc.name 
      $procName = $db.name + "." + $shortName 
      try { 
       $result = Invoke-Sqlcmd -Database $dbName -Query "sys.sp_refreshsqlmodule '$shortName'" -ServerInstance $server -ErrorAction Stop 
       Write-Host "SUCCESS|$procName" 
      } 
      catch { 
       $msg = $_.Exception.Message.Replace([Environment]::NewLine, ",") 
       Write-Host "FAILED|$procName|$msg" -ForegroundColor Yellow 
      } 
     } 
    } 
} 

コマンド私は実行していますされています:

環境は、2014年

マイFindBrokenObjectsInSQLServer.ps1ファイルは、次のように定義されたSQL Serverです

PS SQLSERVER:\SQL\APPDEV2014\DEFAULT> PowerShell -command 
"H:\SQLScripts\FindBrokenObjectsInSQLServer.ps1" 

最後にエラーI取得する:

Import-Module : A positional parameter cannot be found that accepts argument 
'?'. 
At H:\SQLScripts\FindBrokenObjectsInSQLServer.ps1:3 char:1 
+ Import-Module "sqlps"? -DisableNameChecking 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidArgument: (:) [Import-Module], ParameterB 
    indingException 
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell 
    .Commands.ImportModuleCommand 

ご提案/ご指摘ありがとうございます。これがPowerShellを使って作業する最初の試みです。ありがとう。

+0

すでにPowerShellのプロンプトが表示されています(プロンプトの冒頭にある「PS」を参照)ので、 'PowerShell -command ... 'と入力する必要はありません。実行したいスクリプトの名前を入力し、パラメータを入力してEnterキーを押してください。 –

+0

ありがとう、ビル。応答を感謝します。 – Melinda

答えて

0

あなたはより多くの可能性が高いため、ネイティブのSQL Server 2016にあなたのマシン上に存在しないモジュールをインポートしようとしますが、SQLサーバーへのネイティブではない2014年

あなたは、SQL Server 2014をインストールする必要がありますRSATツールがインストールされ、Windows-機能の下で有効になっていないとき

Import-Module ActiveDirectory 

のようなものをやろうとしたときに https://www.microsoft.com/en-us/download/details.aspx?id=46696

同じエラーが発生します。ここで見つけることができますパックSP1を、備えています。

+0

追加情報Chrisさんありがとうございます。それは感謝しています。 – Melinda

1

スクリプトを正しく保存したことを確認してください。 Import-Moduleを含む行に余分な疑問符があるようです。それは文句を言っていることのラインを注意深く見て:

+ Import-Module "sqlps"? -DisableNameChecking

お知らせ余分疑問符"sqlps"パラメータの後?消して。

+0

元のスクリプトに投稿されたOPから、その余分な '?'そこにはありません。受け入れられない定位置パラメーターに注釈を付ける例外ハンドラーにスローされます。一度それを読んだら、それはモジュールの名前を解決できないように見えます。それはおそらくマシン上にないことを意味します。 –

+1

3つの理由で真ではありません:1.エラーは、位置パラメータ '?'を見つけることができないことを明示的に述べています。 2.モジュールが存在しない場合、「指定されたモジュールがロードされていません」というエラーが表示されます。 3. OPのPowerShellコマンドは現在のドライブを 'SQLSERVER:'として表示します。これは 'SQLPS'モジュールが実際にインストールされていることを意味します。 – JamesQMurphy

+0

良いキャッチ。私は元の例でのみ提供されていたもので前進していました。正確なエラーで見つかったものは、OPが文字を入れたかもしれないことを示しています。 –

関連する問題