我在Powershell命令中如何使用安全字符串来运行远程SQL查询。
以下命令在PowerShell中运行正常,因为它在我自己的帐户下运行 - 它还在提供用户名和密码的值时返回结果。
"SELECT COUNT(E.intEmployeeID) AS Count FROM Employees E WITH(NOLOCK)" - ServerInstance "SERVERA\INSTANCEA" -Database "DATABASEA" -u USER1 -p SomePassword
我想自动化/安排此脚本,因为我不想在我的脚本中使用clear txt中的密码,我正在研究如何将其设置为安全/加密字符串。所以我使用下面的代码创建了一个加密密码。问题是我不确定如何将此密码传回我的命令..
这将创建加密的字符串并存储在文件中。这将是远程保护的文件。
$File = "C:\password.txt"
[Byte[]] $Key = (1..16)
$Password = "SomePassword" | ConvertTo-SecureString -AsPlainText -Force
$Password | ConvertFrom-SecureString -key $Key | Out-File $File
这将读取加密文件并以安全字符串存储...但是如何让我的Invoke SQL命令使用此密码。
$File = "C:\Cred.txt"
[Byte[]] $Key = (1..16)
$Password = Get-Content $File | ConvertTo-SecureString -Key $Key
$ Password的值是System.Security.SecureString,如果我在原始命令中使用此变量,该命令将失败,并且“用户登录失败”
用于执行SQL查询的帐户是SQL身份验证帐户,而不是域帐户..
任何建议都是欢迎 感谢。
答案 0 :(得分:5)
创建凭据对象:
$cred = new-object -typeName System.Management.Automation.PSCredential -ArgumentList $user, $pass
然后,将密码转换为纯文本:
[string]$pass = $cred.GetNetworkCredential().Password
invoke-sqlcmd -UserName $user -Password $pass -Query 'select @@servername'
Ivoke-SqlCmd只能使用纯文本密码。
答案 1 :(得分:0)
可以使用安全字符串而不将纯文本存储在变量中。这是一个例子。
/update_two