Mass-VDI reconfiguration on vSphere with PowerCLI

A colleague asked me if there was an easy way to reconfigure VM´s that was on different hosts with PowerCLI, for some reason the VM´s had been configured with too many vCPU´s and the customer wanted a way to reconfigure the running VM´s.

I made a very easy PowerCLI script to solve this, maybe there is other solutions that might be better/more beautiful but this one solved the issue 🙂

You save this as a script and then run it with the starting name of the VM´s you want to configure, and as you can see you have to already have connected to the vcenter with Connect-VIServer before running it:

Screen Shot 2015-02-16 at 10.25.27

happy automating 🙂

Handy way to use PowerShell with VMM 2012 R2

After working with a customer and showing them the PowerShell scripts and functions I had made for automating their VMM 2012 R2 environment I realized that I needed a way to actually let them easily get them loaded and ready for use.

As you might know, you can store scripts within your VMM Library and also run them from the same place! So I thought of saving the functions there and making an initiator script that would load the functions that I had created so they could use them right away.

Really easy script that looks in the functions folder and import all functions, and as it is dynamic it will load all functions available in the folder at the time it is executed:

And when you put it in your VMM library it looks like this, I have added some description to make it more clear what it does 😉

Screen Shot 2015-02-06 at 13.24.40


And you can then run it from the console with the Run button and once the PowerShell console is loaded you can see which functions have been loaded and what names they have 🙂

Screen Shot 2015-02-06 at 13.50.07


And in the folder I have added the files containing the functions that I made with .psm1 ending ( I am converting some of the scripts that I made earlier to functions and will add them later, that is why it is quite few yet). You will also have to check and edit the permissions on the share and the SCVMM_Library folder so the user trying to run the script will be able to.

Screen Shot 2015-02-06 at 14.53.50


Also, I added the server in trusted sites otherwise I got this digital signed error and I do not at this moment have a cert to sign the scripts

digitalsignederror

So to get around that one you add in Internet Explorer Trusted SItes: *://vmm02.vmmserver.se (or of course what your VMM server FQDN is)

Screen Shot 2015-02-06 at 14.25.07

Last of all, to be able to run some of the functions that need elevation you can start the VMM GUI Console with “Run As Administrator” but you still use your Windows Credentials:

Screen Shot 2015-02-06 at 14.21.05

Happy automating within VMM 🙂

And yes SMA has been thought of but right now the customer do not need that extra complexity with WAP,SMA,SPF and runbook workers…..

HyperV local storage available for placement in SCVMM

I have been working with a customer and was going to do an upgrade of one of their Hyper-v clusters to 2012 R2. During my preparations and looking at the particular hosts I found several VM´s that was residing on local storage on the hosts and not on the cluster storage.

The reason for this was two things, first of all that it was allowed to put VM´s on local disks and second that when someone created the VM´s forgot to use the appropriate HW-template that makes them highly available by default. If you create a new VM with a new HW profile make sure that it is configured correctly under the Availability tab.

The Hyper-V hosts have been deployed with Bare-Metal deploy from VMM and that is why they have a D:\

Looking at the properties for a host you can see what storage that is available for placement:

Screen Shot 2015-01-28 at 14.26.28

and as you can see the VM is not configured as highly available and have the virtual disk on local storage:

Screen Shot 2015-01-28 at 14.33.41
Screen Shot 2015-01-28 at 14.20.24

I have made a simple script that configures all hosts within a cluster and set all storage that is not cluster shared to not available for placement.

And now when trying to deploy a VM with a new HW profile that is not set to highly available I cannot deploy it as the local disks have been unchecked as available for placement.

Screen Shot 2015-01-28 at 13.57.04
Screen Shot 2015-01-28 at 13.58.09

The reason for just configuring this for hyper-v nodes that belong to a cluster is that there might be a single hyper-v host that actually should be able to provision the VM to local disks.

Configuring VMM logical switch with bandwidth limit virtual port

I got a question from a customer how they could limit a VM´s bandwidth from VMM as it was too noisy and devoured the bandwidth from the host for the other VM´s. There are both a way to set priority and also bandwidth in Hyper-V 2012 and later.

In Hyper-V Manager you can find the setting on the VM´s configuration and the virtual network adapter tab,

Screen Shot 2015-01-16 at 16.15.32

And here I can enable bandwidth management and set both a minimum and maximum, and in this case I want just a limit

Screen Shot 2015-01-16 at 16.15.13

But how do I accomplish the same in VMM? As you might have noticed there is no possibility to edit this on the VM´s settings on the virtual nic, this is a setting that I configure with a Port profile instead and apply on selected VM/VM´s, and by doing it this way I can easily just configure the same profile for several VM´s instead of configuring each VM. There are some configured by default and I can also add new with the particular setting that I need.

First there is the port classification:

Screen Shot 2015-01-17 at 15.49.49

And then the actual port profiles:

Screen Shot 2015-01-17 at 15.48.26

These two combined is used in the Logical Switch for the virtual port,

Screen Shot 2015-01-19 at 11.45.23

Easiest is to use Powershell to create a new port classification and profile and then update the logical switch to be able to use it for the VM´s that needs it, I have made a function that takes care of all the steps including adding it to the logical switch as a virtual port:

Screen Shot 2015-01-19 at 11.54.28

And also a function for removing, in this I check the VM´s connected and moving them to the default port profile before removing it,

Screen Shot 2015-01-19 at 11.55.18

Probably there will be some updates to this in the future but here you can see and test for your own needs 🙂  I will now start to test some bandwidth flooding to see that it actually limits the VM´s

 

 

 

Error 25122 when doing refresh in VMM 2012 R2 UR3->

There is no better way than to start the year and enlighten you with a error I had this autumn at a customer…

After I updated the VMM server to UR3 at a customer I noticed that it started to give a warning (Completed w/ Info) during refresh of the cluster. And when digging into it you can see the reason for it…

Screen Shot 2015-01-07 at 19.45.26

When I set up the Hyper-V cluster I did it outside of VMM, I had though set up the hosts with logical switches and host vNics in VMM network fabric and the different cluster networks was configured with IP-Pools. And for the record, the VMM server have been upgraded from 2012 SP1.

So what was the reason for this, well when I did the cluster setup I used an IP from the Management-IP pool range for the cluster management and had not reserved it, yes I know I should have taken care of it then but did not…

Consensus is that from UR3 the VMM team has fixed the bug and now it reports this when doing a refresh on the cluster object 😛

So how did i mitigate this issue?! I searched and found a german blogpost by Michel Luescher where he solves the issue with powershell, and as you can see when reading the lines is that we find the IP-address object that is of the wrong type and change it to a HostCluster object instead:

Luckily PowerShell is in english so I could understand that part 😉 as my knowledge in the german language is a bit narrow..

 

 

Get and Set powerplan on Windows Hyper-v 2012 R2 Core

In my work on Hyper-V i have been looking at the performance of the hosts and wanted to both check and also be able to set the powerplan. In this post from Scripting Guys, Ed explains how to use CIM for the action to get and set the Power plans and how much faster that is than using WMI.

I have since Windows Server 2008 R2 tried to have the Core version as a best practice when running Hyper-V and in some cases it requires some extra skills and arguments during deployment and management 😉

The interesting part is that it differs between the full version and core as you can see that when I try to use Get-Cim from a Windows 2012 R2 full it works and I can see the different powerplans and also which one is active:

Screen Shot 2014-12-02 at 11.15.25

but when I try in a Windows Server 2012 R2 Core I get the following error “Provider load failure”, I have tried locally on the core and also remote so no difference there. My knowledge about WMI is a bit limited but a quick search says that it might be some missing or  corrupt files but I have tried 3 different servers installed with core so I would say it is something with missing!

Screen Shot 2014-12-02 at 11.33.01

As I want to be able to both check and set the right power plan centrally I have created two PowerShell functions that utilize the Powercfg.exe command within a invoke-command thus this works in Windows Server 2012 R2 Core. I am using regex for getting the active plan and the guid. The Set-PowerPlan can either use switch arguments or an actual Guid.

Screen Shot 2014-12-02 at 20.26.42

My friend and fellow Hyper-V MVP Didier WorkingHardInIT has made a blog post about live migration and why using “High performance”.

If you have any input or ideas how this could be improved or if you got it to work in core with CIM 🙂

Update 20150108

There is a workaround for this, PowerShell MVP Alexandar Nikolic gave me the link to the connect site which shows the following way to get it to work natively in core by copying the missing files:

# Either copy missing files
dir c:\windows\winsxs -inc wcl.dll,slr100.dll,wclpowrprof.dll -rec -EA 0 |
copy -Dest C:\windows\system32 -verbose

# see http://p0w3rsh3ll.wordpress.com/2014/12/28/fixing-a-wmi-provider-load-failure

Using PowerShell to download Teched Europe 2014 content

I have spent the evening exploring how to create a script to download the content from Teched with powerpoints and videos,

As some of you that follow me on twitter and other social media knows, I will be going to MVP summit in Redmond and the flight leaves early saturday morning and I wanted to be able to get the most important content from Channel 9.

My former colleague Tim has made a GUI session downloader and that is nice, but I wanted one with PowerShell and of course where I could select a category and in my case the CDP is most interesting.

I have borrowed some code to make the folders from Peter Schmidt, but went for the Invoke-RestMethod and also using BITS as the transfer engine.

It is just a simple script but still powerful, I check if the folder is already created and also if the files have been downloaded which means that I do not download the files again when new content has been added 🙂

As you can see on the screendump I use switches for the different choices, so to download two different  you can use -CDP -WIN,

Updated 10 Nov: I have got an tip from Irwin to add info in the BITS transfer so you can see which PPT or Video that is currently downloading and updated the script with that 🙂

Screen Shot 2014-11-10 at 20.50.25

 

The script is also on the Script Gallery at this link and please go in and vote if you like it.

Please also comment if you have ideas of improvement,  I have downloaded only -CDP as that one was my primary object for filling my HDD for the 10 hour flight over the atlantic and as I am a Hyper-V MVP with cloud and datacenter as a main interest 🙂 but you can choose if you want -All or just a couple of the different categories!

Using Azure Automation to check health of Minecraft server in Azure

As every responsible dad out there I have set up an Minecraft server to my daughter so she can play with her friends!

Screen Shot 2014-10-23 at 16.16.59

I  have deployed a Windows Server on Azure in which I installed the Minecraft server with the right mods, apparently that is important 😉 I have not myself got lost in the Minecraft world, maybe because I grew up in the 80´s and had games that was mega-pixel and now I want that high definition graphics!

To see that it is working and alive I wanted some kind health check so here Azure Automation comes into play! Of course there would have been easier ways but I want try new stuff and also test and see how Azure Automation works and can be utilized.

So I created a runbook that checks the status and try to remediate the issue if it is not working:

I have utilised the YAMS so that the Minecraft Server is handled by a Windows Service. If there is some outage or maintenance on Azure the VM can be restarted and then it is good to know that the Minecraft Server will start even if no user is logged in. If for some reason the YAMS service is stopped or the Minecraft Server has stopped my runbook can remidiate that!

In Azure Automation I can schedule a check every 1 hour:

Screen Shot 2014-10-23 at 16.25.24

And as you can see when checking a job it reports that my Minecraft server is working!

Screen Shot 2014-10-23 at 16.45.23

To connect to the VM´s powershell endpoint I have added SessionOption -SkipCACheck thus letting me connect without getting a cert from a trusted certificate authority or importing the servers cert. Saw this option on Tim´s blog post and borrowed it:-)

In the deployed VM I have also done as explained in the PowerShell Tip from powershell.com to be able to connect to it as it is not part of a domain and when PowerShell remoting is enabled it uses Kerberos by default and the Minecraft server is standalone thus Kerberos not working!

Probably I will do some tweaking and update the script later but you can at least see the possibilities and power of using Azure automation!

Live migrating VM´s between clusters in VMM 2012 R2

Today I have been doing some work at a customer creating a Hyper-V 2012 R2 Cluster and starting to live migrate VM´s from their Hyper-V 2012 Cluster.

Doing that from VMM gave me some errors and here is the solution so that if you happens to get into the same problem 🙂

First of all, when added the new cluster to VMM I tried to live migrate a VM but got this error (12700)

Screen Shot 2014-10-17 at 19.30.43

After a quick search on the net I found this blog post explaining the need to configure kerberos live migration and delegation between the hosts and also that the hosts needs an “Host Management Credentials” account set up in the properties! I had already set up the hosts to use Kerberos and delegation between and still got the above error but when checking the Run As account it was empty:

Screen Shot 2014-10-17 at 15.53.45

The problem as you can see though, it is greyed out and cannot be altered, I tried to do add an account through PowerShell and there I got an answer that it had to be set on the cluster,

Screen Shot 2014-10-17 at 21.37.08

checking on the cluster properties in the VMM console there is nowhere to add or see the management credential

Screen Shot 2014-10-17 at 21.32.37

So back to PowerShell again:

 

Screen Shot 2014-10-17 at 21.54.19

And when this is set all the cluster hosts have this credential set and then when doing a Live Migration it succeeded 🙂

 

 

 

 

Download SysCtr Tech Preview VHD´s with PowerShell

Now that the Windows Server Technical Preview and also the System Center Technical Preview have arrived everyone wants to start testing, I have in an earlier post done some initial testing of the new Hyper-V features.

If you want to quickly test the released System Center Tech Preview then use the preinstalled VHD´s that helps you get up and running much faster than installing on your own 🙂

The released System Center Tech Preview roles are

  • System Center Virtual Machine Manager
  • System Center Orchestrator
  • System Center Operations Manager
  • System Center Data Protection Manager
  • System Center Service Manager

I have in earlier post showed how you can download all the VHD´s for System Center 2012 R2 and of course I could not use that script right of the shelf for downloading the tech preview as someone have done changes on the web page, but here is it! And I have also added some more functionality for you to choose which of the roles you want or all.

First of the changes gives for some reason duplicates of each file url from the web page I collect the download url´s I want to download and to get around that I use the superduper cmdlet and parameter Select-Object -Unique which gives me an array with all files just once 😉

Screen Shot 2014-10-12 at 21.24.57

Secondly with Invoke-WebRequest PowerShell uses IE under the hood and I get this dialogue and to get rid of that i use -BasicParsing and that lets PowerShell use its own parser.

Screen Shot 2014-10-12 at 21.15.10

And as you saw in the above screendump I utilize Switch parameters so you can choose which of the roles you want and here you can see the script and copy to your own lab server and start downloading to test!

And by the way, make sure that you either have enough storage available on C: or what drive and folder you want to save it to with the -Dest parameter!!

Observe also that you probably will start the download and go for a walk or sleep as it is quite some data that will be downloaded!

Happy testing!