Powershell字符串变量不快乐

Powershell字符串变量不快乐,powershell,Powershell,我有以下powershell脚本: $BizTalkHosts = "BTSSvc*" Foreach($svc in Invoke-Command -Computer d-vasbiz01 -ScriptBlock{ get-service -Name $BizTalkHosts}) { Write-Host $svc.name } 我希望它返回远程计算机上以“BTSSVC*”开头的服务列表。问题是,直到运行时我才知道服务名称,它将作为参数传递到脚本中

我有以下powershell脚本:

$BizTalkHosts = "BTSSvc*"
    Foreach($svc in Invoke-Command -Computer d-vasbiz01 -ScriptBlock{ get-service -Name $BizTalkHosts})
    {
        Write-Host $svc.name
    }
我希望它返回远程计算机上以“BTSSVC*”开头的服务列表。问题是,直到运行时我才知道服务名称,它将作为参数传递到脚本中

当我运行上面的脚本时,我得到了所有服务的列表——不是我想要的!但是,如果我向get-service cmdlet(即get-service-Name“BTSSvc*)提供一个字符串文本,它就可以正常工作,提供一个过滤列表


谁能解释一下我做错了什么吗?

没有必要使用
调用命令
在这种情况下,您可以使用
获取服务
获取服务:

Get-Service -Name $BizTalkHosts -ComputerName d-vasbiz01
要使用
Invoke命令
(这是一种过度杀伤力),您需要在脚本块内创建一个参数,并通过-ArgumentList参数将$BizTalkHosts传递给脚本块

$BizTalkHosts = "BTSSvc*"
    Foreach($svc in Invoke-Command -Computer d-vasbiz01 -ScriptBlock{ param($name) get-service -Name $name}) -Argument $ArgumentList 
    {
        Write-Host $svc.name
    }

非常感谢Shay,你为我指明了正确的方向。最后我不得不使用(我想!)invoke命令,因为我需要重新启动找到的主机:#现在重新启动主机Foreach($svc in get service-Name$BizTalkHosts-Computer$TargetServer){Invoke Command-session$session-ScriptBlock{param($name)restart service-name$name}-Argument$svc.name write host“主机[{0}]已重新启动”-f$svc.name}您还可以使用restart Computer cmdlet重新启动主机:)哇-这是一个适用于所有内容的cmdlet!幸好您都了解它们-再次感谢