概要
此 cmdlet 在每个指定虚拟机的来宾操作系统中运行脚本。
句法
Invoke-VMScript [-ScriptText] <String> [-VM] <VirtualMachine[]> [-GuestCredential <PSCredential>] [-GuestPassword <SecureString>] [-GuestUser <String>] [-HostCredential <PSCredential>] [-HostPassword <SecureString>] [-HostUser <String>] [-RunAsync] [-ScriptType <ScriptType>] [-Server <VIServer[]>] [-ToolsWaitSecs <Int32>] [-Confirm] [-WhatIf] [<CommonParameters> ]
相关命令
详细说明
此 cmdlet 在每个指定虚拟机的来宾操作系统中运行脚本。要运行 Invoke-VMScript,用户必须具有对包含虚拟机的文件夹的读取权限和 Virtual Machine.Interaction.Console 交互权限。虚拟机必须已打开电源并安装了 VMware Tools。必须存在与在端口 902 上托管虚拟机的 ESX 系统的网络连接。要使用主机或来宾操作系统进行身份验证,必须提供 HostUser/HostPassword (GuestUser/GuestPassword) 对和 HostCredential (GuestCredential) 参数之一。您用来向来宾操作系统进行身份验证的来宾帐户必须具有管理员权限。有关受支持操作系统的列表,请参阅 PowerCLI 用户指南。
要针对 5.0 之前的 vCenter Server/ESX/ESXi 版本运行此 cmdlet,您需要满足以下要求: *您必须在 32 位版本的 Windows PowerShell 上运行 cmdlet。*您必须有权通过 TCP 端口 902 访问托管虚拟机的 ESX。*对于 4.1 之前的 vCenter Server/ESX/ESXi 版本,您需要 VirtualMachine.Interact.ConsoleInteract 权限。对于 vCenter Server/ESX/ESXi 4.1 及更高版本,您需要 VirtualMachine.Interact.GuestControl 权限。
要针对 vCenter Server/ESXi 5.0 及更高版本运行此 cmdlet,您需要 VirtualMachine.GuestOperations.Modify 和 VirtualMachine.GuestOperations.Execute 权限。
参数
NAME | TYPE | DESCRIPTION | REQUIRED? | PIPELINE INPUT | DEFAULT VALUE |
---|---|---|---|---|---|
ScriptText | String | 提供要运行的脚本的文本。您还可以将包含脚本路径的字符串变量传递给此参数。 | true | False | |
VM | VirtualMachine[] | 指定要在其来宾操作系统上运行脚本的虚拟机。 | true | True (ByValue) | |
Confirm | SwitchParameter | 如果值为 $true,则表示 cmdlet 在运行前要求确认。如果值为 $false,则 cmdlet 会在不要求用户确认的情况下运行。 | false | False | |
GuestCredential | PSCredential | 指定一个 PSCredential 对象,其中包含您要用于通过虚拟机来宾操作系统进行身份验证的凭据。 | false | False | |
GuestPassword | SecureString | 指定要用于对虚拟机来宾操作系统进行身份验证的密码。 | false | False | |
GuestUser | String | 指定要用于对虚拟机来宾操作系统进行身份验证的用户名。 | false | False | |
HostCredential | PSCredential | 指定一个 PSCredential 对象,其中包含要用于与主机进行身份验证的凭据。仅当您进行身份验证的 vCenter Server 或 ESX 版本低于 4.0,或者您安装的 VIX 版本低于 1.10 时,您才需要指定主机凭据。 | false | False | |
HostPassword | SecureString | 指定要用于与主机进行身份验证的密码。仅当您进行身份验证的 vCenter Server 或 ESX 版本低于 4.0,或者您安装的 VIX 版本低于 1.10 时,您才需要指定主机凭据。 | false | False | |
HostUser | String | 指定要用于与主机进行身份验证的用户名。仅当您进行身份验证的 vCenter Server 或 ESX 版本低于 4.0,或者您安装的 VIX 版本低于 1.10 时,您才需要指定主机凭据。 | false | False | |
RunAsync | SwitchParameter | 表示命令立即返回,无需等待任务完成。在这种模式下,cmdlet 的输出是一个 Task 对象。有关 RunAsync 参数的详细信息,请在 VMware PowerCLI 控制台中运行“help About_RunAsync”。 | false | False | |
ScriptType | ScriptType | 指定脚本的类型。有效值为 PowerShell、Bat 和 Bash。如果虚拟机操作系统为 Windows,则默认值为 PowerShell。如果虚拟机操作系统为 Linux,则默认值为 Bash。 | false | False | |
Server | VIServer[] | 指定要在其上运行 cmdlet 的 vCenter Server 系统。如果未向此参数传递任何值,则该命令在默认服务器上运行。有关默认服务器的更多信息,请参见 Connect-VIServer 的说明。 | false | False | |
ToolsWaitSecs | Int32 | 指定系统等待连接到 VMware Tools 的时间(以秒为单位)。默认值为 20。 | false | False | |
WhatIf | SwitchParameter | 表示运行 cmdlet 只是为了显示将要进行的更改,实际上没有修改任何对象。 | false | False |
返回类型
一个或多个VMScriptResult对象VMScriptResult
笔记
要使 PowerShell 脚本正常工作,您必须在 PowerShell 安装后重新启动虚拟机。对于 BIN 和 BASH 脚本,不需要重新启动。
例子
-------------------------- 示例 1 ---------------------- ----
<span style="color:#000000"><span style="color:#000066"><span style="background-color:#eff7ff">Invoke-VMScript -VM VM -ScriptText "dir" -GuestUser 管理员 -GuestPassword pass2</span></span></span>
列出来宾操作系统上的目录条目。
-------------------------- 示例 2 ---------------------- ----
<span style="color:#000000"><span style="color:#000066"><span style="background-color:#eff7ff">$script = '&"$env:ProgramFiles\Common Files\Microsoft Shared\MSInfo\msinfo32.exe" /report "$env:Tmp\inforeport"'
调用-VMScript -ScriptText $script -VM VM -GuestCredential $guestCredential</span></span></span>
运行 PowerShell 脚本。在 PowerShell 中,要访问环境变量,您必须使用以下语法:$env:<environment variable>(例如,$env:ProgramFiles)。此外,要运行该程序,您必须在程序路径前指定一个与号 (&)。外部引号 ($script = '...') 是必需的,因为这是您在 PowerShell 中定义字符串变量的方式。内部双引号是必需的,因为路径中有空格。
-------------------------- 示例 3 ---------------------- ----
<span style="color:#000000"><span style="color:#000066"><span style="background-color:#eff7ff">$script = '"%programfiles%\Common Files\Microsoft Shared\MSInfo\msinfo32.exe" /report "%tmp%\inforeport"'
调用-VMScript -ScriptText $script -VM VM -GuestCredential $guestCredential -ScriptType Bat</span></span></span>
运行 BAT 脚本。在 BAT 脚本中,要访问环境变量,您必须使用以下语法:%<environment variable>%(例如,%programfiles%)。
外部引号 ($script = '...') 是必需的,因为这是您在 PowerShell 中定义字符串变量的方式。内部双引号是必需的,因为路径中有空格。