web-dev-qa-db-fra.com

Connexion à la base de données SQL Server à partir de PowerShell

J'ai regardé en ligne pendant un moment et j'ai trouvé beaucoup de problèmes similaires, mais pour une raison quelconque, je n'arrive pas à faire en sorte que cela fonctionne.

J'essaie simplement de me connecter à une base de données SQL Server et de générer les résultats de la requête dans un fichier - Voir le script PowerShell ci-dessous. Ce que je ne sais pas, c'est comment intégrer l'ID utilisateur et le mot de passe dans la chaîne de connexion.

$SQLServer = "aaaa.database.windows.net"
$SQLDBName = "Database"
$uid ="john"
$pwd = "pwd123"
$SqlQuery = "SELECT * from table;"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True; User ID = $uid; Password = $pwd;"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)

$DataSet.Tables[0] | out-file "C:\Scripts\xxxx.csv"

Le message d'erreur suivant est reçu:

Exception appelant "Remplir" avec le ou les arguments "1": "Les connexions Windows ne sont pas prises en charge dans cette version de SQL Server."

30
Johnathan

Définissez la sécurité intégrée sur false dans la chaîne de connexion.

Vous pouvez vérifier/vérifier cela en ouvrant le studio de gestion SQL avec le nom d'utilisateur/mot de passe que vous avez et voir si vous pouvez vous connecter/ouvrir la base de données à partir de là. REMARQUE! Peut-être un problème de pare-feu aussi.

18
ojk

Integrated Security et User ID _ Password authentification s’excluent mutuellement. Pour vous connecter à SQL Server en tant qu'utilisateur exécutant le code, supprimez User ID et Password de votre chaîne de connexion:

$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True;"

Pour vous connecter avec des informations d'identification spécifiques, supprimez Integrated Security:

$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; User ID = $uid; Password = $pwd;"
25
Aaron Jensen
# database Intraction

$SQLServer = "YourServerName" #use Server\Instance for named SQL instances!
$SQLDBName = "YourDBName"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; 
User ID= YourUserID; Password= YourPassword" 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = 'StoredProcName'
$SqlCmd.Connection = $SqlConnection 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd 
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet) 
$SqlConnection.Close() 

#End :database Intraction
clear
6
Mike Clark

En supposant que vous puissiez utiliser la sécurité intégrée, vous pouvez supprimer l'ID utilisateur et transmettre:

$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True;"
2
ne1410s

La réponse est comme ci-dessous pour l'authentification Windows

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$SQLServer;Database=$SQLDBName;Integrated Security=True;"
1
Arjun Walmiki