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

远程服务器传递参数运行PowerShell脚本报错求助

问题描述

我尝试读取如下格式的JSON文件:

[
{ "STORE": "1", "LocationUUID": "ABC" },
{ "STORE": "2", "LocationUUID": "DEF" }
]

需求是循环遍历每个门店,将对应的LocationUUID作为参数传递给另一个PowerShell脚本,并在门店1和门店2的服务器上运行该脚本。

执行脚本如下:

$storeLocationUUIDJSON = Get-Content '{my path here}'  -Raw | ConvertFrom-Json
$storeLocationUUIDJSON | Select-Object -Property STORE, LocationUUID |

ForEach-Object {
$computer = $_.STORE
$location = $_.LocationUUID
$filepath = 'test.ps1'
Write-Host "Started running the script on Store" + $computer + $location

try{
Invoke-Command -ComputerName $computer -FilePath $filepath -LocationUUID $location
}
catch
{
Write-Host "Not successful on Store" + $computer
Write-Host $_.Exception.Message
}
}

目标测试脚本如下:

param(
[Parameter(Mandatory = $true)] $LocationUUID
)
Write-host $LocationUUID
New-Item 'T:\test.txt' -type file

运行时出现错误:A parameter cannot be found that matches the parameter name 'LocationUUID'

错误原因

Invoke-Command本身没有-LocationUUID这个参数,你错误地将目标脚本的参数直接当作Invoke-Command的参数使用,导致参数不匹配报错。传递参数给远程执行的脚本,需要用Invoke-Command专门的参数来实现。

解决方法

提供两种可行的修改方案:

方案1:使用-ArgumentList传递位置参数

修改执行脚本中的Invoke-Command部分:

Invoke-Command -ComputerName $computer -FilePath $filepath -ArgumentList $location

目标测试脚本无需修改,-ArgumentList会按位置将参数传递给远程脚本的param块,因为只有一个参数,能被$LocationUUID正确接收。

方案2:使用-Parameter传递命名参数(PowerShell 5.1及以上版本支持)

修改执行脚本中的Invoke-Command部分,通过哈希表按参数名传递:

Invoke-Command -ComputerName $computer -FilePath $filepath -Parameter @{ LocationUUID = $location }

这种方式无需修改目标脚本,直接按参数名匹配传递,可读性更强。

额外优化建议

  1. Write-Host的字符串拼接建议用双引号插值替代+号,输出格式更规范:
    Write-Host "Started running the script on Store $computer (UUID: $location)"
    
  2. 默认情况下Invoke-Command的远程错误不会触发本地catch块,需添加-ErrorAction Stop才能捕获异常:
    try{
    Invoke-Command -ComputerName $computer -FilePath $filepath -Parameter @{ LocationUUID = $location } -ErrorAction Stop
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:20:23