Bestehen Sie den Benutzernamen und das Passwort an, um die SQL-Abfrage zu erhalten, ohne in Ivoke-SQLCMD in PowerShell zu verwenden

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

Frage

Ich versuche, eine Verbindung zu einer Remote -SQL -Datenbank herzustellen und einfach die Abfrage "Select @@ Servername" in PowerShell auszuführen. Ich versuche dies zu tun, ohne integrierte Sicherheit zu verwenden. Ich habe mit "Get-Credential" und "Invoke-SQLCMD" zu kämpfen, nur um zu finden (glaube ich), dass Sie das Passwort nicht von "Get-Credential" zu einem anderen PowerShell-CMDlets übergeben können.

Hier ist der Code, den ich verwende:

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

Wenn Sie das Kennwort am Ende der Zeile "Invoke-SQLCMD" nur härten, funktioniert es. Liegt das daran, dass Sie mit "Invoke-SQLCMD" nicht "Get-Credential" verwenden können?

Wenn ja ... was sind meine Alternativen?

Vielen Dank für Ihre Hilfe

Emo

War es hilfreich?

Lösung

Ihr Befehl funktioniert nicht, da das Attribut -Password das Kennwort als Klartext -Zeichenfolge erwartet und nicht den Wert für den Wert, den Sie übergeben.

Obwohl es so aussieht, als würden Sie versuchen, zwei verschiedene Methoden für die Ausführung des SQL zu verwenden - dh die Verwendung der Baugruppen sowie die Verwendung von Invoke -SQLCMD.

Wenn Sie Invoke-SQLCMD verwenden, müssen Sie die Baugruppen nicht laden und alle anderen Dinge ausführen.

Alles, was Sie tun müssen, um Ihr Invoke-SQLCMD zum Arbeiten zu bringen, ist, Ihr Passwort in Plain-Text umzuwandeln:

$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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top