passer le nom d'utilisateur et mot de passe pour obtenir des titres de compétence ou d'exécuter la requête SQL sans utiliser invoke-sqlcmd dans Powershell

StackOverflow https://stackoverflow.com/questions/2464265

Question

Je suis en train de se connecter à une base de données SQL à distance et simplement exécuter la requête « select @@ servername » dans Powershell. Je suis en train de le faire sans utiliser la sécurité intégrée. J'ai été aux prises avec « get-titres de compétences » et « invoquer-sqlcmd », seulement pour trouver (je crois), que vous ne pouvez pas passer le mot de passe « get-lettres de créance » à un autre cmdlets Powershell.

Voici le code que je utilise:

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

Si si juste hardcode le mot de passe à la fin de la ligne « invoke-sqlcmd », cela fonctionne. Est-ce parce que vous ne pouvez pas utiliser « obtenir des titres de compétence » par « invoquer-sqlcmd »?

Si oui ... quelles sont mes alternatives?

Merci beaucoup pour vous aider

Emo

Était-ce utile?

La solution

Votre commande ne fonctionne pas parce que l'attribut -password attend le mot de passe comme une chaîne de texte brut, et non la valeur SecureString vous le transmettre.

Bien qu'il semble que vous essayez d'utiliser deux méthodes différentes pour exécuter le SQL -.-À-dire en utilisant les assemblages ainsi que l'utilisation invoke-sqlcmd

Si vous utilisez invoke-sqlcmd, vous n'avez pas besoin de charger les assemblages et faire toutes les autres choses.

Tout ce que vous devez faire pour obtenir votre Invoke-sqlcmd au travail est de convertir votre mot de passe en texte clair:

$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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top