我已经找了好几个星期,还有其他人为我做过研究,但我还没找到答案。
我有一个存在于服务器1上的脚本,需要使用某些凭据在服务器1上执行。最终的解决方案将有助于解密文件。该脚本必须作为某个服务器上的某个用户执行,因为该密钥对位于该服务器上用户的密钥环中。
我希望从服务器2调用脚本,作为更大进程的一部分。服务器2有一个sql作业,它具有以下流程:
服务器1上的脚本在本地运行,没有任何问题,并产生预期的结果。当试图让服务器2在服务器1上执行脚本时,我没有取得任何成功。为了尽可能简单地找出实际上不起作用的东西,我想出了一套简单的脚本(见下文)。
我不是任何类型的权威大师 - 所以我现在道歉,如果这是一个非常明显的事情。 :)
#-------------------------------------
# script 1
# this script lives on server 1
# file name: c:\deleteme\helloworld2.ps1
$CMD = Invoke-Expression " `"hello world`" >> C:\deleteme\helloworld.txt"
Invoke-Command -ScriptBlock { $CMD }
#-------------------------------------
# script 2
# this script is executed on server 2 and attempts to execute the script on server 1
$session = New-PSSession -ComputerName "SERVER01.lahcg.com" #-Credential $username
$CMD = "Invoke-Command -ScriptBlock { powershell.exe `"C:\deleteme\helloworld2.ps1`" } "
#write-output $CMD
Invoke-Command -Session $session -ScriptBlock { $CMD }
Remove-PSSession $session
环境信息:
额外备注
答案 0 :(得分:1)
BenH是对的。你有两个选择。你可以使用
Invoke-Command是更快的方法,因为它自动建立PSSession,执行代码,然后撕下它。它的问题是它不允许您控制哪个用户建立会话。为此,您必须自己构建会话,然后告诉Invoke-Command使用哪个会话。所以尝试这样的事情: