有没有人知道如何使用PowerShell将Get-Credentials传递给SQL登录?
我尝试了许多不同的方法但没有成功。
这需要在winpe中运行 - 我可以使用Get-Credential获取凭据,但我需要使用它们连接到SQL DB - 我一直在使用。
NT AUTHORITY \ ANONYMOUS LOGIN'登录失败以下代码在Windows中正常工作 - 我以用户身份登录,因此它不能传递凭据。如果我删除trusted_connection = true;我得到失败的登录,这是WINPE的最佳测试,因为没有人登录。有没有办法将这些Get-Credentials传递给SQL? 这个或相同的代码在WINPE中不起作用 - 不确定为什么呢?
$Cred = Get-Credential
Function SQL_CONNECT ($Query){
$ConnectionString = "server=VM855;database=LDMS2016;user id=$Cred.Username;password=$Cred.Password;trusted_connection=true;"
$SqlConnection = New-Object System.Data.SQLClient.SQLConnection($ConnectionString)
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.Connection = $SqlConnection
$SqlCmd.CommandText = $Query
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$a = $SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
}
$Owners = SQL_CONNECT "Select Task_Name, Task_owner, first_action_query_date from PROV_HISTORY_TASK" | Select-Object Task_Owner, first_action_query_date
$Owners
答案 0 :(得分:3)
SQL连接使用:
或
您不能同时拥有“Trusted_Connection”和“用户ID /密码”,您必须选择一个。
要使用Windows身份验证,PowerShell进程必须以有权访问数据库的用户身份运行。即,您必须启动PowerShell进程以模拟该用户,并运行您的代码。
粗略的例子看起来像这样:
# Get the other user's credentials
$credential = Get-Credential
# Execute a scriptblock as another user
$commands = @'
#....code....
$ConnectionString = "server=VM855;database=LDMS2016;trusted_connection=true;"
#.....etc....
'@
Start-Process -FilePath Powershell.exe -LoadUserProfile -Credential $credential -ArgumentList '-Command', $commands
或者,更简单的方法是使用SQL身份验证,并对用户名/密码进行硬编码。
$ConnectionString = "server=VM855;database=LDMS2016;user id=Username;password=Password;"
或者至少你必须使用Read-Host
来读取用户名和密码,因为$Cred.Password
返回System.Security.SecureString
而不是纯文本密码。
对于前。
$Username = Read-Host "User:"
$Password = Read-Host "Password:"
$ConnectionString = "server=VM855;database=LDMS2016;user id=$Username;password=$Password;"