如何通过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
相关产品推荐
相关产品推荐

