在scriptblock里面执行一个管道命令,但是管道命令的第一个参数是一个已经获取了对象的变量,而不是一个command,在这种情况下执行invoke-command会报错


PowerShell交流中心分类: 远程管理在scriptblock里面执行一个管道命令,但是管道命令的第一个参数是一个已经获取了对象的变量,而不是一个command,在这种情况下执行invoke-command会报错
0
DJ asked 9 年 ago

比如说我通过get-vmsnapshot获取了虚拟机的快照信息并赋给$vm,然后在使用下面的命令,它会报错,说的意思就是管道的第一个参数不能是变量,我想问的是我不想把在之前函数中写过的获取虚拟机快照的实现再在这里面写一遍,还有没有什么其他的解决方法呢

Invoke-Command -ScriptBlock {(param $vm)$vm | Restore-VMSnapshot -Confirm: $false} -ComputerName $ServerName -ArgumentList $vmsnapshot
0 Answers
1
Mooser Lee 管理员 answered 9 年 ago

只有简单的参数可以通过-ArgumentList 来传输,VMSnapshot应当不支持。
至于你说的不想定义多次的问题,可以这样来处理:

#将函数内容定义成脚本块
$myLocalFunc={
 param($a,$b)
 "$a+$b=$($a+$b)"
}
#在本地调用执行脚本块
& $myLocalFunc 10 9

#在远程机器调用执行脚本块
#这样避免同样的脚本块重复定义多次
Invoke-Command -ScriptBlock $myLocalFunc -ComputerName pstips.net -ArgumentList 10,9