0

Я пытаюсь запросить SQL Server с помощью блока сценария и передать другой набор учетных данных Windows. Скрипт работает, если я запускаю его на том же компьютере, что и SQL Server, но не удается, когда я пытаюсь запустить его удаленно. Я знаю, что я могу получить доступ к SQL-серверу удаленно, потому что я могу получить доступ к SQL-серверу с помощью SQL Server Managment Studio и запустить запрос вручную. Ниже приведен код, который я пытаюсь использовать. Я указываю сервер, базу данных и запрос до точки в скрипте.PowerShell запрашивает удаленный SQL Server с различными учетными данными Windows

$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 

Это состояние задания: enter image description here

ответ

1

Итак, я понял, в чем проблема. Как я уже говорил ранее в своем комментарии, я был прав, новый сеанс при вызове Start-Job пропускает параметры. Если вы посмотрите на свойства соединения SQL и не пропустили пароль пользователя/пароль, он попытается выполнить аутентификацию через проверку подлинности Windows с учетными данными, которые вы передали новому сеансу. Проблема была моей собственной ошибкой в ​​получении учетных данных, я указал имя пользователя и пароль следующим образом.

Пользователь: [email protected]

Пароль: MyPassword

Вопрос заключается в том, что она должна быть такой:

Пользователь: Домен \ пользователь

Пароль: MyPassword

Я не уверен, почему это имеет значение, но это так. Я думал, что оба эти синтаксиса одинаковы, но, возможно, не с аутентификацией SQL Windows.

2

Ahh радостях второго-хоп Remoting. В основном, что здесь не так, так это то, что после создания сеанса удаленной Powerhell вы не можете получить доступ к каким-либо ресурсам на серверах, отличных от того, с которым вы подключены, поскольку ваши учетные данные фактически не передаются второму серверу при входе в систему. Единственный реальный путь вокруг этого заключается в использовании CredSSP authentication, который вы можете использовать с помощью Enable-WSManCredSSP. Обязательно прочитайте ссылки, так как есть определенные требования и возможные проблемы, возникающие при использовании CredSSP по сравнению со стандартным auth.

+0

Возможно, я что-то упустил. Но я не пытаюсь запустить удаленный сеанс. Я создаю новый сеанс на той же машине, что и скрипт PowerShell. Я передаю другой набор учетных данных Windows, чем тот, с которым я вошел в систему с этим сеансом. Если я удалю блок сценария и просто войдите в систему с учетными данными Windows, имеющими доступ к SQL-серверу, он работает нормально. Даже если я запускаю скрипт с другой машины, чем SQL Server. – seanmt13

+0

Не имеет значения, является ли сеанс удаленным или локальным. Стандартная аутентификация для сеанса с предоставленными учетными данными не проходит по имени пользователя и паролю, поэтому их нельзя использовать для подключения к другой системе. –

+0

Фактически учетные данные передаются при вызове Start-Job. В этом весь смысл использования блока сценариев. Я могу назвать это с другими учетными данными, чем текущий сеанс. Вот ссылки, которые указывали мне в правильном направлении. [Стартовое задание MSDN] (https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/start-job) [SQL-соединение с помощью Start-Job] (http: // arthurremy.com/index.php/108-tips/338-access-sql-server-integrated-security-with-different-windows-credentials-in-powershell) – seanmt13

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

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