1

サーバーからSQLインスタンスのリストを取得し、返されたリストをループしてクエリを実行するプロジェクトに取り組んでいAます(最終的にはユーザーを監査し、結果をテーブルに挿入します)が、エラーが発生しますinstance not found。インスタンス名をハードコーディングすると機能するため、ループ内で変数を正しく定義していないようです。

これを修正する方法についてのご意見をお待ちしております。

$Serverlist = invoke-sqlcmd -ServerInstance TESTSERVER1 -Database TESTDB -Query "SELECT instancename from testtable"

foreach ($SQLInst in $Serverlist) 
{
$Inst = $SQLInst.INSTANCE
Invoke-Sqlcmd -ServerInstance ${$Inst} -Database Master -Query "select @@servername as servername" | select -ExpandProperty servername
} #end foreach loop

Invoke-Sqlcmd : SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: 名前付きパイプ プロバイダー、エラー: 40 - SQL Server への接続を開けませんでした) 行:12 文字:1 + Invoke-Sqlcmd -ServerInstance ${$SQLInst} -Database Master -Query "select @@serv .. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Invoke-Sqlcmd], SqlException + FullyQualifiedErrorId : SqlExectionError、Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

4

2 に答える 2

0

各インスタンスが正しいものであることを確認します。

$Serverlist = invoke-sqlcmd -ServerInstance TESTSERVER1 -Database TESTDB -Query "SELECT instancename from testtable"

    foreach ($SQLInst in $Serverlist) 
    {
      $Inst = $SQLInst.INSTANCE
      Write-Host $Inst
    } #end foreach loop

以前の発言にいくつか問題があることに気付きました。これを試すことができますか?

$Serverlist = invoke-sqlcmd -ServerInstance TESTSERVER1 -Database TESTDB -Query "SELECT instancename from testtable"

foreach ($SQLInst in $Serverlist) 
{  
  $Inst = $SQLInst.instancename
Invoke-Sqlcmd -ServerInstance "$Inst" -Database Master -Query "select @@servername as servername" | select -ExpandProperty servername
} #end foreach loop
于 2016-04-05T00:56:31.573 に答える
0

この場合、そのような中括弧を使用する理由はありません${$Inst}

を使用$Instするだけで問題なく動作します。中括弧を使用する場合は、$内側を使用しないでください: ${Inst}

Invoke-Sqlcmd -ServerInstance $Inst

# or

Invoke-Sqlcmd -ServerInstance ${Inst}
于 2016-04-01T18:47:18.917 に答える