Powershell字符串变量不快乐
我有以下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*”开头的服务列表。问题是,直到运行时我才知道服务名称,它将作为参数传递到脚本中
$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!幸好您都了解它们-再次感谢