我创建了一个从Windows 10计算机(客户端)到Windows Server 2012 R2计算机(服务器)的PowerShell会话,并尝试卸载功能:
$session | Invoke-Command -ScriptBlock { Remove-WindowsFeature Server-Gui-Shell }
我收到错误:
Invoke-Command : The term 'Remove-WindowsFeature' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
如果我RDP到服务器计算机并启动powershell,该命令可用,但在客户端计算机上它不可用,并且没有模块ServerManager
。
这意味着我试图在服务器上运行的命令需要以某种方式在客户端上运行,这对我来说似乎很奇怪。
我错过了什么吗?
答案 0 :(得分:1)
Invoke-Command
不接受管道-Session
参数的值。通过管道,它接受输入对象,这些对象将被传递给被调用的命令:
12345 | Invoke-Command { "Pipeline input: $input" }
# Pipeline input: 12345
由于您的命令没有任何远程调用目标,Invoke-Command
会在本地计算机上调用命令。由于本地计算机没有请求命令,因此会产生错误。