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