【问题标题】:How to run multiple commands via Invoke-Command on remote server如何在远程服务器上通过 Invoke-Command 运行多个命令
【发布时间】:2017-05-03 12:49:58
【问题描述】:

在下面的示例中,只有我的脚本块中的 Get-Process 正在执行。 “deh”由于某种原因无法打印

Invoke-Command -ComputerName mycomputer -Credential $mycreds -ScriptBlock {
    Get-Process
    Write-Host "deh"
}

如果我删除 -ComputerName 并在本地执行,那么它运行这两个命令就好了。

编辑

我在这里尝试对远程服务器执行 IIS cmdlet。以下命令有效

Invoke-Command -ComputerName mycomputer -ScriptBlock { 
    Trace-Command CommandDiscovery {
        Import-Module webAdministration
        Start-WebAppPool -Name DefaultAppPool
    } -PSHost 
}

但这不起作用

Invoke-Command -ComputerName mycomputer -ScriptBlock { 
    Import-Module webAdministration
    Start-WebAppPool -Name DefaultAppPool
}

Trace-Command 帮助 Start-WebAppPool 工作有什么特别之处?这真的很奇怪,我无法解释为什么这个功能..

【问题讨论】:

  • 删除-ComputerName参数时会同时执行这两个命令,所以这似乎与远程计算机上的调用有关

标签: powershell powershell-remoting invoke-command


【解决方案1】:

不,Invoke-Command cmdlet 需要一个 scriptblock,您可以在其中放置 多个 命令。您还应该能够看到Write-Host 输出。

【讨论】:

  • 嗯,你是对的。当我删除 -ComputerName 参数并在本地机器上执行时,它似乎执行了这两个命令。知道这是什么原因吗?
  • Write-host 写入控制台,所以我认为您不会看到它,因为它会发生在远程会话中。
  • @MarkWragg 你会得到输出。想法相同,但测试了它;-)
【解决方案2】:

您可以通过Invoke-Command 在远程计算机上执行Trace-Command 以查看发生了什么。我无法重现这个。

Invoke-Command -ComputerName mycomputer -Credential $Creds -ScriptBlock { Trace-Command CommandDiscovery {get-process;write-host 'deh'} -PSHost }

【讨论】:

  • Trace-Command 允许我的 IIS Cmdlet 对远程服务器工作。但是没有它,它们就无法工作。真的很奇怪。我已经更新了 OP。有什么想法吗?
  • 如果您使用的是 PS v 3.0 或更高版本,您只需尝试不导入 WebAdministration 模块
【解决方案3】:

尝试使用分号分隔命令:

  Invoke-Command -ComputerName mycomputer -Credential $mycreds -ScriptBlock {
        Get-Process ; 
        Write-Host "deh"
    }

【讨论】:

  • 没必要。
  • "deh" 不打印。没有区别
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 2021-09-04
  • 2010-09-19
  • 2013-11-22
  • 2012-09-23
  • 1970-01-01
相关资源
最近更新 更多