尝试在 Winpe 中使用 Get-Credential 连接到 SQL

trying to connect to SQL using Get-Credential in Winpe

有谁知道如何使用 powershell 将 Get-Credentials 传递给 SQL 登录?

我尝试了很多不同的方法,但都没有成功。

这需要在 winpe 中 运行 - 我可以使用 Get-Credential 获取凭据,但我需要使用它们来连接到 SQL 数据库 - 我一直在获取。

'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

SQL 连接使用:

  • Windows 身份验证 ("Trusted_Connection=True")

  • SQL 身份验证 ("User Id=myUsername;Password=myPassword;")

不能同时拥有"Trusted_Connection"和"User ID/Password",必须选择一个。

为了使用 Windows 身份验证,PowerShell 进程必须 运行ning 作为有权访问数据库的用户。也就是说,您必须以模拟该用户的身份启动 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 身份验证,并对 username/password.

进行硬编码
 $ConnectionString = "server=VM855;database=LDMS2016;user id=Username;password=Password;"

或者至少你必须使用 Read-Host 来读入用户名和密码,因为 $Cred.Password returns System.Security.SecureString 而不是纯文本的密码.

例如

 $Username = Read-Host "User:"
 $Password = Read-Host "Password:"

 $ConnectionString = "server=VM855;database=LDMS2016;user id=$Username;password=$Password;"