передать имя пользователя и пароль для получения учетных данных или выполнить SQL-запрос без использования invoke-sqlcmd в Powershell - PullRequest
2 голосов
/ 17 марта 2010

Я пытаюсь подключиться к удаленной базе данных sql и просто запустить запрос "select @@ servername" в Powershell.Я пытаюсь сделать это без использования встроенной безопасности.Я боролся с "get-credential" и "invoke-sqlcmd", но обнаружил (я думаю), что вы не можете передать пароль от "get-credential" другим командлетам Powershell.

Вот код, который я использую:

add-pssnapin sqlserverprovidersnapin100
add-pssnapin sqlservercmdletsnapin100

# load assemblies
[Reflection.Assembly]::Load("Microsoft.SqlServer.Smo, `
      Version=9.0.242.0, Culture=neutral, `
      PublicKeyToken=89845dcd8080cc91")
[Reflection.Assembly]::Load("Microsoft.SqlServer.SqlEnum, `
      Version=9.0.242.0, Culture=neutral, `
      PublicKeyToken=89845dcd8080cc91")
[Reflection.Assembly]::Load("Microsoft.SqlServer.SmoEnum, `
      Version=9.0.242.0, Culture=neutral, `
      PublicKeyToken=89845dcd8080cc91")
[Reflection.Assembly]::Load("Microsoft.SqlServer.ConnectionInfo, `
      Version=9.0.242.0, Culture=neutral, `PublicKeyToken=89845dcd8080cc91")

# connect to SQL Server

$serverName = "HLSQLSRV03"
$server = New-Object -typeName Microsoft.SqlServer.Management.Smo.Server -argumentList $serverName

# login using SQL authentication

$server.ConnectionContext.LoginSecure=$false;
$credential = Get-Credential
$userName = $credential.UserName -replace("\\","")
$pass = $credential.Password
$server.ConnectionContext.set_Login($userName)
$server.ConnectionContext.set_SecurePassword($credential.Password)
$DB = "Master"

invoke-sqlcmd -query "select @@Servername" -database $DB -serverinstance $servername -username $username -password $pass

Если, если просто жестко ввести пароль в конце строки "invoke-sqlcmd", это работает.Это потому, что вы не можете использовать «get-credential» с «invoke-sqlcmd»?

Если так ... каковы мои альтернативы?

Большое спасибо за вашу помощь

Эмо

1 Ответ

5 голосов
/ 27 апреля 2010

Ваша команда не работает, поскольку атрибут -password ожидает пароль в виде простой текстовой строки, а не значение SecureString, которое вы передаете.

Хотя похоже, что вы пытаетесь использовать два разных метода для выполнения SQL - т.е. использовать сборки, а также использовать invoke-sqlcmd.

Если вы используете invoke-sqlcmd, вам не нужно загружать сборки и делать все остальное.

Все, что вам нужно сделать, чтобы ваш invoke-sqlcmd заработал, - это преобразовать ваш пароль в обычный текст:

$serverName = "HLSQLSRV03"
$DB = "Master" 
$credential = Get-Credential 
$userName = $credential.UserName.Replace("\","")  
$pass = $credential.GetNetworkCredential().password  

invoke-sqlcmd -query "select @@Servername" -database $DB -serverinstance $servername -username $username -password $pass
...