迭代Azure中的VM列表

时间:2015-04-20 08:06:53

标签: powershell azure azure-virtual-machine

我在Auzre上托管了大约10个虚拟机,我需要遍历每个虚拟机,然后在每个虚拟机上执行一个PowerShell脚本,让我们说“设置日期”#39;

连接到每个VM的最佳方法是什么,执行ps脚本然后断开连接?

1 个答案:

答案 0 :(得分:1)

您可以通过扩展使用PowerShell远程处理或自定义脚本在远程VM上执行PowerShell代码。

对于这两种解决方案,您可以使用PowerShell命令Get-AzureVM获取VM列表。使用循环来迭代这些VM。我在这里跳过那部分,因为迭代是PowerShell的基础。

1。 PowerShell远程处理

为此,您需要在远程VM上启用PowerShell远程处理,并为PowerShell远程处理提供一个开放端口。两者都是新VM的默认设置。

优势:此解决方案非常便于与远程VM进行交互式会话。此解决方案的缺点是,您需要对每个VM进行身份验证,并且必须在执行时保持连接。

使用每个VM,您可以执行类似的操作。这是一个缩短的示例,我在远程VM上安装了ADDS。

# Prepare credentials for remote session.
$secpasswd = ConvertTo-SecureString $AdminPassword -AsPlainText -Force
$credentialDC1 = New-Object System.Management.Automation.PSCredential ($AdminUsername, $secpasswd)

$EndpointDC = Get-AzureWinRMUri -ServiceName testlab-dc -Name dc1
#$EndpointDC = Get-AzureVM -ServiceName testlab-dc -Name dc1 | Get-AzureEndpoint -Name WinRmHTTPs

$psso = New-PSSessionOption -SkipCACheck
$sessionDC = New-PSSession -ComputerName testlab-dc.cloudapp.net -Port $EndpointDC.Port -Credential $credentialDC1 -UseSSL -SessionOption $psso

Invoke-Command -Session $sessionDC -ScriptBlock { 

# Set-Date or other command
# or for example
# Install-WindowsFeature AD-Domain-Services

}

Remove-PSSession -Session $sessionDC

2。通过扩展自定义脚本

在这里,您可以将PowerShell文件上传到BLOB存储中,然后在VM上执行该文件。要求是必须在VM上安装VM代理。 (默认为图库中的新VM。)

优势:您无需对每个VM进行身份验证,也无需在执行时保持连接。 缺点:您必须准备一个单独的PowerShell文件才能上传。获得结果是异步的。

示例:

# Upload PowerShell file
Set-AzureStorageBlobContent -Container extensions -File "Install-ADForest.ps1" -Blob "Install-ADForest.ps1"

# Install AD services and forrest
Get-AzureVM -ServiceName demoext -Name demoext | 
    Set-AzureVMCustomScriptExtension -ContainerName extensions -FileName "Install-ADForest.ps1" |
    Update-AzureVM

容器必须存在。在上传文件之前创建该容器。