0

スクリプト ブロックを使用して SQL Server にクエリを実行し、別の Windows 資格情報セットを渡そうとしています。スクリプトは、SQL Server と同じマシンで実行すると機能しますが、リモートで実行しようとすると失敗します。SQL Server Managment Studio を使用して SQL サーバーにアクセスし、クエリを手動で実行できるため、SQL サーバーにリモートでアクセスできることはわかっています。以下は、私が使用しようとしているコードです。スクリプトのポイントの前に、サーバー、データベース、およびクエリを指定します。

$credentials = Get-Credentials
#Script block
$sqlscript = {
    #SQL variables
    $sqlDataSource = $sqlServer
    $sqlDatabase = $database

    $connectionString = "Server="+$sqlDataSource+";Database="+$sqlDatabase+";Integrated Security=SSPI;"

    $connection = New-Object System.Data.SqlClient.SqlConnection
    $connection.ConnectionString = $connectionString

    $connection.Open()
    $command = New-Object System.Data.SqlClient.SqlCommand($queryString,$connection)
    $command.CommandTimeout=$queryTimeout

    # use dataset to get sql results
    $dataset=New-Object system.Data.DataSet
    $dataAdapter=New-Object system.Data.SqlClient.SqlDataAdapter($command)
    [void]$dataAdapter.fill($dataset)
    $connection.close()

    # dataset has separate results tables
    #$versionData = $dataset.Tables[0] #Version query results #not needed
    $hardwareData = $dataset.Tables[1] #Hardware query results
    $softwareData = $dataset.Tables[2] #Software query results


}
start-job -ScriptBlock $sqlscript -Credential $credentials
# output to separate CSV files
#$versionData | Export-CSV $outputPath -notype #not needed
$hardwareData | Export-CSV $outputPathHardware -notype
$softwareData | Export-CSV $outputPathSoftware -notype

ジョブのステータスは次のとおりです。 ここに画像の説明を入力

4

2 に答える 2

1

それで、私は問題が何であるかを理解しました。以前のコメントで述べたように、Start-Job を呼び出してパラメーターを渡すと、新しいセッションが正しくなりました。SQL 接続プロパティを見て、ユーザー/パスワードが渡されていない場合、新しいセッションに渡した資格情報を使用して Windows 認証を介して認証を試みます。この問題は、次のようにユーザー名とパスワードを指定した get-credentials の私自身のせいでした。

ユーザー: user@domain.local

パスワード: mypassword

問題は、次のようにする必要があることです。

ユーザー: ドメイン\ユーザー

パスワード: mypassword

なぜそれが違いを生むのかわかりませんが、そうです。これらの構文は両方とも同じだと思いましたが、SQL Windows 認証ではそうではないかもしれません。

于 2016-11-28T22:52:02.053 に答える