Leer en inglés

Compartir a través de

对已启用 Azure Arc 的服务器上的运行命令的 PowerShell 请求(预览版)

使用 连接的计算机的运行命令的 PowerShell 命令,可以在已启用 Arc 的虚拟机上远程安全地执行脚本或命令,而无需通过远程桌面协议或 SSH 直接连接到它们。

本文提供了使用多个 PowerShell 命令的示例,可帮助你了解如何使用 PowerShell 在已启用 Arc 的服务器上执行脚本或命令。

先决条件

  • 已启用 Arc 的服务器上的 Connected Machine 代理版本必须为 1.33 或更高版本。

PowerShell 示例请求

以下示例使用各种与已启用 Arc 的服务器上的运行命令配合使用的 PowerShell 命令。

在计算机上执行脚本

此命令将脚本传送到计算机进行执行并返回捕获的输出。

New-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -Location "chinaeast2" -RunCommandName "RunCommandName" -SourceScript "echo Hello World!"

Nota

可以在参数中添加 -SourceScript 多个命令。 使用 ; 分隔每个命令。 示例:-SourceScript "id; echo Hello World!"

使用存储中的脚本文件在计算机上执行脚本

此命令将 Connected Machine 代理定向到上传脚本的存储 Blob 的共享访问签名 (SAS) URI,然后指示代理执行脚本并返回捕获的输出。

New-AzConnectedMachineRunCommand -ResourceGroupName "MyRG0" -MachineName "MyMachine" -RunCommandName "MyRunCommand" -Location "chinaeast2" -SourceScriptUri "< SAS URI of a storage blob with read access or public URI>"

Nota

scriptUri这是存储 Blob 的共享访问签名(SAS)URI,它必须提供对 Blob 的读取访问权限。 建议 SAS URI 的到期时间为 24 小时。 可以使用 Blob 选项或 SAS 令牌 New-AzStorageBlobSASToken在 Azure 门户中生成 SAS URI。 如果使用New-AzStorageBlobSASToken生成 SAS 令牌,则 SAS URI 格式为:base blob URL + "?" + 从New-AzStorageBlobSASToken获得的 SAS 令牌。

列出计算机上所有已部署的 Run 命令资源

此命令返回先前部署的运行命令及其属性的完整列表。

Get-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine"

获取执行状态和结果

此命令检索 Run 命令的当前执行进度,包括最新输出、开始/结束时间、退出代码和执行的终端状态。

Get-AzConnectedMachineRunCommand -ResourceGroupName "myRG" - MachineName "myMachine" -RunCommandName "RunCommandName"

通过实例视图获取运行命令的状态信息

获取具有实例视图的计算机上的“运行”命令的状态信息。 实例视图包含 Run 命令(成功、失败等)的执行状态、退出代码、标准输出和执行脚本生成的标准错误。 非零退出代码表示执行失败。

Get-AzConnectedMachineRunCommand -ResourceGroupName "MyRG" -MachineName "MyMachine" -RunCommandName "MyRunCommand"

除了其他信息,响应还返回以下字段:

  • InstanceViewExecutionState:运行命令脚本的状态。 请查看此状态,了解脚本是否成功。

  • ProvisioningState:常规扩展预配端到端的状态(扩展平台是否能够触发 Run 命令脚本)。

在计算机上创建或更新 Run Command,并捕获标准输出和标准错误消息

在计算机上创建或更新运行命令,并将标准输出和标准错误消息流式传输到输出和错误追加 blob。

New-AzConnectedMachineRunCommand -ResourceGroupName "MyRG0" - MachineName "MyMachine" -RunCommandName "MyRunCommand3" -Location "chinaeast2" -SourceScript "id; echo HelloWorld" -OutputBlobUri <OutPutBlobUrI> -ErrorBlobUri <ErrorBlobUri>

Nota

输出和错误 Blob 必须是 AppendBlob 类型,其 SAS URI 必须提供对 Blob 的读取、追加、创建和写入访问权限。 SAS URI 建议过期时间为 24 小时。 如果输出或错误 blob 不存在,则会创建一个 AppendBlob 类型的 blob。 可以使用 blob 的选项在 Azure 门户上生成 SAS URI,也可以使用 New-AzStorageBlobSASToken 生成 SAS 令牌。

以其他用户身份在计算机上创建或更新运行命令

使用RunAsUserRunAsPassword参数,以不同用户身份在计算机上创建或更新 Run 命令。

在使用这些参数之前,需要:

  • 请与计算机的管理员联系,并确保用户有权访问计算机。
  • 确保用户有权访问 Run 命令访问的资源。 示例:目录、文件、网络等。
  • 在 Windows 计算机上,确保“辅助登录”正在运行。
New-AzMachineRunCommand -ResourceGroupName "MyRG0" -MachineName "MyMachine" -RunCommandName "MyRunCommand" -Location "chinaeast2" -SourceScript "id; echo HelloWorld" -RunAsUser myusername -RunAsPassword mypassword

在具有本地脚本文件的计算机上创建或更新 Run 命令

使用执行 cmdlet 的客户端计算机上的本地脚本文件在计算机上创建或更新运行命令。

New-AzConnectedMachineRunCommand -ResourceGroupName "MyRG0" -VMName "MyMachine" -RunCommandName "MyRunCommand" -Location "chinaeast2" -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1"

在将敏感输入传递到脚本时在计算机上创建或更新 Run 命令

用于 ProtectedParameter 将任何敏感输入传递给脚本,例如密码或密钥。

$privateParametersArray = @{name='inputText';value='privateParam1value'}

New-AzConnectedMachineRunCommand -MachineName "MyMachine" -ResourceGroupName "MyRG0" -RunCommandName "MyRunCommand" -Location "chinaeast2" -SourceScriptUri <SourceScriptUri> -ProtectedParameter $privateParametersArray 

用于捕获 inputText 的示例脚本:

param ([string]$inputText)
Write-Output $inputText

也可以使用类似的方式 Parameter传递公共参数。

  • Windows - 将参数和 ProtectedParameter 传递给与以下示例类似的脚本:myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value

  • Linux - 一个命名为 Parameter 的组件及其值被设置为环境配置,并且应该能在 PowerShell 脚本中访问。 对于无名称自变量,请向名称输入传递一个空字符串。 无名称参数传递给类似于以下示例的脚本: myscript.sh publicParam1value publicParam2value secret1value secret2value

从计算机中删除 RunCommand 资源

删除以前部署在计算机上的运行命令资源。 如果脚本执行仍在进行中,则执行将终止。

Remove-AzConnectedMachineRunCommand -ResourceGroupName "myRG" -MachineName "myMachine" -RunCommandName "RunCommandName"