3

Мне нужно написать рабочий процесс powershell, который создает Azure Virtual Machine и выполняет некоторые синие командлеты на этой Azure Virtual Machine. Но недавно созданная виртуальная машина не имеет в ней ни одного модуля PowerShell. Мой код будет как этотУстановка Azure powershell в лазурной виртуальной машине

New-AzureQuickVM -Windows -ServiceName $serviceName -Name $vmname -ImageName $VMImage -Password $password -AdminUserName $username -InstanceSize "ExtraSmall" -WaitForBoot 

    $WinRmUri = Get-AzureWinRMUri -ServiceName $serviceName -Name $vmname 
    $Cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $password 

    Invoke-Command -ConnectionUri $WinRmUri -Credential $Cred -ScriptBlock { 
     Add-AzureAccount ...... ## These cmdlets need Azure Powershell Module 
     Set-AzureSubscription........ 
     New-AzureStorageAccount...... 
    } 

Я не предполагается вручную получить RDP этой виртуальной машины и открыть его, чтобы установить Powershell модуль Azure, но для динамического создания виртуальной машины с помощью Powershell Командлета и установить лазурный модуль в этом VM с помощью PowerShell сам.

ответ

0

Вы можете использовать сервис Azure Automation, реализующий ваш код Powershell в рабочей книге.

http://azure.microsoft.com/en-us/documentation/services/automation/

+0

К сожалению, я должен я объяснил свою необходимость четко. Я не думаю, что могу использовать Runbooks. Мне нужна виртуальная машина. Весь процесс похож на подключение Azure Virtual Device и VM с использованием ISCSI, а затем доступ к данным в томе и выполнение каких-либо операций, связанных с azure. – saravanan

3

Это можно легко сделать с помощью ARM (Azure Resource Manager) шаблона. Это шаблон JSON, который определяет объекты для развертывания. В вашем случае вы захотите развернуть виртуальную машину с помощью специального расширения скрипта. После инициализации виртуальной машины менеджер ресурсов Azure будет извлекать предоставленные файлы и запускать вашу собственную оболочку. См. Пример ниже и замените строку https://<YOUR-BLOB-HERE>.blob.core.windows.net/resources/CUSTOM-POWERSHELL-SCRIPT.ps1 вашим сценарием blob и powershell. Для запуска скрипта вы можете использовать ядерную оболочку Azure, как описано здесь: https://azure.microsoft.com/en-us/documentation/articles/powershell-azure-resource-manager/

Ключевым командлетом для ваших целей является New-AzureResourceGroup. Вызов будет что-то вроде:

Switch-AzureMode -Name AzureResourceManager 
New-AzureResourceGroup -Name TestRG1 -Location "West US" -TemplateFile <YOUR-JSON-ARM-TEMPLATE>.json 

Смотреть список шаблонов ARM здесь для справки: https://github.com/Azure/azure-quickstart-templates. Образец шаблона для изменения для запуска пользовательского кода/установки Azure powershell.

{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", 
    "contentVersion": "1.0.0.0", 
    "parameters": { 
     "newStorageAccountName": { 
      "type": "string", 
      "metadata": { 
       "description": "Unique DNS Name for the Storage Account where the Virtual Machine's disks will be placed." 
      } 
     }, 
     "adminUsername": { 
      "type": "string", 
      "metadata": { 
       "description": "Username for the Virtual Machine." 
      } 
     }, 
     "adminPassword": { 
      "type": "securestring", 
      "metadata": { 
       "description": "Password for the Virtual Machine." 
      } 
     }, 
     "dnsNameForPublicIP": { 
      "type": "string", 
      "metadata": { 
       "description": "Unique DNS Name for the Public IP used to access the Virtual Machine." 
      } 
     }, 
     "windowsOSVersion": { 
      "type": "string", 
      "defaultValue": "2012-R2-Datacenter", 
      "allowedValues": [ 
       "2008-R2-SP1", 
       "2012-Datacenter", 
       "2012-R2-Datacenter" 
      ], 
      "metadata": { 
       "description": "The Windows version for the VM. This will pick a fully patched image of this given Windows version. Allowed values: 2008-R2-SP1, 2012-Datacenter, 2012-R2-Datacenter." 
      } 
     } 
    }, 
    "variables": { 
     "location": "West US", 
     "imagePublisher": "MicrosoftWindowsServer", 
     "imageOffer": "WindowsServer", 
     "OSDiskName": "osdiskforwindowssimple", 
     "nicName": "myVMNic", 
     "addressPrefix": "10.0.0.0/16", 
     "subnetName": "Subnet", 
     "subnetPrefix": "10.0.0.0/24", 
     "storageAccountType": "Standard_LRS", 
     "publicIPAddressName": "myPublicIP", 
     "publicIPAddressType": "Dynamic", 
     "vmStorageAccountContainerName": "vhds", 
     "vmName": "MyWindowsVM", 
     "vmSize": "Standard_A2", 
     "virtualNetworkName": "MyVNET", 
     "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',variables('virtualNetworkName'))]", 
     "subnetRef": "[concat(variables('vnetID'),'/subnets/',variables('subnetName'))]" 
    }, 
    "resources": [ 
     { 
      "type": "Microsoft.Storage/storageAccounts", 
      "name": "[parameters('newStorageAccountName')]", 
      "apiVersion": "2015-05-01-preview", 
      "location": "[variables('location')]", 
      "properties": { 
       "accountType": "[variables('storageAccountType')]" 
      } 
     }, 
     { 
      "apiVersion": "2015-05-01-preview", 
      "type": "Microsoft.Network/publicIPAddresses", 
      "name": "[variables('publicIPAddressName')]", 
      "location": "[variables('location')]", 
      "properties": { 
       "publicIPAllocationMethod": "[variables('publicIPAddressType')]", 
       "dnsSettings": { 
        "domainNameLabel": "[parameters('dnsNameForPublicIP')]" 
       } 
      } 
     }, 
     { 
      "apiVersion": "2015-05-01-preview", 
      "type": "Microsoft.Network/virtualNetworks", 
      "name": "[variables('virtualNetworkName')]", 
      "location": "[variables('location')]", 
      "properties": { 
       "addressSpace": { 
        "addressPrefixes": [ 
         "[variables('addressPrefix')]" 
        ] 
       }, 
       "subnets": [ 
        { 
         "name": "[variables('subnetName')]", 
         "properties": { 
          "addressPrefix": "[variables('subnetPrefix')]" 
         } 
        } 
       ] 
      } 
     }, 
     { 
      "apiVersion": "2015-05-01-preview", 
      "type": "Microsoft.Network/networkInterfaces", 
      "name": "[variables('nicName')]", 
      "location": "[variables('location')]", 
      "dependsOn": [ 
       "[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]", 
       "[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]" 
      ], 
      "properties": { 
       "ipConfigurations": [ 
        { 
         "name": "ipconfig1", 
         "properties": { 
          "privateIPAllocationMethod": "Dynamic", 
          "publicIPAddress": { 
           "id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]" 
          }, 
          "subnet": { 
           "id": "[variables('subnetRef')]" 
          } 
         } 
        } 
       ] 
      },    
     }, 
     { 
      "apiVersion": "2015-05-01-preview", 
      "type": "Microsoft.Compute/virtualMachines", 
      "name": "[variables('vmName')]", 
      "location": "[variables('location')]", 
      "dependsOn": [ 
       "[concat('Microsoft.Storage/storageAccounts/', parameters('newStorageAccountName'))]", 
       "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]" 
      ], 
      "properties": { 
       "hardwareProfile": { 
        "vmSize": "[variables('vmSize')]" 
       }, 
       "osProfile": { 
        "computername": "[variables('vmName')]", 
        "adminUsername": "[parameters('adminUsername')]", 
        "adminPassword": "[parameters('adminPassword')]" 
       }, 
       "storageProfile": { 
        "imageReference": { 
         "publisher": "[variables('imagePublisher')]", 
         "offer": "[variables('imageOffer')]", 
         "sku" : "[parameters('windowsOSVersion')]", 
         "version":"latest" 
        }, 
        "osDisk" : { 
         "name": "osdisk", 
         "vhd": { 
          "uri": "[concat('http://',parameters('newStorageAccountName'),'.blob.core.windows.net/',variables('vmStorageAccountContainerName'),'/',variables('OSDiskName'),'.vhd')]" 
         }, 
         "caching": "ReadWrite", 
         "createOption": "FromImage" 
        } 
       }, 
       "networkProfile": { 
        "networkInterfaces": [ 
         { 
          "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]" 
         } 
        ] 
       } 
      }, 
      "resources": [ 
       { 
        "name": "CustomScript", 
        "type": "extensions", 
        "location": "[variables('location')]", 
        "apiVersion": "2015-05-01-preview", 
        "dependsOn": [ 
         "[concat('Microsoft.Compute/virtualMachines/', variables('vmName')]" 
        ],      
        "properties": { 
         "publisher": "Microsoft.Compute", 
         "type": "CustomScriptExtension", 
         "typeHandlerVersion": "[variables('customScriptExtensionVersion')]", 
         "settings": { 
          "fileUris": [ 
           "https://<YOUR-BLOB-HERE>.blob.core.windows.net/resources/CUSTOM-POWERSHELL-SCRIPT.ps1", 
           "http://go.microsoft.com/?linkid=9811175&clcid=0x409" 
          ], 
          "commandToExecute": "[concat('powershell.exe -ExecutionPolicy Unrestricted -Command .\\CUSTOM-POWERSHELL-SCRIPT.ps1 -Argument1 argument1')]" 
         } 
        } 
       } 
      ] 
     } 
    ] 
} 
+0

Если вы не хотите использовать Azure Resource Manager, вы можете сделать это только с помощью PowerShell http://azure.microsoft.com/blog/2014/04/24/automating-vm-customization-tasks-using-custom-script -расширение / – jangelfdez

0

Хотя это не прямой подход, я реализовал эту идею, которая удовлетворяла мою потребность.

  1. Создать новую лазурь VM от портала и подключить его через RDP https://azure.microsoft.com/en-in/documentation/articles/virtual-machines-windows-tutorial/
  2. Теперь скачать лазурный Powershell MSI в вашей машине (в AzureVM загрузка блокируется) http://az635501.vo.msecnd.net/azcopy-3-1-0/MicrosoftAzureStorageTools.msi
  3. вручную скопировать файл MSI в виртуальном машины и установить его в том, что VM

  4. Теперь Захватите образ этой виртуальной машины, и загрузить его в лазури Мои изображения https://azure.microsoft.com/en-in/documentation/articles/virtual-machines-capture-image-windows-server/

  5. Когда я пишу сценарий автоматизации для создания виртуальной машины, я использовал это вновь созданный customVM изображение, где AzurePowershell уже установлен
1

Если виртуальная машина имеет PowerShell 5.0, то вы можете использовать PowerShell Gallery для установки модулей. Вы не будете требовать каких-либо шагов, упомянутых в других ответах. Все, что вам нужно сделать, это написать сценарий PowerShell, как обычно. Просто добавьте модуль из галереи PowerShell, используя только один командлет.

Вы можете использовать Install-модуль установить модуль из галереи, или вы можете использовать Install-Script установить образец сценария из публичной галереи PowerShell.

Вы можете даже разместить свои собственные модули в галерее и установить там.

Ссылка: Get Started with the PowerShell Gallery