创建 Azure VM 并打开 Windows 防火墙端口?

创建 Azure VM 并打开 Windows 防火墙端口?

我正在编写一个 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 为所有这些提供了理想的解决方案。我有一个基本配置,如果您需要一份副本,它可能会有所帮助?

相关内容