PowerShell Invoke-Command
最后修改:2025 年 2 月 15 日
在本文中,我们将介绍 PowerShell 中的 Invoke-Command
cmdlet。此 cmdlet 在本地和远程计算机上运行命令。
Invoke-Command 基础知识
Invoke-Command
cmdlet 在本地或远程计算机上运行命令。它建立临时连接以进行远程执行。结果将返回到本地计算机。这对于跨多个系统的管理任务至关重要。
Invoke-Command 基本用法
使用 Invoke-Command
最简单的方法是使用脚本块。脚本块包含要执行的命令。此示例在本地运行。输出显示当前日期和时间。
Invoke-Command -ScriptBlock { Get-Date }
此命令在脚本块中执行 Get-Date cmdlet。结果将返回到控制台。此处不涉及远程计算机。
在远程计算机上运行命令
要在远程计算机上运行命令,请使用 -ComputerName 参数。指定一个或多个计算机名称。PowerShell Remoting 必须在目标上启用。此示例从远程服务器获取服务。
Invoke-Command -ComputerName "Server01" -ScriptBlock { Get-Service }
此命令从 Server01 检索所有服务。远程计算机必须可访问并正确配置。结果将在本地返回。
运行多个命令
您可以在单个脚本块中执行多个命令。用分号分隔命令。此示例获取系统信息和进程。两个结果都包含在输出中。
Invoke-Command -ScriptBlock { Get-CimInstance Win32_OperatingSystem; Get-Process | Select-Object -First 3 }
此命令获取操作系统详细信息和前三个进程。输出包含两组信息。命令按指定顺序运行。
在远程命令中使用本地变量
可以使用 -ArgumentList 将本地变量传递给远程命令。$args 数组在脚本块中访问这些值。这使得动态命令执行成为可能。该示例传递了一个进程名称。
$processName = "explorer" Invoke-Command -ComputerName "Server01" -ScriptBlock { Get-Process -Name $args[0] } -ArgumentList $processName
此命令在 Server01 上获取 explorer 进程。$processName 变量作为参数传递。$args[0] 在脚本中访问它。
在多台计算机上运行命令
可以在 -ComputerName 中指定多台计算机。使用逗号分隔计算机名称。命令将在所有指定的系统上运行。结果包括源计算机名称。
Invoke-Command -ComputerName "Server01","Server02" -ScriptBlock { Get-CimInstance Win32_ComputerSystem }
此命令从两台服务器获取计算机系统信息。每个结果都显示了它来自哪台计算机。输出是合并的。
远程运行脚本文件
可以使用 -FilePath 远程执行现有脚本文件。脚本必须可以从本地计算机访问。这避免了输入复杂的命令。该示例在远程运行本地脚本。
Invoke-Command -ComputerName "Server01" -FilePath "C:\scripts\check_disk.ps1"
此命令在 Server01 上运行 check_disk.ps1 脚本。脚本必须存在于指定的本地路径。此处不需要脚本块。
持久的远程会话
对于多个命令,请使用 New-PSSession 创建持久会话。使用 -Session 将会话传递给 Invoke-Command。这会维护一个连接。它比创建新连接更有效。
$session = New-PSSession -ComputerName "Server01" Invoke-Command -Session $session -ScriptBlock { Get-Service } Invoke-Command -Session $session -ScriptBlock { Get-Process } Remove-PSSession $session
这会创建一个到 Server01 的持久会话。两个命令使用相同的连接运行。完成后会删除会话。
以不同用户身份运行命令
-Credential 参数允许以其他用户身份运行命令。这需要适当的权限。凭据对象存储用户名和密码。该示例显示以管理员身份进行远程执行。
$cred = Get-Credential Invoke-Command -ComputerName "Server01" -ScriptBlock { whoami } -Credential $cred
这会在执行前提示输入凭据。whoami 命令显示有效用户名。指定的用户必须具有远程访问权限。
来源
在本文中,我们介绍了 PowerShell 中的 Invoke-Command cmdlet。
作者
列出 所有 PowerShell 教程。