通过 Invoke-Command 运行 时 netsh 不工作

netsh not working when run via Invoke-Command

当我 运行 在服务器上本地执行以下操作时,它工作正常。

$NetshArgumentList = 'advfirewall firewall add rule name="Zabbix Agent" dir=in action=allow program="C:\zabbix\bin\win64\zabbix_agentd.exe" enable=yes'
Start-Process -FilePath 'netsh' -ArgumentList $NetshArgumentList

但是当我尝试像这样远程运行它时它不起作用。

$ComputerName = 'Remote-Host'
$NetshArgumentList = 'advfirewall firewall add rule name="Zabbix Agent" dir=in action=allow program="C:\zabbix\bin\win64\zabbix_agentd.exe" enable=yes'
Invoke-Command -ComputerName $ComputerName -ScriptBlock {Start-Process -FilePath 'netsh' -ArgumentList $using:NetshArgumentList}

关于为什么会这样以及如何解决它有什么建议吗?

$NetshArgumentList 在远程会话中不可见。您可以要求 PowerShell 使用 using: scope modifier:

复制它
$ComputerName = 'Remote-Host'
    $NetshArgumentList = 'advfirewall firewall add rule name="Zabbix Agent" dir=in action=allow program="C:\zabbix\bin\win64\zabbix_agentd.exe" enable=yes'
    Invoke-Command -ComputerName $ComputerName -ScriptBlock {Start-Process -FilePath 'netsh' -ArgumentList $using:NetshArgumentList}

我终于想通了。使用 Invoke-Expression 它现在可以工作了。这是工作代码:

$ComputerName = 'Remote-Host'
$NetshArgumentList = 'advfirewall firewall add rule name="Zabbix Agent" dir=in action=allow program="C:\zabbix\bin\win64\zabbix_agentd.exe" enable=yes'
Invoke-Command -ComputerName $ComputerName -ScriptBlock {Invoke-Expression "netsh $using:NetshArgumentList"}