【问题标题】:PSExec on Windows Server Startup ScriptWindows Server 启动脚本上的 PSExec
【发布时间】:2017-01-08 22:14:55
【问题描述】:

我正在使用启动脚本以编程方式启动运行 Windows Server 2016 的 Google 云计算实例。

启动脚本中的可执行文件需要以特定用户身份启动,因此我尝试使用psexec 启动它以模拟所述用户:

C:/psexec.exe \\\\WIN-SERVER-2016 -u WIN-SERVER-2016\\customuser -p custompassword -accepteula -w "c:/app" cmd /c node index.js

c:/app/index.js 包含一个简单的 hello world,它应该写入文件。

如果我以任何用户身份登录并从 cmd 启动这个确切的命令,文件就会被写入。从启动脚本(在 Google Cloud Compute Engine 实例中以 windows-startup-script-cmd 提供)启动会导致没有文件写入。

有什么解决办法?有没有更高效的方式来以特定用户的身份执行启动脚本?

【问题讨论】:

  • 创建一个在启动时运行的计划任务。
  • @AnsgarWiechers 我已经有一个在启动时运行的任务。它没有正确执行 psexec。
  • 那你为什么还需要psexec?只需将任务配置为以您的自定义用户身份运行。
  • @AnsgarWiechers 我正在运行的命令是动态生成的,并且在启动脚本中执行的某些软件需要来自特定用户配置文件的数据。
  • 所以?让任务运行脚本并更新该脚本。或者脚本使用的资源。

标签: windows powershell google-app-engine google-cloud-platform psexec


【解决方案1】:

考虑到问题,我不建议您使用 PSEXEC

通常,我们使用 PSExec 来调用本地系统不支持 PS 的远程系统中的 GUI。

在你的情况下,我建议你使用 Invoke-Command

类似这样的:

$username = 'WIN-SERVER-2016\customuser'
$password = "custompassword"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr

$Script_block = {cmd /c  node index.js}

Invoke-Command -ComputerName  WIN-SERVER-2016 -Credential $cred -ScriptBlock $Script_block 

如果您使用的是 windows-startup-script-cmd

,这也应该从 Metadata 键中获取

注意:我没有考虑 accepteula -w "c:/app" 部分。请相应地合并占位符。

希望对你有帮助...!!!

【讨论】:

  • 我以前从未使用过 Powershell。这是我应该作为实例的启动脚本加载的 Powershell 脚本吗?看起来很有用,谢谢!
  • 是的,它是一个powershell。你可以在powershell ISE中运行它..转到运行>输入Powershell_ise..它将打开
  • @Dean:如果对你有帮助,也接受答案。
  • 今天测试正常后我会的! :)
  • 当然。如果有什么问题。随意发布错误。到时候我们会做进一步的分析
猜你喜欢
  • 2013-01-21
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 2019-06-07
  • 1970-01-01
  • 2020-04-03
相关资源
最近更新 更多