0

I have a powershell script that connects to a database:

$conn = New-Object System.Data.SqlClient.SqlConnection

$conn.ConnectionString = "Server=10.10.10.1;Initial Catalog=my_database;User Id=my_username;Password=my_password;"

But I don't want the plaintext password to be hardcoded into the script.

So, I tried the following:

read-host -assecurestring | convertfrom-securestring | out-file C:\PS\cred.txt
$password = get-content C:\PS\cred.txt | convertto-securestring
$credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist "my_username",$password

And, I replaced the connection string with

$conn.ConnectionString = "Server=10.10.10.1;Initial Catalog=my_database;$credentials;"

But I am getting numerous errors.

This script is run on a nightly basis, so it must get the password of the database automatically.

EDIT:

Below are the errors:

Exception setting "ConnectionString": "Format of the initialization string does not conform to specification starting at index 46." At C:\sandbox\script.ps1:75 char:7
    + $conn. <<<< ConnectionString = "Server=10.10.10.1;Initial Catalog=my_database;$credentials;"
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : PropertyAssignmentException

and

Exception setting "ConnectionString": "Format of the initialization string does not conform to specification starting at index 46." At C:\sandbox\script.ps1:82 char:14
    + $conn_update. <<<< ConnectionString = "Server=10.10.10.1;Initial Catalog=my_database;$credentials;"
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : PropertyAssignmentException   Creating and executing the SQL Query at 8/26/2013 10:28:38 AM 

and finally

Exception calling "Open" with "0" argument(s): "The ConnectionString property has not been initialized." At C:\sandbox\script.ps1:98 char:11
    + $conn.Open <<<< ()
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : DotNetMethodException
4

1 回答 1

5

关于第一个错误

首先在 ps 控制台中尝试这个

PS C:\>"server=server10;Initail Catalog=database;$credentials"
server=server10;Initail Catalog=database;System.Management.automation.PSCredential

并且 sql server 不需要 System.Management.Automation.PSCredential 的连接字符串,它需要格式为 user id="myusername"; 密码="密码"

所以改为这样做。首先从 $credentials 对象中检索用户名和密码,并将它们存储在变量中,然后将该变量放入连接字符串中。

$username = $credentials.UserName
$password = $credentials.GetNetworkCredentail().Password

PS C:\>"server=server10;Initial Catalog=database;user id=$username;password=$password"
server=server10;Initial Catalog=database;user id=my_username;password=sdfsjci34929
于 2013-08-26T15:06:50.093 回答