2017-01-17 7 views
0

Кто-нибудь знает, как передать Get-Credentials в логин SQL с помощью powershell?пытается подключиться к SQL с помощью Get-Credential в Winpe

Я пробовал много разных способов, но не имел успеха.

Это нужно запустить в 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(). Пароль для доступа к текстовому паролю. –

+0

Это не работает в winpe? если я не помещаю его в неправильное место ... – LDStewart

+1

'$ cred.GetNetworkCredential(). Password' работает только в том случае, если вы подключены к домену Active Directory. В WinPE сложно получить аутентификацию Active Directory, поскольку WinPE не подключен к домену. то есть в этом случае Windows Authentication действительно трудно получить работу и потребует много больше исследований. Используйте SQL Authentication, поскольку он не зависит от Active Directory для аутентификации. – HAL9256

ответ

2

соединения SQL использовать либо:

  • Проверка подлинности Windows ("Trusted_Connection = True")

или

  • SQL Authentication ("User Id = MyUserName; пароль = myPassword; ")

У вас не может быть как «Trusted_Connection», так и «User ID/Password», вы должны выбрать один.

Чтобы использовать проверку подлинности 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 как пользователь.посмотрите, будет ли это работать - мне нужен графический интерфейс для входа в систему с не read-host thks – LDStewart

+0

Использовать простой старый хост: '$ Имя пользователя = Read-Host" Пользователь: "' '$ Password = Read-Host" Пароль: ' и использовать проверку подлинности SQL -not- Аутентификацию Windows (то есть доверенное соединение). См. Мой последний пример – HAL9256

+0

Я просто пробовал читать-хост любым способом, и он все еще говорит, что NT Authority Anonymous - это тот, кто пытается подключиться ... тестирование powershell выполняется под учетными данными – LDStewart

 Смежные вопросы

  • Нет связанных вопросов^_^