2013-11-11

Windows Azure Management Script

When I first started writing these scripts the Windows Azure Management Portal was less than stable. Many times just starting a VM would cause it to get stuck in a starting state, disks could get lease blocked, if you tried to start more than one VM at a time you'd get an error saying ~ x-ms-requestid that requires exclusive access... so in brief using the Windows Azure Management Portal was challenging for production IaaS resources.

So I wrote some PowerShell functions to help me out. The most challenging part was the lack of working procedures and the constant flux of the Azure SDK, which presented itself in changed properties, differing methods and unexpected behaviour...
The management portal is significantly more stable now.
The script has a IaaS focus and consequently will only be of help in managing Virtual Machines and their Storage, but with a little more work can be extended to .

This script is on GitHub (Manage-Azure) and I encourage any with an interest to contribute to it's further development.

Anyway as of October 2013 the script works, so lets go in to their setup and use case.


  1. Ensure you have a Microsoft Azure account.
  2. Download the scripts from: Manage-Azure
  3. Extract them to a path on your local machine.
  4. Open a PowerShell window > import the script ". C:\Your-Location\Manage-Azure.ps1":

    Here you can see my PS execution policy doesn't allow me to run the script, and after I chnage the policy the script tells me I need to download the Azure Cmd line tools (bcos I'm testing on a completely vanilla Win7 VM).
  5. Unfortunately there's no way around downloading the SDK/Cmd line tools dependencies :(.
  6. Once the script is imported you have 2 functions available to you:
    1. Manage-AStorage
    2. Manage-AVM
  7. Type in the function and a list of operations will popup.
  8. If a "publishsettings" file isn't in the script location, it will ask you to choose the directory where it's located... download yours if you haven't already.
  9. Choose your subscription if you have more than 1.


Manage-AStorage

This function provides Storage operations.

  1. Copy Blob.
    This operation enables copying blobs from container to container, and from storage account to storage account. If the storage accounts are in different data centers the copy operation can take a significant amount of time... eg: 127GB from Ireland to Hong Kong ~ 35minutes.


  2. Delete Blob.
    Delete 1 or more blobs.

  3. Add Disk
    Just like the 
    Windows Azure Management Portal, it creates a disk from a blog reference.
  4. Remove Disk
    Just like the 
    Windows Azure Management Portal
  5. Break Lease
    Sometimes a blob will have a lease by an object that doesn't exist, this used to be a big problem before October 2013 when VM's would frequently get stuck on starting, now not so much.
  6. New Snapshot
    Takes a blob snapshot.
  7. Restore Snapshot
    Restores a blob snapshot.


Manage-AVM

This function provides VM operations.

  1. Start
    Starts 1 or more VM's; this operation does one at a time and waits for them to start.

    Note: They don't always start at the same speed.
  2. Stop
    Stops 1 or more VM's; 
    this operation does one at a time and waits for them to stop.
  3. Backup
    This operation will stop a VM if started, copy the disk blobs attached to the VM to the backup container specified in the PS script ($BackupPath) and Start the VM if it was originally started.

    Note: In this screenshot you can observe iios-1 was "stopped" while iios-2 was "started" and " vhd-backups" didn't exist, so was created.

    Note: Here iios-2 has 2 attached disks.
  4. Restore
    This operation will stop a VM if started, Export the VM config, detach all disks, delete the disk blobs, remove the VM, let you select a blob to restore from the backup container, copy it to the vhds container, create disks for the blobs, recreate the VM from the config file and Start the VM if it was originally started.

  5. Export VM XML
    This just saves the VM configuration to an XML file.
  6. New VM XML
    This creates a VM from an XML configuration file. This comes in handy if a Restore operation fails for some reason, or you Delete the VM while keeping the attached disks.


Known Issues - Improvements

  1. Operation behaviour is inconsistent; you can perform a restore and it will fail at some point, one time and then do exactly the same operation and it works the next. The seeming randomness of it also makes it challenging to resolve.

    Note: Here you can see while trying to perform a Restore the script fails when recreating the VM from the config file. It's easy to recover from this point by just calling the "New VM XML" operation, but then this also fails when starting the VM even though the VM starts successfully... pretty annoying.
  2. Reuse of functions; I've been a little lax in reusing functions like copy/delete blob are used by multiple operations in Manage-AVM, but I don't use the Manage-AStorage functions.
  3. Better error handling; most Azure operations have an Id with returned properties indicating success/failure in most cases I don't use these.
  4. Logging needs improving, I capture Start and Stop VM logs but that's about it.

    2013-03-14

    SharePoint Foundation 2013 customize Stand-alone server installation

    SharePoint installs have two server type install options; either Complete, or Stand-alone.

    The Complete option lets you specify SQL server, accounts, and a couple other options. The problem with this option is that it requires a domain.
    The Stand-alone option doesn't let you specify anything and will install and configure the Service Apps using the built-in SQL Express 2008.

    What if you want to setup a Single Server, specify a local SQL Server, say SQL 2012 Dev edition and manually configure the service apps?


    1. Select Complete.
    2. Wait for it to finish, but don't launch SharePoint Products Configuration Wizard 
    3. Run the SharePoint 2013 Management Shell: C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe  -NoExit  " & ' C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\CONFIG\POWERSHELL\Registration\\sharepoint.ps1 ' "
    4. Paste the following command using names appropriate for your environment: New-SPConfigurationDatabase -DatabaseName "SPF2013_Config" -DatabaseServer "SPF2013SQL" -AdministrationContentDatabaseName "Content_CA"
    5. Run the SharePoint Products Configuration Wizard: "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\BIN\psconfigui.exe"
    6. Let it complete.
    7. Now the problem is you will not be able to add any Managed Accounts through the UI, to fix this you need to edit the following registry key: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\15.0\WSS]
    8. Change "ServerRole"="APPLICATION" to "ServerRole"="SINGLESERVER". Making this change will also break anything that uses psconfig, unless you have setup the SQL server to have a SharePoint instance, eg: server\SharePoint, that's how the Stand-alone SQL instance is configured so the psconfig checks if that instance is running. You'll only need psconfig to repair SP or install new service packs, and it's easy to change ServerRole back.
    This should also work with SPF 2010.

    2013-03-13

    Top 20 Replies by Programmers when their programs don't work

    20. That's weird... 
    19. It's never done that before. 
    18. It worked yesterday.
    17. How is that possible? 
    18. It must be a hardware problem. 
    15. What did you type in wrong to get it to crash? 
    14. There has to be something funky in your data. 
    13. I haven't touched that module in weeks! 
    12. You must have the wrong version. 
    11. It's just some unlucky coincidence. 
    10. I can't test everything! 
    9. THIS can't be the source of THAT. 
    8. It works, but it hasn't been tested. 
    7. Somebody must have changed my code. 
    6. Did you check for a virus on your system? 
    5. Even though it doesn't work, how does it feel? 
    4. You can’t use that version on your system. 
    3. Why do you want to do it that way? 
    2. Where were you when the program blew up? 
    1. It works on my machine.

    2013-02-22

    SharePoint 2010 upgrade to 2013 FBA MachineKey validation attribute invalid

    Issue:
    You've upgraded a Forms Based Authentication SharePoint 2010 web application to SP2013, and implemented FBA on the SharePoint 2013 Web Application.
    After creating the AspNetSQL membership DB you add the Membership Provider, use passwordFormat="Encrypted". None of the passwords work. You test the AspNetDB on a standalone .net site and get the following:


    Cause:
    • SP 2013 uses .net 4.0, which out of the gates defaults to Hash-based Message Authentication Code (HMAC) using the SHA256 hash function for the web.config machineKey.
    • SP 2010 uses .net 2.0 which defaults to SHA1.
    • IIS7.5 IIS manager doesn't even seem to support .net 4.0 properly.

    Fix:
    • Don't use Encrypted or Hash passwords... I know, I know that's not a fix, it's a lazy work around.
    • Use the SP 2010 web.config machineKey's or ...
    • Generate a new machineKey using SHA1: Go to http://www.developmentnow.com/articles/machinekey_generator.aspx generate the key and replace the existing ones in all the SP web.config files or C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config, and the SecurityTokenServiceApplication web.config
    • Regenerate passwords for all users.
    If the machineKey changes, then you may need to reprovision the Security Token Service Application.