marabunta
Goto Top

Powershell SQL-Abfrage

$Server= "11.11.11.11"   
$Database = "test_db"  
$SQLQuery= $("Select name from  db.td.test)  

$credential = Get-Credential 
$password=$credential.Password
$username=$credential.UserName
    $Connection = New-Object System.Data.SQLClient.SQLConnection
    $Connection.ConnectionString = "server='$Server';database='$Database';trusted_connection=false;user=$username;password=$password"  
    $Connection.Open()

Geben Sie Werte für die folgenden Parameter an:
Credential
Ausnahme beim Aufrufen von "Open" mit 0 Argument(en):  "Fehler bei der Anmeldung für den Benutzer  
'Test\User."  
In C:\sql.ps1:38 Zeichen:5
+     $Connection.Open()
+     ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) , MethodInvocationException
    + FullyQualifiedErrorId : SqlException

Was mache ich falsch? Ziel ist ein Server 2003 mit MSSQL drauf, also Remote.

Content-Key: 266193

Url: https://administrator.de/contentid/266193

Printed on: April 24, 2024 at 02:04 o'clock

Member: colinardo
colinardo Mar 13, 2015 updated at 13:57:10 (UTC)
Goto Top
Hallo Marabunta,
Get-Credential liefert für die Eigenschaft Password kein Klartextpasswort sondern ein Objekt des Typs Securestring. Um das Klartextpasswort zu erhalten musst du es so extrahieren:
$password = $credential.GetNetworkCredential().Password
Grüße Uwe

p.s. falls du eine Funktion für eine SQL-Abfrage gebrauchen kannst die dir die Daten direkt als Datatable ausgibt... biddeschön
function Get-SQLTableContents($query,$server,$database,$username,$password){
    $conn = new-object System.Data.SqlClient.SqlConnection
    $conn.ConnectionString = "Server=$server;Database=$database;Integrated Security=False;UID=$username;PWD=$password"  
        try{
            $conn.Open()
            $cmd = $conn.CreateCommand()
            $cmd.CommandText = $query
            $cmd.Connection = $conn

            $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
            $SqlAdapter.SelectCommand = $cmd
            $dt = New-Object System.Data.DataTable
            $SqlAdapter.Fill($dt) | out-null
            $conn.close()
            return $dt
        }
        catch{
            echo "Fehler: $($_.Exception.Message)"  
            $conn.close()
            return $false
        }
}

$data = Get-SQLTableContents "Select * from TestTable" "192.168.1.95" "TestDB" "sqluser" "Passw0rd"  
$data
Member: Marabunta
Marabunta Mar 13, 2015 updated at 14:43:40 (UTC)
Goto Top
ist doch zum heulen
$credential=get-credential
$username=$credential.Username
$password = $credential.GetNetworkCredential().Password


Fehler: Ausnahme beim Aufrufen von "Open" mit 0 Argument(en):  "Fehler bei der Anmeldung für den Benutzer 'domain\test'."  
False
Fehler: Ausnahme beim Aufrufen von "Open" mit 0 Argument(en):  "Netzwerkbezogener oder instanzspezifischer Fehler beim  
Herstellen einer Verbindung mit SQL Server. Der Server wurde nicht gefunden, oder auf ihn kann nicht zugegriffen werden
. Überprüfen Sie, ob der Instanzname richtig ist und ob SQL Server Remoteverbindungen zulässt. (provider: Named Pipes P
rovider, error: 40 - Verbindung mit SQL Server konnte nicht geöffnet werden)"  
False

mit
 Start-Process powershell.exe -RunAs domain\test

und dann ausführen hat geklappt... nur am Ende kam wieder der Fehler

Fehler: Ausnahme beim Aufrufen von "Open" mit 0 Argument(en):  "Netzwerkbezogen  
er oder instanzspezifischer Fehler beim Herstellen einer Verbindung mit SQL Ser
ver. Der Server wurde nicht gefunden, oder auf ihn kann nicht zugegriffen werde
n. Überprüfen Sie, ob der Instanzname richtig ist und ob SQL Server Remoteverbi
ndungen zulässt. (provider: Named Pipes Provider, error: 40 - Verbindung mit SQ
L Server konnte nicht geöffnet werden)"  
False
Mitglied: 114757
114757 Mar 13, 2015 updated at 14:57:43 (UTC)
Goto Top
Da ist die SQL-Server-instanz nicht richtig konfiguriert das man ihn via tcp-sockets erreichen kann. Ist also kein Powershell-Problem sondern ein SQL-Server-Config spezifisches...
Wenn der Zugriff via tcp-sockets nicht aktiviert ist muss der Servername anders lauten
\\Server\Instanzname

Gruß jodel