Quantcast
Channel: BizTalkGurus
Viewing all articles
Browse latest Browse all 2977

Blog Post: Sample automation script | exemple de script d’automatisation

$
0
0
This sample script shows how to create virtual machines in Windows Azure to prepare an installation of SharePoint Server.Le script suivant montre comment automatiser la création de machines virtuelles dans Windows Azure destinées à accueillir une installation de SharePoint Server

 

#region set default Windows Azure subscription  Import-Module azure    #select default subscription and storage account  $subscription = 'My Azure subscription'  Set-AzureSubscription -SubscriptionName $subscription -CurrentStorageAccount 'mystockageazure'  Set-AzureSubscription -DefaultSubscription $subscription  #endregion    #$adminPassword="******obfuscated*****"#region secret  $adminPassword="MWfvsoor75"#endregion#region other initializations  $serviceName = 'confsharepointc05'  $virtualNetworkName = 'network123'  $adminUsername = 'c05admin'    # get the credential as PSCredential (same type as what would be retrieved by the following command:  #    $credential = Get-Credential -UserName ".\${adminUsername}"  # )  $SecureStringadminPassword = ConvertTo-SecureString –String $adminPassword –AsPlainText -Force  $credential = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $adminUsername, $SecureStringadminPassword      # One can select an image by issuing commands like  # get-azurevmimage | select Label, ImageName, IsPremium  # get-azurevmimage | where { $_.Label -Match 'Windows Server 2012 Datacenter, Apri' }  $WindowsServer2012ImageName = 'a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-Datacenter-201304.01-en.us-127GB.vhd'  $WindowsAndSqlServerImageName = 'fb83b3509582419d99629ce476bcb5c8__Microsoft-SQL-Server-2012SP1-Standard-CY13SU04-SQL11-SP1-CU3-11.0.3350.0-B'    #create an empty collection of VMConfigs  $vms = @()  #endregion#region create domain controller  $DcVmName = 'C05DC1'    Write-Host "creating $DcVmName"  $adminPort = 52101    #create a new VM Config  $newVM = `      New-AzureVMConfig -ImageName $WindowsServer2012ImageName -InstanceSize Small -Name $DcVmName `          -AvailabilitySetName "C05DC" -DiskLabel "${DcVmName}os" `          -HostCaching ReadWrite -Label "$DcVmName" |      Add-AzureProvisioningConfig -Windows -AdminUsername $adminUsername -Password $adminPassword -NoRDPEndpoint |      Add-AzureDataDisk -CreateNew -DiskSizeInGB 30 -DiskLabel "${DcVmName}data1" -LUN 0 |      Add-AzureEndpoint -LocalPort 3389 -Name "RDP" -Protocol tcp -PublicPort $adminPort |      Set-AzureSubnet 'DCSubnet'        #add the VM config to the collection  $vms += ,$newVM    #show the collection  $vms | format-table    #create the VM and wait for boot  New-AzureVM -ServiceName $serviceName -VMs $vms -VNetName $virtualNetworkName -WaitForBoot  #endregion#region function definition for PowerShell remoting  function InstallWinRMCert($serviceName, $vmname)  {      $winRMCert = (Get-AzureVM -ServiceName $serviceName -Name $vmname | select -ExpandProperty vm).DefaultWinRMCertificateThumbprint         $AzureX509cert = Get-AzureCertificate -ServiceName $serviceName -Thumbprint $winRMCert -ThumbprintAlgorithm sha1         $certTempFile = [IO.Path]::GetTempFileName()      Write-Host $certTempFile      $AzureX509cert.Data | Out-File $certTempFile         # Target The Cert That Needs To Be Imported      $CertToImport = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $certTempFile         $store = New-Object System.Security.Cryptography.X509Certificates.X509Store "Root", "LocalMachine"      $store.Certificates.Count      $store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)      $store.Add($CertToImport)      $store.Close()         Remove-Item $certTempFile  }  #endregion#region install features on DC  $uri = Get-AzureWinRMUri -ServiceName $serviceName -Name $DcVmName  InstallWinRMCert $serviceName $DcVmName        # Use native PowerShell Cmdlet to execute a script block on the remote virtual machine  Invoke-Command -ConnectionUri $uri.ToString() -Credential $credential `      -ArgumentList $SecureStringadminPassword -ScriptBlock `  {      param($SecureStringadminPassword)        $logLabel = $((get-date).ToString("yyyyMMddHHmmss"))      $logPath = "$env:TEMP\init-webservervm_webserver_install_log_$logLabel.txt"      Import-Module -Name ServerManager      Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools -LogPath $logPath          $disks = Get-Disk | where { $_.NumberOfPartitions -eq 0 }       foreach ($d in $disks)      {          # there should be one disk only          $diskNumber = $d.Number          echo "will format disk $diskNumber"          Initialize-Disk $diskNumber          New-Partition -DiskNumber $diskNumber -UseMaximumSize -AssignDriveLetter          Format-Volume -DriveLetter F -Confirm:$False          get-volume -DriveLetter F      }        Import-module ADDSDeployment      Install-ADDSForest -DomainName "c05.compiouting.fr" -InstallDns:$true -DatabasePath "F:\NTDS" `          -LogPath "F:\NTDS" -SysvolPath "F:\SYSVOL" -NoRebootOnCompletion:$false -Force:$true `          -SafeModeAdministratorPassword $SecureStringadminPassword  }   #endregion#region wait for reboot and start a new collection  Start-Sleep -Seconds 45    $DcVm = Get-AzureVM -ServiceName $serviceName -Name $DcVmName  While ($DcVm.InstanceStatus -ne "ReadyRole")  {      write-host "Waiting for DC to be ready... Current Status = " $DcVm.InstanceStatus      Start-Sleep -Seconds 15      $DcVm = Get-AzureVM -ServiceName $serviceName -Name $DcVmName  }    $vms = @()  #endregion#region SQL Server  $prefix = 'C05SQL'for($i=1; $i -le 2; $i++)  {      Write-Host "creating $prefix${i}"      $adminPort = 53100 + $i        #create a new VM Config      $newVM = `          New-AzureVMConfig -ImageName $WindowsAndSqlServerImageName -InstanceSize Small -Name "$prefix$i" `              -AvailabilitySetName "$prefix" -DiskLabel "$prefix${i}os" `              -HostCaching ReadWrite -Label "$prefix${i}" |          Add-AzureProvisioningConfig -WindowsDomain -AdminUsername $adminUsername -Password $adminPassword `          -Domain "c05" -DomainUserName $adminUsername -DomainPassword $adminPassword -JoinDomain "c05.compiouting.fr" `          -NoRDPEndpoint |          Add-AzureDataDisk -CreateNew -DiskSizeInGB 50 -LUN 0 -DiskLabel "$prefix${i}data1" |          Add-AzureEndpoint -LocalPort 3389 -Name "RDP" -Protocol tcp -PublicPort $adminPort |          Set-AzureSubnet 'SQLSubnet'            #add the VM config to the collection      $vms += ,$newVM  }  #endregion#region SharePoint Server  $prefix = 'C05SP'for($i=1; $i -le 2; $i++)  {      Write-Host "creating $prefix$i"      $adminPort = 52200 + $i        #create a new VM Config      $newVM = `          New-AzureVMConfig -ImageName $WindowsServer2012ImageName -InstanceSize Small -Name "$prefix$i" `              -AvailabilitySetName "$prefix" -DiskLabel "$prefix${i}os" `              -HostCaching ReadWrite -Label "$prefix${i}" |          Add-AzureProvisioningConfig -WindowsDomain -AdminUsername $adminUsername -Password $adminPassword `          -Domain "c05" -DomainUserName $adminUsername -DomainPassword $adminPassword -JoinDomain "c05.compiouting.fr" `          -NoRDPEndpoint |          Add-AzureDataDisk -CreateNew -DiskSizeInGB 50 -LUN 0 -DiskLabel "$prefix${i}data1" |          Add-AzureEndpoint -LocalPort 3389 -Name "RDP" -Protocol tcp -PublicPort $adminPort |          Add-AzureEndpoint -LocalPort 80 -Name "Web" -Protocol tcp -PublicPort 80 `              -LBSetName "SPWebLB" -ProbePort 8080 -ProbeProtocol http -ProbePath '/' |          Set-AzureSubnet 'SP2013Subnet'            #add the VM config to the collection      $vms += ,$newVM  }  #endregion#region create SharePoint and SQL Server VMs and wait for them to boot  #show the collection  $vms | format-table    #create the VM and wait for boot  New-AzureVM -ServiceName $serviceName -VMs $vms -WaitForBoot  #endregion#region install features on SharePoint Servers  $prefix = 'C05SP'for($i=1; $i -le 2; $i++)  {      $vmName = "$prefix$i"        $uri = Get-AzureWinRMUri -ServiceName $serviceName -Name $vmName      InstallWinRMCert $serviceName $vmName        # Use native PowerShell Cmdlet to execute a script block on the remote virtual machine      Invoke-Command -ConnectionUri $uri.ToString() -Credential $credential -ScriptBlock `      {          $logLabel = $((get-date).ToString("yyyyMMddHHmmss"))          $logPath = "$env:TEMP\init-webservervm_webserver_install_log_$logLabel.txt"          Import-Module -Name ServerManager          Install-WindowsFeature -Name Web-Server -IncludeAllSubFeature -IncludeManagementTools -LogPath $logPath      }  }  #endregion

Smile

Benjamin


Blog Post by: Benjamin GUINEBERTIERE

Viewing all articles
Browse latest Browse all 2977

Latest Images

Trending Articles



Latest Images