我正在编写一个 Powershell 脚本,它将自动设置 Azure VM、将其添加到我的 Active Directory 域以及设置许多其他设置。
这个想法是能够根据需要启动和关闭虚拟机,而无需任何手动交互(包括不必使用 RDP 登录)。
这是我用来创建虚拟机的 Powershell 命令。它运行正常:
$vm = New-AzVM `
-ResourceGroupName $resourceGroup `
-Location $LocationName `
-Name $VMName `
-Credential $Credential `
-VirtualNetworkName $NetworkName `
-SubnetName $SubnetName `
-PublicIpAddressName $VMName `
-SecurityGroupName "name_of_existing_nsg" `
-OpenPorts 80,135,3389 `
-Image "MicrosoftWindowsServer:WindowsServer:2019-Datacenter-smalldisk:latest" `
-Size $VMSize `
-DefaultProfile $context
我正在将虚拟机添加到现有网络、子网和网络安全组,以便允许几乎任何内部通信。
该脚本从同一子网上的虚拟机运行。
但是,创建虚拟机后,我想将其添加到我的域中。我尝试了以下步骤,但没有成功:
Add-Computer
不起作用,因为我无法连接到虚拟机 Windows 防火墙上所需的 RPC 端口。NSG 规则很好,但我不知道如何在 Windows 防火墙中打开这些端口来创建虚拟机。使用本地 IP 地址而不是 DNS 名称没有帮助。
Add-Computer `
-DomainName "fully-qualified-domain" `
-Credential $domainCredential `
-LocalCredential $Credential `
-ComputerName $nic.IpConfigurations[0].PrivateIpAddress `
-Server "dc01.fully-qualified-domain" `
-Restart `
-Force
Add-Computer : Cannot establish the WMI connection to the computer '10.1.2.3' with the following error message: The
RPC server is unavailable. (Exception from HRESULT: 0x800706BA).
At line:1 char:1
+ Add-Computer `
+ ~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (10.1.2.3:String) [Add-Computer], InvalidOperationException
+ FullyQualifiedErrorId : AddComputerException,Microsoft.PowerShell.Commands.AddComputerCommand
- 使用 VM 扩展将 VM 添加到我的域(不是 Azure 域,而是在 Azure VM 上运行的域)。我还没有弄清楚是否有这样的扩展或如何使其工作。
- 使用 VM 扩展,允许我从 VM 运行本地命令(例如打开防火墙端口甚至直接将其添加到域)。
我不太想创建自定义 VHD 映像。如果可能的话,我更愿意从标准 Microsoft 模板开始。
答案1
事实证明,有一个脚本扩展可以从 Blob 存储中获取脚本并在 VM 上运行该脚本。将此脚本存储在您的 Blob 存储中:
Import-Module Microsoft.PowerShell.Management
# Add the computer to the domain
# Domain account that will add the VM to the domain:
$domainUser = "some-automation-account@fully-qualified-domain"
$domainUserSecurePassword = ConvertTo-SecureString "password" -AsPlainText -Force
$domainCredential = New-Object `
System.Management.Automation.PSCredential ($domainUser, $domainUserSecurePassword);
Add-Computer `
-DomainName "fully-qualified-domain" `
-Credential $domainCredential `
-ComputerName (Get-ComputerInfo).CsName `
-Server "dc01.fully-qualified-domain" `
-Restart `
-Force
...并使用以下 Powershell 命令在 VM 上启动脚本:
Set-AzVMCustomScriptExtension `
-Name "CustomScriptExtension" `
-ResourceGroupName $resourceGroup `
-VMName $VMName `
-Location $LocationName `
-StorageAccountName $scriptStorageAccount `
-StorageAccountKey $scriptStorageKey `
-ContainerName "powershell-scripts" `
-FileName "setup-vm.ps1" `
-Run "setup-vm.ps1"
更详细的例子我将其用作模板来让它发挥作用。
答案2
Azure Automation DSC 为所有这些提供了理想的解决方案。我有一个基本配置,如果您需要一份副本,它可能会有所帮助?