You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell的Invoke-VMScript修改ESXi上Linux虚拟机密码?

问题

我在ESXi管理程序中创建了一台Linux虚拟机,需要通过ESXi PowerShell命令修改其密码。尝试使用以下脚本:

$Script = "echo '$OldPassword' | sudo -S passwd ubuntu <<< '$NewPassword\n$NewPassword'";
Invoke-VMScript -VM $VMName -ScriptText $Script -GuestUser ubuntu -GuestPassword $OldPassword;

但返回如下错误:

ScriptOutput

|  [sudo] password for ubuntu: Sorry, try again.
|  [sudo] password for ubuntu:
|  sudo: no password was provided
|  sudo: 1 incorrect password attempt
|

尝试了多种脚本均未成功,请问是否有可行的PowerShell命令实现该需求?

可行的解决方案

可以用chpasswd命令替代passwd,它更适合非交互式修改密码,同时调整sudo的调用逻辑,避免原脚本的输入交互问题:

$Script = @"
echo '$OldPassword' | sudo -S sh -c "echo 'ubuntu:$NewPassword' | chpasswd"
"@
Invoke-VMScript -VM $VMName -ScriptText $Script -GuestUser ubuntu -GuestPassword $OldPassword

关键说明

  • 替换为chpasswd:chpasswd支持直接通过管道接收用户名:密码的格式,不需要重复输入密码,规避了passwd命令的交互输入陷阱。
  • 嵌套sh -c执行:确保chpasswd命令在sudo权限上下文里完整运行,避免管道拆分导致的权限失效问题。
  • 使用Here-String:用PowerShell的Here-String格式定义脚本内容,减少转义字符混乱,提升脚本可读性。

另外,需确保ubuntu用户在sudoers配置中允许无需tty执行命令(默认Ubuntu已开启该配置,若仍有问题可检查/etc/sudoers中的Defaults !requiretty项)。

内容的提问来源于stack exchange,提问作者Maya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 23:25:02