使用 SQL Server 帐户和加密密码连接到 SQL Server,并执行 invoke-sqlcmd



真的很感激一些帮助。我有一个PowerShell脚本,用于更新SQL Server表中的列。当它使用域帐户时,它可以正常工作。

但是,我想在用户登录期间运行,并使用SQL Server帐户,而不是Windows帐户,但是我不知道为什么它不起作用。

当密钥/txt 文件使用域帐户时,没有问题。但是当替换为SQL Server帐户详细信息时,就不行了。

$SQLUser = "Username"
$SQLPasswordFile = "\pathtoUserPW.txt"
$SQLKeyFile = "\pathtoUserPW.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

我正在得到

新PSSesion: 连接到远程服务器失败,并显示: 用户名或密码不正确。

我可以使用 SQL Server 帐户连接到 SSMS 并打开和更新表。 我一定是错误地传递了用户名,但无法弄清楚如何正确执行此操作。

任何协助将不胜感激。

不能将包含 SQL 登录名的PSCredential对象传递给Invoke-Command。该命令唯一了解的是 Windows 凭据。

如果安装了模块,则可以直接从自己的计算机传递和调用Invoke-SqlCmd命令。

如果需要在远程会话上使用 SQL 登录名,则必须将该凭据对象传递到远程会话中,以便可以在脚本块中使用它。

最新更新