windows - 将字符串 $variable 传递给 invoke-command 脚本 block 参数 -name

标签 windows powershell

<分区>

我目前正在编写一个相对简单的 PowerShell 脚本来重启/停止/启动远程机器上的服务。在我决定将 $Service 变量传递给 Invoke-Command Scriptblock 中的 -Name 参数之前,一切都运行良好。我知道我做错了什么或忘记了什么,但非常感谢您的帮助。这是突出显示给我问题的部分的代码

[CmdletBinding()] Param([Parameter(Mandatory=$True,Position=1)]
  [string]$Server,
  [Parameter(Mandatory=$True)]
  [string]$Service) 
get-service -ComputerName $Server -Name "$Service"

Write-Host("------------------------------------------------")
Write-Host("Execute action on selected service: ")
Write-Host("1. Restart service ")
Write-Host("2. Stop service ")
Write-Host("3. Start service")
$choice = Read-Host -Prompt "Your choice"

switch ($choice)
{
    1 {Invoke-command -Computername $Server {Restart-Service -Name "$Service" } }
    2 {Invoke-command -ComputerName $Server {Stop-Service  -Name "$Service" } }
    3 {Invoke-command -ComputerName $Server {Start-Service -Name "$Service" } }
}

我试过:

  • $Service 单引号
  • $Service 双引号
  • 在脚本 block 中使用 param([String]$Service)

我不断收到同样的错误:

Cannot bind argument to parameter 'Name' because it is an empty string.
    + CategoryInfo          : InvalidData: (:) [Stop-Service], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAllowed,Microsoft.PowerShell.Commands.StopServiceCommand

我知道这与我试图在远程机器上运行本地变量有关。但是有人能给我指明正确的方向吗,我希望脚本能够简单地使用强制参数

使用这里提到的方法 How to pass local variable to Invoke-Command's我像这样修改了代码:

1 {Invoke-command -Computername $Server {param ([string] $srv = $Service) Restart-Service -Name "$srv" } }

不幸的是,错误仍然存​​在

最佳答案

将参数传递到脚本 block 的语法应如下所示:

(根据@pk198105 的建议更正)

Invoke-command -Computername $Server  {
param($service)
Restart-Service -Name "$Service" 
} -ArgumentList $service

参数列表和参数都是必需的

关于windows - 将字符串 $variable 传递给 invoke-command 脚本 block 参数 -name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40247384/

相关文章:

powershell - Get-Help about* 不适用于非英语系统

windows - 拥有一个装满旧东西的注册表会减慢 Windows 的速度吗?

linux - 如何将文件夹从 index 安装到 windows 或 linux?

windows - 在 Windows 8 上以编程方式对文件夹进行排序

android - 在 Android 之外实现 Wifi 感知应用程序

powershell - Powershell函数可从不同目录调用一组命令并将其输出保存到文件中

powershell - MSA 操作日志在哪里?

internet-explorer - 通过 PowerShell 在 Windows Server 上禁用 IE 安全性

powershell - 设置环境变量 - SETX

c++ - OpenCV - 如何启用滚动到带有图像的窗口?