会很感激你的帮助。我有一个PowerShell脚本,用于更新Server表中的列。当使用域帐户时,它工作得很好。
但是,我希望在用户登录期间运行,并使用Server帐户,而不是Windows帐户,但我不知道为什么它不能工作。
当key/txt文件使用域帐户时,没有问题。但是,当使用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:连接到远程服务器失败:用户名或密码不正确。
我可以使用Server帐户连接到SSMS,并打开和更新表。我一定是不正确地传递用户名,但我想不出如何正确地做到这一点。
如能提供任何协助,将不胜感激。
发布于 2018-10-22 04:09:48
不能将包含SQL的PSCredential对象传递给Invoke-Command。命令唯一能理解的是Windows凭据。
如果您安装了模块,可以从您自己的机器上直接传递和调用Invoke-SqlCmd命令。
如果需要在远程会话上使用SQL,则必须将该凭据对象传递到远程会话中,以便可以在脚本块中使用它。
https://stackoverflow.com/questions/52922025
复制相似问题