VMware Debian中PowerShell调用Invoke-VMScript执行dpkg命令失败求助
解决Invoke-VMScript执行
dpkg --configure -a报错数组越界的问题 包装命令规避解析异常:直接传递
dpkg --configure -a可能触发VMware脚本解析器的参数处理bug,用bash嵌套执行的方式绕过:Invoke-VMScript -VM $guestHost -ScriptText 'bash -c "dpkg --configure -a"' -GuestUser $guestUser -GuestPassword $guestPass -ScriptType Bash也可以将命令写入完整的bash脚本内容传递:
$scriptContent = @" #!/bin/bash dpkg --configure -a "@ Invoke-VMScript -VM $guestHost -ScriptText $scriptContent -GuestUser $guestUser -GuestPassword $guestPass -ScriptType Bash排查组件版本兼容性:Debian 5.10内核版本(对应Debian 11)、PowerShell 7.4.0与VMware Tools/PowerCLI模块可能存在版本不匹配,导致输出解析时出现数组越界。尝试:
- 更新虚拟机内的
open-vm-tools到最新稳定版:apt update && apt install --only-upgrade open-vm-tools - 更新PowerShell中的VMware PowerCLI模块:
Update-Module -Name VMware.PowerCLI
- 更新虚拟机内的
捕获原始输出定位问题:开启输出捕获并将命令的标准错误重定向到标准输出,排查是否是特殊输出内容导致解析失败:
Invoke-VMScript -VM $guestHost -ScriptText "dpkg --configure -a 2>&1" -GuestUser $guestUser -GuestPassword $guestPass -ScriptType Bash -ScriptOutputVariable scriptOutput # 查看捕获的输出 $scriptOutput切换执行方式:放弃
Invoke-VMScript,改用SSH直接执行命令(需安装Posh-SSH模块):# 安装模块(首次执行) Install-Module -Name Posh-SSH -Force # 建立SSH会话并执行命令 $cred = [PSCredential]::new($guestUser, (ConvertTo-SecureString $guestPass -AsPlainText -Force)) $session = New-SSHSession -ComputerName $guestHostIP -Credential $cred Invoke-SSHCommand -SessionId $session.SessionId -Command "dpkg --configure -a" # 关闭会话 Remove-SSHSession -SessionId $session.SessionId
内容的提问来源于stack exchange,提问作者Douglas
相关产品推荐
相关产品推荐

