0

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

$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 

これは、ジョブのステータスである:第二ホップリモーティングの喜びああ enter image description here

答えて

1

私は問題が何かを理解しました。以前の私のコメントで述べたように、Start-Jobを呼び出すときに新しいセッションを修正しました。パラメータを渡します。 SQL接続プロパティを見ると、ユーザー/パスワードが渡されないと、新しいセッションに渡された資格情報でWindows認証による認証が試行されます。問題は、以下のようにユーザー名とパスワードを提供した資格情報を得ることに自分自身の責任でした。

ユーザー:[email protected]

パスワード:この問題は、それはこのようにする必要があるということである

をMYPASSWORD:

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

パスワード:mypassword

なぜ違いがあるのか​​わかりませんが、それは違います。私はこれらの構文の両方が同じだが、SQL Windows認証ではないと思った。

2

。基本的にここで間違っているのは、リモートpowershellセッションを作成した後で、ログイン時に資格証明が実際に第2のサーバに渡されることがないため、接続しているサーバ以外のリソースにアクセスすることができないということです。 CredSSP authenticationを使用することです。Enable-WSManCredSSP標準の認証と比較してCredSSPを使用する際に導入されるいくつかの特定の要件と潜在的な問題があるので、リンクを必ず読んでください。

+0

多分私は何かが不足しています。しかし、私はリモートセッションを開始しようとしていません。私はPowerShellスクリプトと同じマシン上に新しいセッションを作成しています。私は、そのセッションにログインしているものとは異なるWindowsクレデンシャルを渡しています。スクリプトブロックを削除して、SQLサーバにアクセスできるWindowsの資格情報を持つマシンにログインするだけで正常に動作します。 SQL Serverとは別のマシンからスクリプトを実行しても。 – seanmt13

+0

セッションがリモートかローカルかは関係ありません。認証情報が提供されたセッションの標準認証は、ユーザー名とパスワードを渡さないため、別のシステムへの接続には使用できません。 –

+0

Start-Jobを呼び出すと、実際に資格情報が渡されます。これがスクリプトブロックの使用の全体的なポイントです。私は現在のセッションとは異なる資格情報でそれを呼び出すことができます。正しい方向に私を指し示したリンクがここにあります。 [MSDN Start-Job](https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/start-job)[Start-JobとのSQL接続](http:// arthurremy.com/index.php/108-tips/338-access-sql-server-integrated-security-with-different-windows-credentials-in-powershell) – seanmt13

関連する問題