[英]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.