我在Auzre上托管了大约10个虚拟机,我需要遍历每个虚拟机,然后在每个虚拟机上执行一个PowerShell脚本,让我们说“设置日期”#39;
连接到每个VM的最佳方法是什么,执行ps脚本然后断开连接?
答案 0 :(得分:1)
您可以通过扩展使用PowerShell远程处理或自定义脚本在远程VM上执行PowerShell代码。
对于这两种解决方案,您可以使用PowerShell命令Get-AzureVM
获取VM列表。使用循环来迭代这些VM。我在这里跳过那部分,因为迭代是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
在这里,您可以将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
容器必须存在。在上传文件之前创建该容器。