2017-01-17 23 views
0

有誰知道如何使用PowerShell將Get-Credentials傳遞給SQL登錄名?試圖連接到SQL使用Winpe中的Get-Credential

我嘗試過很多不同的方法,但沒有成功。

這需要在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

'$ cred.password'是一個安全字符串,不是實際使用的密碼。使用'$ cred.GetNetworkCredential()。Password'來獲得純文本密碼。 –

+0

這不適用於winpe?除非我把它放在錯誤的地方...... – LDStewart

+1

'$ cred.GetNetworkCredential()。密碼「僅適用於連接到Active Directory域的情況。在WinPE中獲取Active Directory身份驗證比較複雜,因爲WinPE未連接到域。即在這種情況下,Windows身份驗證確實很難實現,並且需要更多的調查。使用SQL身份驗證,因爲它不依賴於Active Directory進行身份驗證。 – HAL9256

回答

2

SQL連接使用任一:

  • Windows驗證( 「Trusted_Connection =真」)

  • SQL身份(「用戶ID =名爲myUsername;密碼= myPassword;「)

您不能同時擁有「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;" 
+0

感謝您嘗試以用戶身份啓動PowerShell。看看是否會工作 - 我需要一個GUI來登錄與不讀取主機 – LDStewart

+0

使用普通舊讀取主機: '$用戶名=讀取主機「用戶:」' '$密碼=讀取主機「密碼:」 ' 並使用SQL身份驗證 - 不 - Windows身份驗證(即可信連接)。看我最後一個例子 – HAL9256

+0

我只是嘗試讀取主機的任何方式,它仍然說NT Authority Anonymous是試圖連接的那個...測試powershell運行憑據 – LDStewart

相關問題