[英]PowerShell query remote SQL Server with different Windows Credentials
我正在嘗試使用一個腳本塊查詢SQL Server,並傳遞一組不同的Windows憑據。 如果我在與SQL Server相同的計算機上運行該腳本,則該腳本有效,但是當我嘗試遠程運行該腳本時,該腳本失敗。 我知道我可以遠程訪問SQL Server,因為我可以使用SQL Server Managment Studio訪問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
啊,第二跳的樂趣。 基本上,這里出現的問題是,在創建遠程Powershell會話之后,您將無法訪問服務器上除連接的服務器以外的任何資源,因為登錄時憑據實際上並未傳遞給第二台服務器。是使用CredSSP身份驗證 ,您可以使用Enable-WSManCredSSP進行身份驗證 。請確保通讀鏈接,因為與標准auth相比,使用CredSSP時存在一些特定要求和潛在問題。
所以我弄清楚了問題所在。 正如我之前在評論中所述,調用Start-Job確實傳遞參數時,我正確了新會話。 如果查看SQL連接屬性,但未傳遞用戶名/密碼,它將嘗試使用傳遞給新會話的憑據通過Windows身份驗證進行身份驗證。 問題是我自己在get-credentials中的錯誤,我按如下方式提供了用戶名和密碼。
用戶:user@domain.local
密碼:mypassword
問題是它需要像這樣:
密碼:mypassword
我不確定為什么會有所作為,但確實如此。 我認為這兩種語法都相同,但可能與SQL Windows身份驗證不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.