Created
May 3, 2015 12:51
-
-
Save pkirch/b81e6a45057cc96dd85e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Microsoft Virtual Academy | |
# Automatisierte Konfiguration in Azure im Überblick | |
# 301 - http://aka.ms/mva-1505-301 | |
param($name, $number) | |
Write-Output "Name: $name" | |
Write-Output "Number: $number" | |
$features = Get-WindowsFeature | |
$processes = Get-Process | |
New-Object PSObject -Property @{ | |
Features = $features | |
Processes = $processes | |
Name = $name | |
Number = $number | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Microsoft Virtual Academy | |
# Automatisierte Konfiguration in Azure im Überblick | |
# 301 - http://aka.ms/mva-1505-301 | |
param($adminPassword, $domainName, $domainNetbiosName) | |
Add-WindowsFeature AD-Domain-Services | |
# Save secure string with password. | |
$securePassword = ConvertTo-SecureString -String $adminPassword -AsPlainText -Force | |
# | |
# Windows PowerShell script for AD DS Deployment | |
# | |
Import-Module ADDSDeployment | |
Install-ADDSForest ` | |
-CreateDnsDelegation:$false ` | |
-DatabasePath "C:\Windows\NTDS" ` | |
-DomainMode "Win2012R2" ` | |
-DomainName $domainName ` | |
-DomainNetbiosName $domainNetbiosName ` | |
-ForestMode "Win2012R2" ` | |
-InstallDns:$true ` | |
-LogPath "C:\Windows\NTDS" ` | |
-NoRebootOnCompletion:$false ` | |
-SysvolPath "C:\Windows\SYSVOL" ` | |
-Force:$true ` | |
-SafeModeAdministratorPassword:$securePassword | |
Add-WindowsFeature -Name Web-Server, Web-Windows-Auth, Web-Mgmt-Tools | |
Set-WebConfigurationProperty -Filter system.webServer/security/authentication/anonymousAuthentication -PSPath "IIS:\Sites" -Location "Default Web Site" -Name Enabled -Value False | |
Set-WebConfigurationProperty -Filter system.webServer/security/authentication/windowsAuthentication -PSPath "IIS:\Sites" -Location "Default Web Site" -Name Enabled -Value True |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Microsoft Virtual Academy | |
# Automatisierte Konfiguration in Azure im Überblick | |
# 301 - http://aka.ms/mva-1505-301 | |
#region create VM | |
# Settings | |
$subscriptionName = "MSFT MVA Live" # Get-AzureSubscription | |
$location = "West Europe" # Get-AzureLocation | |
$serviceName = "mvaconfig301" | |
$storageAccountName = $serviceName | |
$adminUsername = "adm_demo" | |
$adminPassword = "Azureisttoll!" | |
$imageFamily = "Windows Server 2012 R2 Datacenter" | |
$vmName = $serviceName | |
$instanceSize = "Medium" # Get-AzureRoleSize | |
# In case you have more than one Azure subscription, select one. | |
Select-AzureSubscription -SubscriptionName $subscriptionName | |
# Get latest image for defined image family. | |
# MVA03-Images.ps1 / https://gist.github.com/pkirch/058d757a799fa0087241 | |
$imageName = Get-AzureVMImage | | |
Where-Object -Property ImageFamily -eq $imageFamily | | |
Sort-Object -Property PublishedDate -Descending | | |
Select-Object -ExpandProperty ImageName -First 1 | |
# Create storage account and set is as current. | |
New-AzureStorageAccount -Location $location -StorageAccountName $storageAccountName -Type Standard_LRS | |
Set-AzureSubscription -SubscriptionName $subscriptionName -CurrentStorageAccountName $storageAccountName | |
# Create new VM configuration, add provisioning data to it, and start it. | |
New-AzureVMConfig -ImageName $imageName -InstanceSize $instanceSize -Name $vmName | | |
Add-AzureProvisioningConfig -Windows -AdminUsername $adminUsername -Password $adminPassword | | |
Add-AzureEndpoint -LocalPort 80 -Name HTTP -Protocol tcp -PublicPort 80 | | |
New-AzureVM -ServiceName $serviceName -Location $location | |
#endregion | |
#region Run simple custom script via Azure Extensions | |
$containerExt = "extensions" | |
# Create destination container in storage if it does not exist. | |
$containerList = Get-AzureStorageContainer -Name $containerExt -ErrorAction Ignore # Ignore error if container not found. | |
if ($containerList.Length -eq 0) { | |
New-AzureStorageContainer -Name $containerExt -Permission Off | |
} | |
$fileCustomScriptExtension = New-Object System.IO.FileInfo ("C:\Users\pkirch\OneDrive @ Microsoft\FY15\Content\2015-02-28 MVA Deployments\3 Extensions\CS-ArgumentsSample.ps1") | |
# Upload PowerShell file | |
Set-AzureStorageBlobContent -Container $containerExt -File $fileCustomScriptExtension.FullName -Force | |
# Inject custom script.. | |
Get-AzureVM -ServiceName $serviceName -Name $vmName | | |
Set-AzureVMCustomScriptExtension -ContainerName $containerExt -FileName $fileCustomScriptExtension.Name -Argument "-number 42 -name $serviceName" | | |
Update-AzureVM | |
$vm = Get-AzureVM -ServiceName $serviceName -Name $vmName | |
$vm.ResourceExtensionStatusList | |
$scriptExt = $vm.ResourceExtensionStatusList | Where-Object -Property HandlerName -eq "Microsoft.Compute.CustomScriptExtension" | |
$scriptExt | |
$scriptExt.ExtensionSettingStatus | |
$scriptExt.ExtensionSettingStatus.SubStatusList.FormattedMessage.Message | |
$scriptExt.ExtensionSettingStatus.SubStatusList.FormattedMessage.Message.Replace("\n", "`n") | |
#endregion | |
#region Run custom script to install ADDS, a forrest, and IIS. | |
$fileCustomScriptExtension = New-Object System.IO.FileInfo ("C:\Users\pkirch\OneDrive @ Microsoft\FY15\Content\2015-02-28 MVA Deployments\3 Extensions\CS-InstallSample.ps1") | |
# Upload PowerShell file | |
Set-AzureStorageBlobContent -Container $containerExt -File $fileCustomScriptExtension.FullName -Force | |
# Inject custom script: install AD services, forest, and IIS. | |
Get-AzureVM -ServiceName $serviceName -Name $vmName | | |
Set-AzureVMCustomScriptExtension ` | |
-ContainerName $containerExt ` | |
-FileName $fileCustomScriptExtension.Name ` | |
-Argument "-adminPassword $adminPassword -domainName $serviceName.cloudapp.net -domainNetbiosName net$vmName" | | |
Update-AzureVM | |
do { | |
Write-Host "Status Check: $(Get-Date -Format G)" -ForegroundColor Green | |
$vm = Get-AzureVM -ServiceName $serviceName -Name $vmName | |
$scriptExt = $vm.ResourceExtensionStatusList | Where-Object -Property HandlerName -eq "Microsoft.Compute.CustomScriptExtension" | |
if ($lastCustomScriptTimestamp -eq $null) { | |
Write-Host "Wait for new custom script execution." -ForegroundColor Green | |
$lastCustomScriptTimestamp = $scriptExt.ExtensionSettingStatus.TimestampUtc | |
} else { | |
if ($lastCustomScriptTimestamp -lt $scriptExt.ExtensionSettingStatus.TimestampUtc) { | |
Format-List -InputObject $scriptExt.ExtensionSettingStatus -Property TimestampUtc, Operation, Status, Code | |
Write-Host "Messages" -ForegroundColor Gray | |
$scriptExt.ExtensionSettingStatus.SubStatusList.FormattedMessage.Message.Replace("\n", "`n") | |
} | |
} | |
Start-Sleep 30 | |
} until (($lastCustomScriptTimestamp -lt $scriptExt.ExtensionSettingStatus.TimestampUtc) -and ($scriptExt.ExtensionSettingStatus.Operation -eq "Command Execution Finished")) | |
#endregion |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment