OK, this blog has been very quiet recently. Due to some work related requirements, I had to pass few Microsoft exams. so I have spent most of my time over the last couple of months on study. Firstly, I passed the MCSE Private Cloud Re-Certification exam, then I passed the 2 Azure exams: 70-532 Developing Microsoft Azure Solutions and 70-533 Implementing Microsoft Azure Infrastructure Solutions. Other than studying and taking exams, I have also been working on a new version of the SharePointSDK PowerShell module during my spare time. I have finished everything on my to-do list for this release last night, and I’ve just published version 2.1.0 on PowerShell Gallery and GitHub:
- PowerShellGallery: https://www.powershellgallery.com/packages/SharePointSDK/2.1.0
- Github: https://github.com/tyconsulting/SharePointSDK_PowerShellModule
This new release includes the following updates:
01. Fixed the “format-default : The collection has not been initialized.” error when retrieving various SharePoint objects.
i.e. When retrieving the SharePoint list in previous versions using Get-SPList function, you will get this error:
This error is fixed in version 2.1.0. now you will get a default view defined in the module:
02. SharePoint client SDK DLLs are now automatically loaded with the module.
I have configured the module manifest to load the SharePoint Client SDK DLLs that are included in the module folder. As the result of this change, the Import-SPClientSDK function is no longer required and has been removed from the module completely.
In the past, the Import-SPClientSDK function will firstly try to load required DLLs from the Global Assembly Cache (GAC) and will only fall back to the DLLs located in the module folder if they don’t exist in GAC. Since the Import-SPClientSDK function has been removed, this behaviour is changed in this release. Starting from this release, the module will not try to load the DLLs from GAC, but ALWAYS use the copies in the module folder.
03. New-SPListLookupField function now supports adding additional lookup columns.
When adding a lookup field in a SharePoint list, you can specify including one or more additional columns. i.e.:
The previous versions of this module did not support adding additional columns when creating a lookup field. In this version, you are able to add additional columns using the “-AdditionalSourceFields” parameter to achieve this goal.
04. Various minor bug fixes
Other than above mentioned updates, this version also included various minor bug fixes.
I’d like to thank my friend and fellow CDM MVP Jakob Gottlieb Svendsen (@JakobGSvendsen) for his feedback. Most of the items updated in this release were results of Jakob’s feedbacks.
If you are a regular visitor of this blog, you may have noticed that this blog has been down since last Thursday, and I’ve only been able to get it back online few hours ago (Monday afternoon my time). The downtime was caused by the server which is hosting my blog. My hoster couldn’t recover the sever, and ended up restored my site from the backup (that they took on 24th April, which was 3 weeks ago).
Due to the hoster’s lack of ability to maintain my site, I have lost 3 weeks of data (2 most recent blog posts, comments, etc.). Only until today after I talked to their technical support people on the phone, I found out that they only backup my site once a week (and the recent backups were corrupted).
Putting my emotion aside, I have managed to find the Windows Live Writer’s drafts for the 2 blog posts that I lost, and I have just re-published them. I made sure the URLs are still the same as the original ones, but you may see them appear in your RSS feeds again (as duplicate feeds). Also, if you have left any comments on my blog over the last 3 weeks, they are probably gone now.
I apologise for any inconvenience this outage may have caused. I am looking into my own WordPress backup solutions now.
Also, my hosting plan is due for renewal in about a month time, I think I’ve got do something about it .
I’m teaming up with Infront Consulting, Australia and will deliver a 4-day in-person instructor-led SCOM 2012 bootcamp at Melbourne, Australia. The content of this bootcamp was developed by Infront Consulting group and it has been very popular internationally.
This bootcamp is designed for SCOM administrators and operators. If you are running SCOM (or planning to implement SCOM) in your environment, I strongly recommend you enrol to this bootcamp and spend 4 days with myself and other folks attending the bootcamp.
Here’s the detail of this training event:
SCOM 2012 Bootcamp – Australia
Date: 20 – 23 June 2016
Saxons Training Facilities Melbourne
500 Collins Street
Melbourne VIC 3000
Please join us for the first Infront Consulting SCOM 2012 Bootcamp in Australia! Tao Yang is a well-known author, speaker, blogger and SCOM expert who will be guiding you in person in the SCOM 2012 R2 Bootcamp.
This four-day Bootcamp is a mix of in-depth instructor led training and hands-on labs where you will learn how to administer System Center Operations Manager 2012. This course will provide students with an understanding of the Operations Manager 2012 Architecture, features and how to administer and maintain Operations Manager 2012.
Cost: $3,600 AUD + GST per student, includes course materials and access to Hands on Labs.
Session 1: Overview of System Center Operations Manager 2012
Session 2: Operations Manager 2012 Architecture
Session 3: Installing Operations Manager 2012
Session 4: Installing the Gateway Server Role
Session 5: Configuring Operations Manager Security
Session 6: Agent Deployment and Configuration
Session 7: Alert Notification and Incident Remediation
Session 8: Management Pack Tuning and Targeting Best Practices
Session 9: Tuning of the Core Microsoft MPs
Session 10: Application Performance Monitoring
Session 11: Network Monitoring in Operations Manager 2012
Session 12: Working in the Operations Manager Shell
Session 13: Building Custom Monitoring Solutions & Distributed Applications
Session 14: Reporting & Dashboards
Session 15: Third Party Extensions
Hope to see you there!
Few days ago, I published a PowerShell Module to be used on Azure Automation Hybrid Workers called HybridWorkerToolkit. You can find my blog article HERE.
Yesterday, my good friend and fellow CDM MVP Daniele Grandini (@DanieleGrandini) gave me some feedback, so I’ve updated the module again and incorporated Daniele’s suggestions.
This is the list of updates in this release:
- A new array parameter for New-HybridWorkerEventEntry called “-AdditionalParameters”. This parameter allows users to insert an array of additional parameters to be added in the event data:
- A new Boolean parameter for New-HybridWorkerEventEntry called “-LogMinimum”. This is an optional parameter with the default value of $false. When this parameter is set to true, other than the user specified messages and additional parameters, only the Azure Automation Job Id will be logged as event data:
As we all know, we pay for the amount of data gets injected into our OMS workspace, this parameter allows you to minimise the size of your events (thus saves money on your OMS spending).
OK, it’s Friday night, I feel like writing something on this blog. But after couple of glasses of wine, and I don’t really want to write anything technical that requires too much brain power. So I picked an easy topic for tonight. I have been using a Creative Sound Blaster Bluetooth Pre-Amp and a lapel microphone to record my in-person community presentations. Based on my experience, the recording quality from that device is very average. Last weekend, after I recorded my presentation at Global Azure Bootcamp, I have decided to ditch it and look for a better solution. Over the last few days, I spent some time looking for a new Bluetooth microphone to replace the sound blaster device.
For those who know me well, I can be seen as a gadget man. I like playing with gadgets. after few days of research, I ended up with a Sony ECM-AW4 Bluetooth microphone from eBay. In order to test it, I connected all required equipment on my Surface Pro 4, and created a dummy presentation on this very same topic (My presentation and recording equipments for Surface 4), then presented using these equipments and recorded it using Camtasia. You can watch the recording on YouTube:
To summarise, I am using the following devices during the presentation:
1. Sony Bluetooth Microphone ECM-AW4 (http://www.sony.com.au/product/ecm-aw4)
Although this device is designed for digital cameras and camcorders, it works with your smart phones and computers. There are some noticeable features:
- range support up to 50 metres
- supports external lapel microphones
- supports headphones – for private communication between the camera man (via the receiver mic) and the person in the camera (via the headphone connected to the Bluetooth mic). this communication is not recorded / passed to the recording device.
- comes with a wind screen to be used to cover the microphone when shooting outside in a windy condition
- comes with an arm band which allows you to attach the mic on your arm.
2. Audio-Technica AT9903 lapel microphone (http://audio-technica.com.au/products/at9903/)
I’m connecting this mic to the Sony Bluetooth mic only because I have already got it. I’ve also tried using the Bluetooth mic without this external lapel mic, the quality is also pretty good.
3. Creative Sound Blaster Play!2 USB Sound Card (http://au.creative.com/p/sound-blaster/sound-blaster-play-2)
I had to purchase this USB sound card for my Surface Pro 4 because the 3.5mm audio jack on my Surface does not support microphones. I also have a Lenovo Yoga Pro 3 ultrabook, unfortunately, it is the same case on the Yoga Pro laptop. So no matter which computer do I use for the presentation, I will have to get a USB sound card. Therefore I bought this one because I have been using Creative Sound Blaster external sound cards for many years (right now I have 2 on my desk for 2 NUCs that I’m using as my day-to-day PCs), and this one is very compact – just like a USB dongle.
4. Logitech R800 Presenter (http://business.logitech.com/en-us/product/professional-presenter-r800-business)
In my opinion, this is a must-have device for all your presentations. It is certainly very popular as I’ve seen many of my MVP friends using the very same device.
5. USB 3 Hub
Because Surface Pro 4 only has one USB port and I need to connect both the presenter receiver and the Bluetooth Microphone Receiver to it, I have to use a USB hub. I’ve got this Inateck USB 3 Hub with GB Ethernet adapter few years ago for my old Surface Pro 2. It’s good that it still works without having to install any drivers on Surface Pro 4 running Windows 10.
So, I know many of my MVP friends present in many user group meetings, not sure if anyone has come up with other solutions for recording these in-person presentations. I’m pretty happy with this setup I came up with. Overall, it’s very compact, I don’t need to carry too many additional devices with me. If you are looking to achieve something similar, I hope you find this post and the YouTube video useful.
On the other hand, the recording quality is not as good as my setup on my desktop (Intel NUC) for webinars, but it can be a topic for another day:
23/04/2016 Update: released version 1.0.3 to GitHub and PowerShell gallery. New additions documented in this blog post.
21/04/2016 Update: updated GitHub and PowerShell gallery and released version 1.0.2 with minor bug fix and updated help file.
Over the last few days, I have been working on a PowerShell module for Azure Automation Hybrid Workers. I named this module HybridWorkerToolkit.
This module is designed to run within either a PowerShell runbook or a PowerShell workflow runbook on Azure Automation Hybrid Workers. It provides few functions that can be called within the runbook. These activities can assist gathering information about Hybrid Workers and the runbook runtime environment. It also provides a function to log structured events to the Hybrid Workers Windows Event Logs.
My good friend and fellow MVP Pete Zerger posted a method he developed to use Windows event logs and OMS as a centralised logging solution for Azure Automation runbooks when executed on Hybrid Workers. Pete was using the PowerShell cmdlet Write-EventLog to log runbook related activities to Windows event log and then these events will be picked up by OMS. Log Analytics. This is a very innovative way of using Windows event logs and OMS. However, the event log entries written by Write-EventLog are not structured are lacking basic information about your environment and the job runtime. Couple of weeks ago, another friend of mine, Mr. Kevin Holman from Microsoft also published a PS script that he used to write to Windows event logs with additional parameters.
So I combined Pete’s idea with Kevin’s script, as well as some code I’ve written in the past for Hybrid Workers, and developed this module.
Why do we want to use Windows Event logs combined with OMS for logging runbook activities on Hybrid workers? As Pete explained on this post, it provides a centralised solution where you can query and retrieve these activity logs for all your runbooks from a single location. Additionally, based on my experience (and also confirmed with few other friends), is that when you use Write-Verbose or Write-Output in your runbook and enabled verbose logging, the runbook execution time can increase significantly, especially when loading a module with a lot of activities. Based on my own experience, I’ve seen a runbook that would normally takes a minute or two to run with verbose logging turned off ended up ran over half an hour after I enabled verbose logging. This is another reason I’ve developed this module so it gives you an alternative option to log verbose, error, process and output messages.
This module provides the following 3 functions:
Note: Although the job runtime are different between PowerShell runbooks and PowerShell Workflow runbooks, I have spent a lot of time together with Pete making sure we can use these activities exactly the same ways between PowerShell and PowerShell workflow runbooks.
This function can be used to get the Hybrid Worker and Microsoft Monitoring Agent configuration. A hash table is returned the following configuration properties retrieved from Hybrid Worker and MMA agent:
- Hybrid Worker Group name
- Automation Account Id
- Machine Id
- Computer Name
- MMA install root
- PowerShell version
- Hybrid Worker version
- System-wide Proxy server address
- MMA version
- MMA Proxy URL
- MMA Proxy user name
- MMA connected OMS workspace Id
This function retrieves the following information about the Azure Automation runbook and the job run time. They are returned in a hashtable:
- Runbook job ID
- Sandbox Id
- Process Id
- Automation Asset End Point
- PSModulePath environment variable
- Current User name
- Log Activity Trace
- Current Working Directory
- Runbook type
- Runbook name
- Azure Automation account name
- Azure Resource Group name
- Azure subscription Id
- Time taken to start runbook in seconds
This function can be used to log event log entries. By default, other than the event message itself, the following information is also logged as part of the event (placed under the <EventData> XML tag:
- Azure Automation Account Name
- Hybrid Worker Group Name
- Azure Automation Account Resource Group Name
- Azure Subscription Id
- Azure Automation Job Id
- Sandbox Id
- Process Id
- Current Working Directory ($PWD)
- Runbook Type
- Runbook Name
- Time Taken To Start Running in Seconds
This function also has an optional Boolean parameter called ‘-LogHybridWorkerConfig’ When this parameter is set to $true, the event created by this function will also contain the following information about the Hybrid Worker and MMA:
- Hybrid Worker Version
- Microsoft Monitoring Agent Version
- Microsoft Monitoring Agent Install Path
- Microsoft Monitoring Agent Proxy URL
- Hybrid Worker server System-wide Proxy server address
- Microsoft OMS Workspace ID
Sample PowerShell Runbook:
Get-HybridWorkerConfiguration | out-file C:\temp\HybridWorkerConfiguration.txt
Get-HybridWorkerJobRuntimeInfo | out-file C:\temp\HybridWorkerJobRuntimeInfo.txt
New-HybridWorkerRunbookLogEntry -Id 886 -Message "This is the first test message logged from hybrid worker within a PowerShell runbook."
New-HybridWorkerRunbookLogEntry -Id 887 -Message "This is the second test message logged from hybrid worker within a PowerShell runbook." -Level Error -LogHybridWorkerConfig $true
Sample PowerShell Workflow Runbook
#Write-Output "Exporting Hybrid Worker config"
Get-HybridWorkerConfiguration | out-file C:\temp\HybridWorkerConfiguration.txt
#Write-Output "Exporting Job Runtime info"
Get-HybridWorkerJobRuntimeInfo | out-file C:\temp\HybridWorkerJobRuntimeInfo.txt
#Write-Output "Logging first event log entry."
New-HybridWorkerRunbookLogEntry -Id 888 -Message "This is the first test message logged from hybrid worker within a PowerShell Workflow runbook."
#Write-Output "Logging second event log entry."
New-HybridWorkerRunbookLogEntry -Id 889 -Message "This is the second test message logged from hybrid worker within a PowerShell Workflow runbook." -Level Warning -LogHybridWorkerConfig $true
As you can see, the way to call these functions between PowerShell and PowerShell Workflow runbooks are exactly the same.
Hybrid Worker Configuration output:
Hybrid Worker Job Runtime Info output:
Event generated (with basic information / without setting –LogHybridWorkerConfig to $true):
Event generated (whensetting –LogHybridWorkerConfig to $true):
Consuming collected events in OMS
Once you have collected these events in OMS, you can use search queries to find them, and you can also create OMS alerts to notify you using your preferred methods.
Searching Events in OMS
i.e. I can use this query to get all events logged by a particular runbook:
Type=Event “RunbookName: Test-HybridWorkerOutput-PSW”
or use this query to get all events for a particular job:
Type=Event “JobId: 73A3827D-73F8-4ECC-9DE1-B9340FB90744”
i.e. if I want to create an OMS alert for any Error events logged by New-HybridWorkerRunbookLogEntry, I can use a query like this one:
Type=Event Source=AzureAutomation?Job* EventLevelName=Error
Download / Deploy this module
I have published this module on Github as well as PowerShell Gallery:
GitHub Repository: https://github.com/tyconsulting/HybridWorkerToolkit
PowerShell Gallery: http://www.powershellgallery.com/packages/HybridWorkerToolkit/1.0.3
Last Saturday, I presented the topic of “What’s New in OMS” at the Global Azure Boot Camp 2016 Melbourne event. I have recorded it using Camtasia and uploaded to YouTube. You can watch it here:
You can also download the slide deck from HERE. When I was editing the recording, I noticed that I might not placed the lapel microphone properly as it was rubbing my collar and you will notice the some noise in the video. Oh well, something to improve next time.
My next webinar with OpsLogix will take place on Wednesday 6th April 2016. In this webinar, I will demonstrate how to configure the OpsLogix VMware management pack, and provide an overview of this MP.
If you are interested in this MP, or looking for a solution for monitoring your VMware infrastructure, please make sure you attend this webinar because there are only limited places available.
You can find more details about this webinar from OpsLogix’s blog: http://www.opslogix.com/opslogix-vmware-mp-overview-with-tao-yang/
The registration is via Eventbrite:
I’m looking forward to seeing you then!