背景
我有以下组件:
- Windows Server 2008 R2 盒子
- 管理员帐户(我的)
- 域上的服务帐户是该框的管理员
- 安装 Putty(包括用于命令行的 plink 和用于生成 ssh 公钥的 Pageant)
- SSH 会话期间要使用的命令的文本文件
- 一个运行 plink 的 powershell 脚本,它使用 Start-Process 调用 plink,命令行告诉它使用 Ageant 进行 PuTTy 连接,并使用 commands.txt 进行命令。
- 以我的用户帐户运行的计划任务
目标
最终,为了让计划任务作为服务帐户运行,它调用 powershell 作为服务帐户,运行进程并执行 ssh 命令。
问题
- 当我以我的用户帐户身份从 powershell 命令提示符运行此脚本时,它会运行。
- 当我以最高权限从计划任务中以我的用户帐户运行此脚本并告诉它保存我的凭据时,它“不运行”。
- “不运行”意味着它似乎生成了一个 plink.exe 实例,这是我认为出现问题的地方(我在控制台上看不到的挂起的东西)。
问题
- 有人有更优雅但使用相同或相似工具的整体解决方案吗?
- 我的 powershell 脚本是否应该调用 cmd.exe 以便我至少可以将标准输出捕获到我的日志文件中?
剧本
如果它有帮助:
#Starts the vcenter2 server.
#if the server is already started, it will tell you so.
#Stop an error from occurring when a transcript is already stopped
$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
#Reset the error level before starting the transcript
$ErrorActionPreference="Continue"
Start-Transcript -path C:\Scripts\logs\StartTheVCenter2Server.log -append
#Run plink and reference the commands file to start up the server
Start-Process "C:\Program Files (x86)\PuTTY\plink.exe" -Argumentlist "-agent -m C:\Scripts\idrac_powerup_commands.txt root@[servernameredacted]" -wait -RedirectStandardOutput "C:\Scripts\logs\plinklog.log"
#Clean-up
Stop-Transcript
想法?我可能会尝试使用 Invoke-Command 看看我是否可以至少将输出重定向到我的日志中。
谢谢!
plink.exe
我见过的“挂起”的一般原因是提示将主机密钥添加到注册表。不过,我认为主机密钥已经在您的注册表中。我会添加-batch
参数plink
,看看你是否得到了彻底的失败与挂起。至少,这应该让你走上正确的道路。您的Plink调用正在使用-agent(选美)进行身份验证,但您尚未明确启动该服务,所以这可能是问题所在,将您的私钥导出到无密码密钥文件并直接使用-i(身份)引用它) 参数,看看它是否是错误的身份验证。还临时添加一个-v(详细)选项,然后检查事件日志。
对于它的价值,我遇到了一个非常相似的问题 - psftp 无法在 Windows 7 中计划运行的脚本中运行,无论用户是否登录。就我而言,我使用的是在命令行上引用的选美保存会话;由于选美与预定任务不在同一上下文中运行,因此它会挂起。我通过在 psftp 中使用 -i 标志并在脚本本身中引用私钥的位置解决了这个问题。