非常感谢您的帮助。我有一个PowerShell脚本,可用于更新SQL Server表中的列。当它使用域帐户时,效果很好。
但是,我想在用户登录期间运行,并使用SQL Server帐户,而不是Windows帐户,但是我不知道为什么它不起作用。
当密钥/ txt文件使用域帐户时,没有问题。但是当用SQL Server帐户详细信息替换时,就不行了。
$SQLUser = "Username"
$SQLPasswordFile = "\\pathto\UserPW.txt"
$SQLKeyFile = "\\pathto\UserPW.key"
$SQLkey = Get-Content $SQLKeyFile
$SQLMyCredential = New-Object -TypeName System.Management.Automation.PSCredential `
-ArgumentList $SQLUser, (Get-Content $SQLPasswordFile | ConvertTo-SecureString -Key $SQLkey)
$SQLCredentials = Get-Credential -Credential $SQLMyCredential
$SQLSession = New-PSSession -ComputerName "uhpkpdb01" -Credential $SQLCredentials
Invoke-Command -Session $SQLSession -ScriptBlock {
$exist = Invoke-Sqlcmd "select count(1) from [table] where USER_NAME = '$($args[0])'" -ServerInstance "SERVERNAME"
if ($exist.column1 -eq "1") {
Invoke-Sqlcmd "UPDATE [table] SET PASSWORD = '$($args[1])' WHERE USER_NAME = '$($args[0])'"
Write-Host "Account Updated" }
else {
Write-Host "User Does Not Exists"}} -ArgumentList $env:USERNAME, "PASSWORD"
Remove-PSSession $SQLSession
我得到
New-PSSesion:连接到远程服务器失败,原因是:用户名或密码不正确。
我可以使用SQL Server帐户连接到SSMS并打开和更新表。 我必须错误地传递了用户名,但无法弄清楚如何正确地进行操作。
任何帮助将不胜感激。
答案 0 :(得分:0)
您不能将包含SQL登录名的PSCredential
对象传递给Invoke-Command
。命令唯一了解的是Windows凭据。
如果已安装模块,则可以直接从您自己的计算机传递并调用Invoke-SqlCmd
命令。
如果需要在远程会话上使用SQL登录,则必须将该凭据对象传递到远程会话中,以便可以在脚本块中使用它。