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

PowerShell使用数组存储凭据调用Invoke-Command报错求助

问题诊断与修复方案

核心问题点

  • 参数传递逻辑错误:你定义的install_ninja函数未声明接收凭据参数,调用时传入的单个凭据对象没有被函数接收,函数内部Invoke-Command的-Credential参数直接传入了完整的$local_cred凭据数组,而该参数要求输入单个PSCredential对象,这就是你收到参数转换报错的直接原因。同时PowerShell调用函数无需用括号包裹参数,install_ninja($local_cred[0])属于错误语法,会将参数识别为数组传入。
  • 执行命令选择不当:Invoke-Command默认依赖WinRM服务,普通用户设备大概率未开启本地远程执行权限,即使凭据合法也会执行失败。本地使用指定凭据启动安装程序,直接调用Start-Process的-Credential参数即可,无需使用Invoke-Command。
  • 文件校验逻辑不严谨:将MB单位的大小转为整数比对,只要文件大小在33MB~34MB区间都会判定为合法,无法准确校验安装包完整性,建议直接比对字节数或文件哈希。

修复后代码

# 预创建所有本地管理员凭据
$c_user = @("IT", "Power")
$credContent = Get-Content C:\Ninja\cred.txt
$local_cred = @(
    New-Object System.Management.Automation.PSCredential $c_user[0], ($credContent[0] | ConvertTo-SecureString -AsPlainText -Force),
    New-Object System.Management.Automation.PSCredential $c_user[1], ($credContent[1] | ConvertTo-SecureString -AsPlainText -Force),
    New-Object System.Management.Automation.PSCredential $c_user[0], ($credContent[2] | ConvertTo-SecureString -AsPlainText -Force),
    New-Object System.Management.Automation.PSCredential $c_user[1], ($credContent[3] | ConvertTo-SecureString -AsPlainText -Force)
)

# 定义安装函数,支持传入指定凭据
Function Install-Ninja {
    param(
        [Parameter(Mandatory=$true)]
        [PSCredential]$Credential
    )
    # 直接用指定凭据启动msiexec安装,加RunAs确保提权
    Start-Process "msiexec.exe" -ArgumentList "/i C:\Ninja\NinjaInstaller.msi /q /norestart" -Credential $Credential -Verb RunAs -Wait
}

# 安装包完整性校验(直接比对字节数)
$installerPath = "C:\Ninja\NinjaInstaller.msi"
$expectedSize = 33.87891 * 1MB
$actualSize = (Get-Item $installerPath -ErrorAction SilentlyContinue).Length

if ($actualSize -ge ($expectedSize - 1KB) -and $actualSize -le ($expectedSize + 1KB)) {
    # 按顺序尝试所有凭据
    try {
        Install-Ninja -Credential $local_cred[0] -ErrorAction Stop
        Write-Host "使用旧IT凭据安装成功"
        exit 0
    }
    catch {
        Write-Host "fail1"
    }

    try {
        Install-Ninja -Credential $local_cred[1] -ErrorAction Stop
        Write-Host "使用旧Power凭据安装成功"
        exit 0
    }
    catch {
        Write-Host "fail2"
    }

    try {
        Install-Ninja -Credential $local_cred[2] -ErrorAction Stop
        Write-Host "使用新IT凭据安装成功"
        exit 0
    }
    catch {
        Write-Host "fail3"
    }

    try {
        Install-Ninja -Credential $local_cred[3] -ErrorAction Stop
        Write-Host "使用新Power凭据安装成功"
        exit 0
    }
    catch {
        Write-Host "fail4,所有凭据均安装失败"
    }
}
else {
    Write-Host "安装包下载异常,请检查网络后重试"
}

内容的提问来源于stack exchange,提问作者Lucky Lehlohonolo Nthite Mpetl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:48:00