<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Beyond The Corner Office</title>
	<atom:link href="https://beyondthecorneroffice.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://beyondthecorneroffice.com</link>
	<description>A Jonathan Gardner Blog</description>
	<lastBuildDate>Fri, 07 Oct 2016 21:43:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<atom:link rel="search" type="application/opensearchdescription+xml" href="https://beyondthecorneroffice.com/osd.xml" title="Beyond The Corner Office" />
	<atom:link rel='hub' href='https://beyondthecorneroffice.com/?pushpress=hub'/>
	<item>
		<title>My Photographic Journey</title>
		<link>https://beyondthecorneroffice.com/2016/10/07/my-photographic-journey/</link>
		<comments>https://beyondthecorneroffice.com/2016/10/07/my-photographic-journey/#respond</comments>
		<pubDate>Fri, 07 Oct 2016 20:45:06 +0000</pubDate>
		<dc:creator><![CDATA[Jonathan Gardner]]></dc:creator>
				<category><![CDATA[Photography]]></category>

		<guid isPermaLink="false">http://beyondthecorneroffice.com/?p=165124521</guid>
		<description><![CDATA[Corey and I moved to Lafayette from New Orleans in April of last year.  Around the same time I acquired my Sony a6000 have have used it to capture our travels together.  Recently I realized that I have... <a class="read-more" href="https://beyondthecorneroffice.com/2016/10/07/my-photographic-journey/">Read More</a>]]></description>
				<content:encoded><![CDATA[<p>Corey and I moved to Lafayette from New Orleans in April of last year.  Around the same time I acquired my Sony a6000 have have used it to capture our travels together.  Recently I realized that I have done poor job in capturing the world close to home.  I also realized that I have also done a poor job of talking about my photographic journey.</p>
<p><img class=" size-full wp-image-165124551 aligncenter" src="https://jgardner04.files.wordpress.com/2016/10/20161001-lake20martin-022_1-00820-20full-m.jpg?w=960" alt="20161001-lake20martin-022_1-00820-20full-m"   /></p>
<p>This site has been dedicated primarily to my technology posts but I have really be cataloging that through work.  You can find my latest technology posts in the locations below.</p>
<ul>
<li><a href="https://blogs.technet.microsoft.com/msuspartner/category/appdev/">Microsoft US Partner Community Blog</a></li>
<li><a href="https://blogs.technet.microsoft.com/uspartner_learning/category/appdev/">Microsoft US Partner Enablement Blog</a></li>
</ul>
<p>So to that end, the current posts will certainly remain here but future posts will likely be about photographing my journey.  I am looking forward to sharing my journey with you.  If you are interested in following me on photo social media sites, check out the links below.  You can check out my full portfolio through link in the menu above.</p>
<ul>
<li><a href="https://500px.com/jonathangardner04">500px</a></li>
<li><a href="https://www.flickr.com/photos/jonathangardner04/">Flickr</a></li>
<li><a href="https://www.instagram.com/jgardner04/">Instagram</a></li>
</ul><br />Filed under: <a href='https://beyondthecorneroffice.com/category/photography/'>Photography</a> Tagged: <a href='https://beyondthecorneroffice.com/tag/photography/'>Photography</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgardner04.wordpress.com/165124521/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgardner04.wordpress.com/165124521/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgardner04.wordpress.com/165124521/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgardner04.wordpress.com/165124521/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgardner04.wordpress.com/165124521/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgardner04.wordpress.com/165124521/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgardner04.wordpress.com/165124521/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgardner04.wordpress.com/165124521/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgardner04.wordpress.com/165124521/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgardner04.wordpress.com/165124521/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgardner04.wordpress.com/165124521/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgardner04.wordpress.com/165124521/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgardner04.wordpress.com/165124521/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgardner04.wordpress.com/165124521/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=beyondthecorneroffice.com&#038;blog=3994854&#038;post=165124521&#038;subd=jgardner04&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://beyondthecorneroffice.com/2016/10/07/my-photographic-journey/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/4d6023b61245c3eb9f3183b803e900a9?s=96&#38;d=&#38;r=R" medium="image">
			<media:title type="html">jgardner04</media:title>
		</media:content>

		<media:content url="http://jgardner04.files.wordpress.com/2016/10/20161001-lake20martin-022_1-00820-20full-m.jpg" medium="image">
			<media:title type="html">20161001-lake20martin-022_1-00820-20full-m</media:title>
		</media:content>
	</item>
		<item>
		<title>Book Review: The Phoenix Project</title>
		<link>https://beyondthecorneroffice.com/2016/08/10/book-review-the-phoenix-project/</link>
		<comments>https://beyondthecorneroffice.com/2016/08/10/book-review-the-phoenix-project/#respond</comments>
		<pubDate>Wed, 10 Aug 2016 15:00:24 +0000</pubDate>
		<dc:creator><![CDATA[Jonathan Gardner]]></dc:creator>
				<category><![CDATA[Book Review]]></category>
		<category><![CDATA[DevOps]]></category>

		<guid isPermaLink="false">http://beyondthecorneroffice.com/?p=165124385</guid>
		<description><![CDATA[“DevOps is the union of people, process, and products to enable continuous delivery of value to our end users.”]]></description>
				<content:encoded><![CDATA[<p>Earlier this month I attended a DevOps bootcamp event Microsoft hosted in one of our Bellevue offices.  We were able to bring in members of the product group to discuss how Microsoft approaches DevOps internally and how it has contributed to the incredible release pace for Azure feature.  During the ensuing discussion, the book <a href="https://www.amazon.com/dp/B00AZRBLHO/ref=dp-kindle-redirect?_encoding=UTF8&amp;btkr=1">The Phoenix Project</a> was mentioned.  It was not a title I had heard but my interest was piqued so I downloaded it on my Kindle for the flight home.  What I uncovered was a great story about how all of IT, through the use of DevOps, can be a competitive advantage or a business anchor.  The choice of which, is completely up to every organization to decide.</p>
<p>Many of the books that I read about technology take take one of two routes.  The first type is technical and include click here or type this line of code.  The others sell themselves as IT books but are really more about business processes.  I found The Phoenix Project to be closer aligned with the latter but was deeper than most at relating the importance of IT integration in the business.  The authors are able to allow everyone, even non-technical readers to understand the challenges and needs to approach IT with a DevOps mentality.</p>
<blockquote><p>
  “DevOps is the union of people, process, and products to enable continuous delivery of value to our end users.”—Donovan Brown in the book, “DevOps on the Microsoft Stack” (Wouter de Kort, 2016).
</p></blockquote>
<p>While fiction, as someone with 14 years of IT experience under my belt, I could see The Phoenix Project story play out at any number of companies.  The challenges are very relatable and while approached from the IT perspective, it would be remiss for someone outside of IT to dismiss the story.  I don&#8217;t want to spoil any of the details for a potential reader, but approaching IT as if it were a factory allows non-IT personnel to also understand DevOps principles and in my opinion very worth the read.</p>
<p>Are you using DevOps in your organization?  Have you read The Project Project?  I would love to hear your thoughts on how the principles outlined in the book play out in your day to day operations in the comments below.  Don&#8217;t forget to follow me on <a href="https://twitter.com/jgardner04">Twitter</a> and follow the <a href="">Microsoft US Azure Partner Community</a> to stay up to date on the latest about DevOps and the Microsoft cloud.</p><br />Filed under: <a href='https://beyondthecorneroffice.com/category/other/book-review/'>Book Review</a> Tagged: <a href='https://beyondthecorneroffice.com/tag/devops/'>DevOps</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgardner04.wordpress.com/165124385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgardner04.wordpress.com/165124385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgardner04.wordpress.com/165124385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgardner04.wordpress.com/165124385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgardner04.wordpress.com/165124385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgardner04.wordpress.com/165124385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgardner04.wordpress.com/165124385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgardner04.wordpress.com/165124385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgardner04.wordpress.com/165124385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgardner04.wordpress.com/165124385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgardner04.wordpress.com/165124385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgardner04.wordpress.com/165124385/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgardner04.wordpress.com/165124385/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgardner04.wordpress.com/165124385/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=beyondthecorneroffice.com&#038;blog=3994854&#038;post=165124385&#038;subd=jgardner04&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://beyondthecorneroffice.com/2016/08/10/book-review-the-phoenix-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:thumbnail url="https://jgardner04.files.wordpress.com/2016/08/914-sugelzl.jpg" />
		<media:content url="http://jgardner04.files.wordpress.com/2016/08/914-sugelzl.jpg" medium="image">
			<media:title type="html">914-sUgELZL</media:title>
		</media:content>

		<media:content url="http://1.gravatar.com/avatar/4d6023b61245c3eb9f3183b803e900a9?s=96&#38;d=&#38;r=R" medium="image">
			<media:title type="html">jgardner04</media:title>
		</media:content>
	</item>
		<item>
		<title>Advanced VM ARM Template</title>
		<link>https://beyondthecorneroffice.com/2016/07/22/advanced-vm-arm-template/</link>
		<comments>https://beyondthecorneroffice.com/2016/07/22/advanced-vm-arm-template/#comments</comments>
		<pubDate>Fri, 22 Jul 2016 15:00:41 +0000</pubDate>
		<dc:creator><![CDATA[Jonathan Gardner]]></dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[Virtual Machines]]></category>

		<guid isPermaLink="false">http://beyondthecorneroffice.com/?p=165124316</guid>
		<description><![CDATA[Creating multiple domain joined VMs from a custom image.]]></description>
				<content:encoded><![CDATA[<p>As you have seen, I have been doing quite a bit of work with ARM templates and VMs recently.  This post is no different.  I have been working on a project where multiple VMs need to be created from a custom image and they need to be joined to an existing domain.  In this post I will walk through the elements of the ARM template I created.</p>
<p><strong><em>NOTE: This template is not based on any best practices, simply a proof of concept</em></strong></p>
<p>Tl;dr &#8211; Grab the template from my <a href="https://github.com/jgardner04/ARM-Templates/tree/master/domainJoinedCustomImage">GitHub account</a>.</p>
<h1>Creating Multiple Resources</h1>
<p>The power of ARM templates is the ability to create complex environments from a single definition file.  Part of that power comes in the ability to create multiple resources of the same type.  This happens through the use of the <code>copy</code> tag when defining a resource.</p>
<pre class="brush: plain; title: ; notranslate">
copy:{
&quot;name&quot;: &quot;storagecopy&quot;,
&quot;count&quot;: &quot;[parameters('count')]&quot;
}
</pre>
<p>Access to the current iteration can be done through the use of the <code>copyIndex()</code> function.  This provides the flexibility append it to names creating a unique name for each iteration.  An example of this can be seen in the <code>"name":</code> example below.</p>
<pre class="brush: plain; title: ; notranslate">&quot;name&quot;: &quot;[concat(variables('storageAccountName'),copyIndex())]&quot;</pre>
<p># Virtual Machines from a Custom Image</p>
<p>Before we dive into the template it is important to note, at time of writing this, the virtual machine custom image must be in the same storage account as the .vhd that will be deployed with the new Virtual Machines.  It is for this reason that this template creates a &#8220;Transfer VM&#8221; with a custom script extension.  This script uses PowerShell and <a href="https://azure.microsoft.com/en-us/documentation/articles/storage-use-azcopy/">AZCopy</a> to move the image from one storage account to the target storage account.  The gold image can be removed after the VMs are deployed without any issue.  The Transfer VM can also be removed.  This could also be scripted but is not included in the current version of the template.  If you want to take a deeper look at creating a VM in this transfer model you can check out the quick start template on <a href="https://github.com/Azure/azure-quickstart-templates/tree/master/201-vm-custom-image-new-storage-account">GitHub</a></p>
<h1>Networking</h1>
<p>This template also assumes that you already have a virtual network created and takes these as parameters to deploy the new virtual machines to this network.  The public IP addresses and NICs will all be attached to this network.  If you have different network requirements, you will need to make these changes before deployment.  In my demo environment, my domain controller is on the same vnet that the virtual machines will be deployed to.  Because of this, I have set my domain controllers to be the DNS servers and set up external forwarders there.  This ensures that the domain join request are routed to the domain controllers.  In other words, standard networking rules apply as if you were doing this on-prem.</p>
<h1>Domain Join</h1>
<p>The domain join function is performed by a new extension.  Previously it needed to be done through DSC.  I find this to be much smoother.  More information about the extension can be found here on <a href="https://github.com/Azure/azure-quickstart-templates/tree/master/201-vm-domain-join">GitHub</a>.</p>
<h1>The Business</h1>
<p>Now, down to the code.  I know that is what everyone cares to see anyway.  If you want to download directly or make changes/comments, please do so through <a href="https://github.com/jgardner04/ARM-Templates">GitHub</a>.</p>
<pre class="brush: plain; title: ; notranslate">

{
&quot;$schema&quot;: &quot;https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#&quot;,
&quot;contentVersion&quot;: &quot;1.0.0.0&quot;,
&quot;parameters&quot;: {
&quot;storageAccountName&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Prefix name of the storage account to be created&quot;
}
},
&quot;vmCopies&quot;: {
&quot;type&quot;: &quot;int&quot;,
&quot;defaultValue&quot;: 1,
&quot;metadata&quot;: {
&quot;descritpion&quot;: &quot;Number of storage accounts to create&quot;
}
},
&quot;storageAccountType&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;defaultValue&quot;: &quot;Standard_LRS&quot;,
&quot;allowedValues&quot;: [
&quot;Standard_LRS&quot;,
&quot;Standard_GRS&quot;,
&quot;Standard_ZRS&quot;,
&quot;Premium_LRS&quot;
],
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Storage Account type&quot;
}
},
&quot;vmName&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Name prefix for the VMs&quot;
}
},
&quot;adminUserName&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Admin username for the virtual machines&quot;
}
},
&quot;adminPassword&quot;: {
&quot;type&quot;: &quot;securestring&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Admin password for virtual machines&quot;
}
},
&quot;dnsLabelPrefix&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;DNS Name Prefix for Public IP&quot;
}
},
&quot;windowsOSVersion&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;defaultValue&quot;: &quot;2012-R2-Datacenter&quot;,
&quot;allowedValues&quot;: [
&quot;2008-R2-SP1&quot;,
&quot;2012-Datacenter&quot;,
&quot;2012-R2-Datacenter&quot;
],
&quot;metadata&quot;: {
&quot;description&quot;: &quot;The Windows version for the VMs. Allowed values: 2008-R2-SP1, 2012-Datacenter, 2012-R2-Datacenter.&quot;
}
},
&quot;domainToJoin&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;The FQDN of the AD domain&quot;
}
},
&quot;domainUsername&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Username of the account on the domain&quot;
}

},
&quot;ouPath&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;defaultValue&quot;: &quot;&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Specifies an organizational unit (OU) for the domain account. Enter the full distinguished name of the OU in quotation marks. Example: 'OU=testOU; DC=domain; DC=Domain; DC=com&quot;
}
},
&quot;domainJoinOptions&quot;: {
&quot;type&quot;: &quot;int&quot;,
&quot;defaultValue&quot;: 3,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Set of bit flags that define the join options. Default value of 3 is a combination of NETSETUP_JOIN_DOMAIN (0x00000001) &amp; NETSETUP_ACCT_CREATE (0x00000002) i.e. will join the domain and create the account on the domain. For more information see https://msdn.microsoft.com/en-us/library/aa392154(v=vs.85).aspx&quot;
}
},
&quot;existingVirtualNetworkName&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Name of the existing VNET&quot;
}
},
&quot;subnetName&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Name of the existing VNET&quot;
}
},
&quot;existingVirtualNetworkResourceGroup&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Name of the existing VNET Resource Group&quot;
}
},
&quot;transferVmName&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;defaultValue&quot;: &quot;TransferVM&quot;,
&quot;minLength&quot;: 3,
&quot;maxLength&quot;: 15,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Name of the Windows VM that will perform the copy of the VHD from a source storage account to the new storage account created in the new deployment, this is known as transfer vm.&quot;
}
},
&quot;customImageStorageContainer&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Name of storace container for gold image&quot;
}
},
&quot;customImageName&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Name of the VHD to be used as source syspreped/generalized image to deploy the VM. E.g. mybaseimage.vhd.&quot;
}
},
&quot;sourceImageURI&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Full URIs for one or more custom images (VHDs) that should be copied to the deployment storage account to spin up new VMs from them. URLs must be comma separated.&quot;
}
},
&quot;sourceStorageAccountResourceGroup&quot;: {
&quot;type&quot;: &quot;string&quot;,
&quot;metadata&quot;: {
&quot;description&quot;: &quot;Resource group name of the source storage account.&quot;
}
}
},
&quot;variables&quot;: {
&quot;storageAccountName&quot;: &quot;[parameters('storageAccountName')]&quot;,
&quot;imagePublisher&quot;: &quot;MicrosoftWindowsServer&quot;,
&quot;imageOffer&quot;: &quot;WindowsServer&quot;,
&quot;OSDiskName&quot;: &quot;osdiskforwindows&quot;,
&quot;nicName&quot;: &quot;[parameters('vmName')]&quot;,
&quot;addressPrefix&quot;: &quot;10.0.0.0/16&quot;,
&quot;subnetName&quot;: &quot;Subnet&quot;,
&quot;subnetPrefix&quot;: &quot;10.0.0.0/24&quot;,
&quot;publicIPAddressName&quot;: &quot;[parameters('vmName')]&quot;,
&quot;publicIPAddressType&quot;: &quot;Dynamic&quot;,
&quot;vmStorageAccountContainerName&quot;: &quot;vhds&quot;,
&quot;vmSize&quot;: &quot;Standard_D1&quot;,
&quot;windowsOSVersion&quot;: &quot;2012-R2-Datacenter&quot;,
&quot;virtualNetworkName&quot;: &quot;myVNET&quot;,
&quot;vnetID&quot;: &quot;[resourceId(parameters('existingVirtualNetworkResourceGroup'), 'Microsoft.Network/virtualNetworks', parameters('existingVirtualNetworkName'))]&quot;,
&quot;subnetRef&quot;: &quot;[concat(variables('vnetID'),'/subnets/', parameters('subnetName'))]&quot;,
&quot;customScriptFolder&quot;: &quot;CustomScripts&quot;,
&quot;trfCustomScriptFiles&quot;: [
&quot;ImageTransfer.ps1&quot;
],
&quot;sourceStorageAccountName&quot;: &quot;[substring(split(parameters('sourceImageURI'),'.')[0],8)]&quot;
},
&quot;resources&quot;: [
{
&quot;name&quot;: &quot;[concat(variables('storageAccountName'),copyIndex())]&quot;,
&quot;copy&quot;: {
&quot;count&quot;: &quot;[parameters('vmCopies')]&quot;,
&quot;name&quot;: &quot;storagecopy&quot;
},
&quot;type&quot;: &quot;Microsoft.Storage/storageAccounts&quot;,
&quot;location&quot;: &quot;[resourceGroup().location]&quot;,
&quot;sku&quot;: {
&quot;name&quot;: &quot;[parameters('storageAccountType')]&quot;
},
&quot;apiVersion&quot;: &quot;2016-01-01&quot;,
&quot;kind&quot;: &quot;Storage&quot;,
&quot;properties&quot;: {}
},
{
&quot;name&quot;: &quot;[concat(variables('publicIPAddressName'),copyIndex())]&quot;,
&quot;dependsOn&quot;: [
&quot;storagecopy&quot;
],
&quot;apiVersion&quot;: &quot;2016-03-30&quot;,
&quot;copy&quot;: {
&quot;count&quot;: &quot;[parameters('vmCopies')]&quot;,
&quot;name&quot;: &quot;publicipcopy&quot;
},
&quot;type&quot;: &quot;Microsoft.Network/publicIPAddresses&quot;,
&quot;location&quot;: &quot;[resourceGroup().location]&quot;,
&quot;properties&quot;: {
&quot;publicIPAllocationMethod&quot;: &quot;[variables('publicIPAddressType')]&quot;,
&quot;dnsSettings&quot;: {
&quot;domainNameLabel&quot;: &quot;[concat(parameters('dnsLabelPrefix'),copyIndex())]&quot;
}
}
},
{
&quot;name&quot;: &quot;[parameters('transferVmName')]&quot;,
&quot;dependsOn&quot;: [
&quot;storagecopy&quot;
],
&quot;apiVersion&quot;: &quot;2016-03-30&quot;,
&quot;type&quot;: &quot;Microsoft.Network/publicIPAddresses&quot;,
&quot;location&quot;: &quot;[resourceGroup().location]&quot;,
&quot;properties&quot;: {
&quot;publicIPAllocationMethod&quot;: &quot;[variables('publicIPAddressType')]&quot;,
&quot;dnsSettings&quot;: {
&quot;domainNameLabel&quot;: &quot;[concat(parameters('dnsLabelPrefix'),'trans1')]&quot;
}
}
},
{
&quot;apiVersion&quot;: &quot;2016-03-30&quot;,
&quot;copy&quot;: {
&quot;count&quot;: &quot;[parameters('vmCopies')]&quot;,
&quot;name&quot;: &quot;niccopies&quot;
},
&quot;type&quot;: &quot;Microsoft.Network/networkInterfaces&quot;,
&quot;name&quot;: &quot;[concat(variables('nicName'),copyIndex())]&quot;,
&quot;location&quot;: &quot;[resourceGroup().location]&quot;,
&quot;dependsOn&quot;: [
&quot;[concat('Microsoft.Network/publicIPAddresses/',variables('publicIPAddressName'),copyIndex())]&quot;
],
&quot;properties&quot;: {
&quot;ipConfigurations&quot;: [
{
&quot;name&quot;: &quot;ipconfig1&quot;,
&quot;properties&quot;: {
&quot;privateIPAllocationMethod&quot;: &quot;Dynamic&quot;,
&quot;publicIPAddress&quot;: { &quot;id&quot;: &quot;[resourceId('Microsoft.Network/publicIPAddresses',concat(variables('publicIPAddressName'),copyIndex()))]&quot; },
&quot;subnet&quot;: {
&quot;id&quot;: &quot;[variables('subnetRef')]&quot;
}
}
}
]
}
},
{
&quot;apiVersion&quot;: &quot;2016-03-30&quot;,
&quot;type&quot;: &quot;Microsoft.Network/networkInterfaces&quot;,
&quot;name&quot;: &quot;[parameters('transferVmName')]&quot;,
&quot;location&quot;: &quot;[resourceGroup().location]&quot;,
&quot;dependsOn&quot;: [
&quot;[concat('Microsoft.Network/publicIPAddresses/',parameters('transferVmName'))]&quot;
],
&quot;properties&quot;: {
&quot;ipConfigurations&quot;: [
{
&quot;name&quot;: &quot;ipconfig1&quot;,
&quot;properties&quot;: {
&quot;privateIPAllocationMethod&quot;: &quot;Dynamic&quot;,
&quot;publicIPAddress&quot;: {
&quot;id&quot;: &quot;[resourceId('Microsoft.Network/publicIPAddresses',parameters('transferVmName'))]&quot;
},
&quot;subnet&quot;: {
&quot;id&quot;: &quot;[variables('subnetRef')]&quot;
}
}
}
]
}
},

{
&quot;comments&quot;: &quot;# TRANSFER VM&quot;,
&quot;name&quot;: &quot;[parameters('transferVmName')]&quot;,
&quot;type&quot;: &quot;Microsoft.Compute/virtualMachines&quot;,
&quot;location&quot;: &quot;[resourceGroup().location]&quot;,
&quot;apiVersion&quot;: &quot;2015-06-15&quot;,
&quot;dependsOn&quot;: [
&quot;storagecopy&quot;,
&quot;[concat('Microsoft.Network/networkInterfaces/', parameters('transferVmName'))]&quot;
],
&quot;properties&quot;: {
&quot;hardwareProfile&quot;: {
&quot;vmSize&quot;: &quot;[variables('vmSize')]&quot;
},
&quot;osProfile&quot;: {
&quot;computerName&quot;: &quot;[parameters('transferVmName')]&quot;,
&quot;adminUsername&quot;: &quot;[parameters('AdminUsername')]&quot;,
&quot;adminPassword&quot;: &quot;[parameters('adminPassword')]&quot;
},
&quot;storageProfile&quot;: {
&quot;imageReference&quot;: {
&quot;publisher&quot;: &quot;[variables('imagePublisher')]&quot;,
&quot;offer&quot;: &quot;[variables('imageOffer')]&quot;,
&quot;sku&quot;: &quot;[parameters('windowsOSVersion')]&quot;,
&quot;version&quot;: &quot;latest&quot;
},
&quot;osDisk&quot;: {
&quot;name&quot;: &quot;[parameters('transferVmName')]&quot;,
&quot;vhd&quot;: {
&quot;uri&quot;: &quot;[concat('http://', variables('storageAccountName')[0], '.blob.core.windows.net/', variables('vmStorageAccountContainerName'), '/',parameters('transferVmName'),'.vhd')]&quot;
},
&quot;caching&quot;: &quot;ReadWrite&quot;,
&quot;createOption&quot;: &quot;FromImage&quot;
}
},
&quot;networkProfile&quot;: {
&quot;networkInterfaces&quot;: [
{
&quot;id&quot;: &quot;[resourceId('Microsoft.Network/networkInterfaces', parameters('transferVmName'))]&quot;
}
]
}
},
&quot;resources&quot;: [
{
&quot;comments&quot;: &quot;Custom Script that copies VHDs from source storage account to destination storage account&quot;,
&quot;apiVersion&quot;: &quot;2015-06-15&quot;,
&quot;type&quot;: &quot;extensions&quot;,
&quot;name&quot;: &quot;[concat(parameters('transferVmName'),'CustomScriptExtension')]&quot;,
&quot;location&quot;: &quot;[resourceGroup().location]&quot;,
&quot;dependsOn&quot;: [
&quot;[concat('Microsoft.Compute/virtualMachines/', parameters('transferVmName'))]&quot;
],
&quot;properties&quot;: {
&quot;publisher&quot;: &quot;Microsoft.Compute&quot;,
&quot;type&quot;: &quot;CustomScriptExtension&quot;,
&quot;autoUpgradeMinorVersion&quot;: true,
&quot;typeHandlerVersion&quot;: &quot;1.4&quot;,
&quot;settings&quot;: {
&quot;fileUris&quot;: [
&quot;https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/201-vm-custom-image-new-storage-account/ImageTransfer.ps1&quot;
]
},
&quot;protectedSettings&quot;: {
&quot;commandToExecute&quot;: &quot;[concat('powershell -ExecutionPolicy Unrestricted -File ','ImageTransfer.ps1 -SourceImage ',parameters('sourceImageURI'),' -SourceSAKey ', listKeys(resourceId(parameters('sourceStorageAccountResourceGroup'),'Microsoft.Storage/storageAccounts', variables('sourceStorageAccountName')), '2015-06-15').key1, ' -DestinationURI https://', variables('StorageAccountName'), '.blob.core.windows.net/vhds', ' -DestinationSAKey ', listKeys(concat('Microsoft.Storage/storageAccounts/', variables('StorageAccountName')), '2015-06-15').key1)]&quot;
}
}
}
]
},

{
&quot;apiVersion&quot;: &quot;2015-06-15&quot;,
&quot;type&quot;: &quot;Microsoft.Compute/virtualMachines&quot;,
&quot;name&quot;: &quot;[concat(parameters('vmName'),copyIndex())]&quot;,
&quot;copy&quot;: {
&quot;count&quot;: &quot;[parameters('vmCopies')]&quot;,
&quot;name&quot;: &quot;vmcopies&quot;
},
&quot;location&quot;: &quot;[resourceGroup().location]&quot;,
&quot;dependsOn&quot;: [
&quot;[concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName'),copyIndex())]&quot;,
&quot;[concat('Microsoft.Network/networkInterfaces/', variables('nicName'),copyIndex())]&quot;,
&quot;[concat('Microsoft.Compute/virtualMachines/', parameters('transferVmName'),'/extensions/',parameters('transferVmName'),'CustomScriptExtension')]&quot;
],
&quot;properties&quot;: {
&quot;hardwareProfile&quot;: {
&quot;vmSize&quot;: &quot;[variables('vmSize')]&quot;
},
&quot;osProfile&quot;: {
&quot;computerName&quot;: &quot;[concat(parameters('vmName'),copyIndex())]&quot;,
&quot;adminUsername&quot;: &quot;[parameters('adminUsername')]&quot;,
&quot;adminPassword&quot;: &quot;[parameters('adminPassword')]&quot;
},
&quot;storageProfile&quot;: {
&quot;osDisk&quot;: {
&quot;name&quot;: &quot;[concat(parameters('vmName'),copyIndex(),'-osdisk')]&quot;,
&quot;osType&quot;: &quot;windows&quot;,
&quot;createOption&quot;: &quot;FromImage&quot;,
&quot;caching&quot;: &quot;ReadWrite&quot;,
&quot;image&quot;: {
&quot;uri&quot;: &quot;[concat('http://', variables('StorageAccountName'), copyIndex(), '.blob.core.windows.net/',variables('vmStorageAccountContainerName'),'/Microsoft.Compute/Images/',parameters('customImageStorageContainer'),'/',parameters('customImageName'))]&quot;
},
&quot;vhd&quot;: {
&quot;uri&quot;: &quot;[concat('http://', variables('StorageAccountName'), copyIndex(), '.blob.core.windows.net/',variables('vmStorageAccountContainerName'),'/',parameters('vmName'),copyIndex(),'-osdisk.vhd')]&quot;
}
}
},
&quot;networkProfile&quot;: {
&quot;networkInterfaces&quot;: [
{
&quot;id&quot;: &quot;[resourceId('Microsoft.Network/networkInterfaces',concat(variables('nicName'),copyIndex()))]&quot;
}
]
},
&quot;diagnosticsProfile&quot;: {
&quot;bootDiagnostics&quot;: {
&quot;enabled&quot;: &quot;true&quot;,
&quot;storageUri&quot;: &quot;[concat('http://',variables('storageAccountName'),'.blob.core.windows.net')]&quot;
}
}
}
},
{
&quot;apiVersion&quot;: &quot;2015-06-15&quot;,
&quot;type&quot;: &quot;Microsoft.Compute/virtualMachines/extensions&quot;,
&quot;name&quot;: &quot;[concat(parameters('vmName'),copyIndex(),'/joindomain')]&quot;,
&quot;copy&quot;: {
&quot;count&quot;: &quot;[parameters('vmCopies')]&quot;,
&quot;name&quot;: &quot;domainextension&quot;
},
&quot;location&quot;: &quot;[resourceGroup().location]&quot;,
&quot;dependsOn&quot;: [
&quot;[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'),copyIndex())]&quot;
],
&quot;properties&quot;: {
&quot;publisher&quot;: &quot;Microsoft.Compute&quot;,
&quot;type&quot;: &quot;JsonADDomainExtension&quot;,
&quot;typeHandlerVersion&quot;: &quot;1.3&quot;,
&quot;autoUpgradeMinorVersion&quot;: true,
&quot;settings&quot;: {
&quot;Name&quot;: &quot;[parameters('domainToJoin')]&quot;,
&quot;OUPath&quot;: &quot;[parameters('ouPath')]&quot;,
&quot;User&quot;: &quot;[concat(parameters('domainToJoin'), '\\', parameters('adminUserName'))]&quot;,
&quot;Restart&quot;: &quot;true&quot;,
&quot;Options&quot;: &quot;[parameters('domainJoinOptions')]&quot;
},
&quot;protectedsettings&quot;: {
&quot;Password&quot;: &quot;[parameters('adminPassword')]&quot;
}
}
}
]
}

</pre>
<p>Are you using Azure Resource Manager Templates?  If so, we would love to hear about how you are using them in the comments below.  If you like this content and want to know how I work with Microsoft Partners, please check out the <a href="https://blogs.technet.microsoft.com/msuspartner/category/azure-partners/">US Partner Community Blog</a> for some of my other posts.  Don&#8217;t forget to follow me on <a href="https://twitter.com/jgardner04">Twitter</a>.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p><br />Filed under: <a href='https://beyondthecorneroffice.com/category/tech/cloud/azure/'>Azure</a> Tagged: <a href='https://beyondthecorneroffice.com/tag/arm/'>ARM</a>, <a href='https://beyondthecorneroffice.com/tag/azure/'>Azure</a>, <a href='https://beyondthecorneroffice.com/tag/featured/'>Featured</a>, <a href='https://beyondthecorneroffice.com/tag/virtual-machines/'>Virtual Machines</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgardner04.wordpress.com/165124316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgardner04.wordpress.com/165124316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgardner04.wordpress.com/165124316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgardner04.wordpress.com/165124316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgardner04.wordpress.com/165124316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgardner04.wordpress.com/165124316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgardner04.wordpress.com/165124316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgardner04.wordpress.com/165124316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgardner04.wordpress.com/165124316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgardner04.wordpress.com/165124316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgardner04.wordpress.com/165124316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgardner04.wordpress.com/165124316/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgardner04.wordpress.com/165124316/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgardner04.wordpress.com/165124316/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=beyondthecorneroffice.com&#038;blog=3994854&#038;post=165124316&#038;subd=jgardner04&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://beyondthecorneroffice.com/2016/07/22/advanced-vm-arm-template/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:thumbnail url="https://jgardner04.files.wordpress.com/2016/07/adobestock_61327476.jpg" />
		<media:content url="http://jgardner04.files.wordpress.com/2016/07/adobestock_61327476.jpg" medium="image">
			<media:title type="html">AdobeStock_61327476</media:title>
		</media:content>

		<media:content url="http://1.gravatar.com/avatar/4d6023b61245c3eb9f3183b803e900a9?s=96&#38;d=&#38;r=R" medium="image">
			<media:title type="html">jgardner04</media:title>
		</media:content>
	</item>
		<item>
		<title>Azure PaaS Services: Narrowing Focus</title>
		<link>https://beyondthecorneroffice.com/2016/05/18/azure-paas-services-narrowing-focus/</link>
		<comments>https://beyondthecorneroffice.com/2016/05/18/azure-paas-services-narrowing-focus/#respond</comments>
		<pubDate>Wed, 18 May 2016 15:00:22 +0000</pubDate>
		<dc:creator><![CDATA[Jonathan Gardner]]></dc:creator>
				<category><![CDATA[Azure]]></category>

		<guid isPermaLink="false">http://beyondthecorneroffice.com/?p=165124278</guid>
		<description><![CDATA[Because Azure is a platform and it is not possible to be an "expert" in all of Azure, Microsoft leadership recognized the need to focus the PTS on a narrow workload to better serve partners.  I will be focusing on the PaaS side of Azure going forward.]]></description>
				<content:encoded><![CDATA[<p>When I started at Microsoft 18 months ago, I joined the National Partner Technology Strategist team focusing on the Azure Platform.  In my role as a National Partner Technology Strategist I was focused on three main areas with a national coverage responsibility: community, readiness, and practice development.  Because Azure is a platform and it is not possible to be an &#8220;expert&#8221; in all of Azure, Microsoft leadership recognized the need to focus the PTS on a narrow workload to better serve partners.</p>
<p>Microsoft made some organizational changed and consolidated all PTS resources into a single organization and then into Enablement Team Units.  These units are then further narrowed into workload specialization.  It is in this unit that I will be focusing my efforts with partners on Azure PaaS Services.  While Platform as a Service could cover almost everything on Azure, many are split under other workload areas.  My focus will be on: Logic Apps, Service Fabric, Cloud Services, Web Apps, API Apps, and Redis Cache.  There are also many underlying things that will also be important with these workloads including DevOps, Application Lifecycle Management, Containerization, Desired State Configuration, and more.</p>
<p>While I am sure that my passion for data and reporting will continue to endure, the focus of postings on this blog will likely reflect the time I am spending in these areas.  Is there anything in particular that you would like to see me cover about the topics above?  Let me know in the comments below.  If you like the content of this blog, follow me on <a href="http://twitter.com/jgardner04">Twitter</a> where I share and discuss lots of similar content.</p><br />Filed under: <a href='https://beyondthecorneroffice.com/category/tech/cloud/azure/'>Azure</a> Tagged: <a href='https://beyondthecorneroffice.com/tag/azure/'>Azure</a>, <a href='https://beyondthecorneroffice.com/tag/featured/'>Featured</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgardner04.wordpress.com/165124278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgardner04.wordpress.com/165124278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgardner04.wordpress.com/165124278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgardner04.wordpress.com/165124278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgardner04.wordpress.com/165124278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgardner04.wordpress.com/165124278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgardner04.wordpress.com/165124278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgardner04.wordpress.com/165124278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgardner04.wordpress.com/165124278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgardner04.wordpress.com/165124278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgardner04.wordpress.com/165124278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgardner04.wordpress.com/165124278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgardner04.wordpress.com/165124278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgardner04.wordpress.com/165124278/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=beyondthecorneroffice.com&#038;blog=3994854&#038;post=165124278&#038;subd=jgardner04&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://beyondthecorneroffice.com/2016/05/18/azure-paas-services-narrowing-focus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:thumbnail url="https://jgardner04.files.wordpress.com/2016/05/adobestock_61126770.jpg" />
		<media:content url="http://jgardner04.files.wordpress.com/2016/05/adobestock_61126770.jpg" medium="image">
			<media:title type="html">AdobeStock_61126770</media:title>
		</media:content>

		<media:content url="http://1.gravatar.com/avatar/4d6023b61245c3eb9f3183b803e900a9?s=96&#38;d=&#38;r=R" medium="image">
			<media:title type="html">jgardner04</media:title>
		</media:content>
	</item>
		<item>
		<title>Azure Resource Manager Templates and Custom Script Extensions</title>
		<link>https://beyondthecorneroffice.com/2016/04/26/azure-resource-manager-templates-and-custom-script-extensions/</link>
		<comments>https://beyondthecorneroffice.com/2016/04/26/azure-resource-manager-templates-and-custom-script-extensions/#respond</comments>
		<pubDate>Tue, 26 Apr 2016 18:00:06 +0000</pubDate>
		<dc:creator><![CDATA[Jonathan Gardner]]></dc:creator>
				<category><![CDATA[Azure]]></category>

		<guid isPermaLink="false">http://beyondthecorneroffice.com/?p=165124214</guid>
		<description><![CDATA[Use Azure Resource Manager Custom Script Extensions to customize virtual machine deployment.]]></description>
				<content:encoded><![CDATA[<p>In my previous article, <a href="https://beyondthecorneroffice.com/2016/04/14/building-azure-resource-manager-templates">Building Azure Resource Manager Templates</a> , I covered how to get started with Azure Resource Manager templates.  While they are certainly great for basic deployments, where they really shine is in their ability to allow for complex deployments.  This post will cover the Custom Script Extension and how they can be used to configure Virtual Machines during the deployment process.</p>
<p><strong><em>Note: This article makes the assumption that you are familiar with the Azure portal and Visual Studio.  I am not writing a full step-by-step article.  While I will outline all of the things that need to happen, I am not doing a “click here” walk-through.</em></strong></p>
<h1>The Setup</h1>
<p>When I was working on my ARM Template to deploy <a href="http://bit.ly/24fuwpT">SQL Server 2016 with the AdventureWorks sample databases installed</a>, I needed a way to configure the virtual machine once it was installed.  This is done using the Custom Script for Windows Extension.  It is dependent upon the creation of the virtual machine, as can be seen from the image below and requires that the virtual machine be created before adding the extension.</p>
<p><img class=" size-full wp-image-165124231 aligncenter" src="https://jgardner04.files.wordpress.com/2016/04/customscriptextension.png?w=960" alt="CustomScriptExtension"   /></p>
<h1>The Business</h1>
<p>After adding the Custom Script Extension, a resource is added to the virtual machine in the ARM template with they type &#8220;extensions&#8221;.  The code can be seen below.  It shows up as nested in the JSON Outline window.  It also creates a customScripts folder in the solution.  In the case of a Windows extension this file is a PowerShell or .ps1 file.</p>
<pre class="brush: plain; title: ; notranslate">
{
name: test,
type: extensions,
location: [resourceGroup().location],
apiVersion: 2015-06-15,
dependsOn: [
[concat('Microsoft.Compute/virtualMachines/', parameters('Sql2016Ctp3DemoName'))]
],
tags: {
displayName: test
},
properties: {
publisher: Microsoft.Compute,
type: CustomScriptExtension,
typeHandlerVersion: 1.4,
autoUpgradeMinorVersion: true,
settings: {
fileUris: [
[concat(parameters('_artifactsLocation'), '/', variables('testScriptFilePath'), parameters('_artifactsLocationSasToken'))]
],
commandToExecute: [concat('powershell -ExecutionPolicy Unrestricted -File ', variables('testScriptFilePath'))]
}
}
}
</pre>
<p>From the custom script, I can perform a host of different actions based on PowerShell.  The code below performs a number of actions.  It creates a folder structure, downloads files, creates and executes a PowerShell function to extract the zip files, moves files, executes T-SQL, and opens firewall ports.</p>
<pre class="brush: powershell; title: ; notranslate">
# DeploySqlAw2016.ps1
#
# Parameters

# Variables
$targetDirectory = &amp;quot;C:\SQL2016Demo&amp;quot;
$adventrueWorks2016DownloadLocation = &amp;quot;https://sql2016demoaddeploy.blob.core.windows.net/adventureworks2016/AdventureWorks2016CTP3.zip&amp;quot;

# Create Folder Structure
if(!(Test-Path -Path $targetDirectory)){
	New-Item -ItemType Directory -Force -Path $targetDirectory
	}
if(!(Test-Path -Path $targetDirectory\adventureWorks2016CTP3)){
	New-Item -ItemType Directory -Force -Path $targetDirectory\adventureWorks2016CTP3
	}
# Download the SQL Server 2016 CTP 3.3 AdventureWorks database files.
Set-Location $targetDirectory
Invoke-WebRequest -Uri $adventrueWorks2016DownloadLocation -OutFile $targetDirectory\AdventureWorks2016CTP3.zip

# Create a function to expand zip files
function Expand-ZIPFile($file, $destination)
{
$shell = new-object -com shell.application
$zip = $shell.NameSpace($file)
foreach($item in $zip.items())
{
$shell.Namespace($destination).copyhere($item)
}
}

# Expand the downloaded files
Expand-ZIPFile -file $targetDirectory\AdventureWorks2016CTP3.zip -destination $targetDirectory\adventureWorks2016CTP3
Expand-ZIPFile -file $targetDirectory\adventureWorks2016CTP3\SQLServer2016CTP3Samples.zip -destination $targetDirectory\adventureWorks2016CTP3

# Copy backup files to Default SQL Backup Folder
Copy-Item -Path $targetDirectory\AdventureWorks2016CTP3\*.bak -Destination &amp;quot;C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup&amp;quot;

# Restore SQL Backups for AdventureWorks and AdventrueWorksDW
Import-Module SQLPS -DisableNameChecking
cd \sql\localhost\

Invoke-Sqlcmd -Query &amp;quot;USE [master]
RESTORE DATABASE [AdventureWorks2016CTP3] FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\AdventureWorks2016CTP3.bak' WITH  FILE = 1,  MOVE N'AdventureWorks2016CTP3_Data' TO N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\AdventureWorks2016CTP3_Data.mdf',  MOVE N'AdventureWorks2016CTP3_Log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\AdventureWorks2016CTP3_Log.ldf',  MOVE N'AdventureWorks2016CTP3_mod' TO N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\AdventureWorks2016CTP3_mod',  NOUNLOAD,  REPLACE,  STATS = 5

GO&amp;quot; -ServerInstance LOCALHOST -QueryTimeout 0

Invoke-Sqlcmd -Query &amp;quot;USE [master]
	RESTORE DATABASE [AdventureworksDW2016CTP3] FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\AdventureWorksDW2016CTP3.bak' WITH  FILE = 1,  MOVE N'AdventureWorksDW2014_Data' TO N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\AdventureWorksDW2016CTP3_Data.mdf',  MOVE N'AdventureWorksDW2014_Log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\AdventureWorksDW2016CTP3_Log.ldf',  NOUNLOAD,  REPLACE,  STATS = 5

	GO&amp;quot; -ServerInstance LOCALHOST -QueryTimeout 0

# Firewall Rules
#Enabling SQL Server Ports
New-NetFirewallRule -DisplayName “SQL Server” -Direction Inbound –Protocol TCP –LocalPort 1433 -Action allow
New-NetFirewallRule -DisplayName “SQL Admin Connection” -Direction Inbound –Protocol TCP –LocalPort 1434 -Action allow
New-NetFirewallRule -DisplayName “SQL Database Management” -Direction Inbound –Protocol UDP –LocalPort 1434 -Action allow
New-NetFirewallRule -DisplayName “SQL Service Broker” -Direction Inbound –Protocol TCP –LocalPort 4022 -Action allow
New-NetFirewallRule -DisplayName “SQL Debugger/RPC” -Direction Inbound –Protocol TCP –LocalPort 135 -Action allow
#Enabling SQL Analysis Ports
New-NetFirewallRule -DisplayName “SQL Analysis Services” -Direction Inbound –Protocol TCP –LocalPort 2383 -Action allow
New-NetFirewallRule -DisplayName “SQL Browser” -Direction Inbound –Protocol TCP –LocalPort 2382 -Action allow
#Enabling Misc. Applications
New-NetFirewallRule -DisplayName “HTTP” -Direction Inbound –Protocol TCP –LocalPort 80 -Action allow
New-NetFirewallRule -DisplayName “SSL” -Direction Inbound –Protocol TCP –LocalPort 443 -Action allow
New-NetFirewallRule -DisplayName “SQL Server Browse Button Service” -Direction Inbound –Protocol UDP –LocalPort 1433 -Action allow
#Enable Windows Firewall
Set-NetFirewallProfile -DefaultInboundAction Block -DefaultOutboundAction Allow -NotifyOnListen True -AllowUnicastResponseToMulticast True
</pre>
<p>By default the custom script is located in the solution but it does not have to be.  In the code example below, I actually call the script from GitHub.  Note the fileUris: link.</p>
<pre class="brush: plain; title: ; notranslate">
resources: [
{
name: deploySql2016Ctp3,
type: extensions,
location: [resourceGroup().location],
apiVersion: 2015-06-15,
dependsOn: [
[concat('Microsoft.Compute/virtualMachines/', parameters('Sql2016Ctp3DemoName'))]
],
tags: {
displayName: deploySql2016Ctp3
},
properties: {
publisher: Microsoft.Compute,
type: CustomScriptExtension,
typeHandlerVersion: 1.4,
autoUpgradeMinorVersion: true,
settings: {
fileUris: [
https://raw.githubusercontent.com/jgardner04/Sql2016Ctp3Demo/master/Sql2016Ctp3Demo/CustomScripts/deploySql2016Ctp3.ps1
],
commandToExecute: powershell.exe -ExecutionPolicy Unrestricted -File deploySql2016Ctp3.ps1
}
}
}
]
</pre>
<p>With this post we showed how we can create a virtual machine and customize it through the use of Azure Resource Manager templates.  In future posts we will explore how to expand the use of Azure Resource Manager templates to create complex services that include multiple Azure Resources and services.  Are you using Azure Resource Manager templates in your environment?  We would love to hear about it in the comments below.</p>
<p>If you like the content on my blog, I also blog on the <a href="http://bit.ly/1XneJkJ">US Azure</a> and <a href="http://bit.ly/1XneS7L">Data Analytics</a> Partner Blogs.  I encourage you to check those out for more great resources. Also don&#8217;t forget to follow me on <a href="http://bit.ly/1NBHu7O">Twitter</a> as much of what I talk about is related to Azure.</p><br />Filed under: <a href='https://beyondthecorneroffice.com/category/tech/cloud/azure/'>Azure</a> Tagged: <a href='https://beyondthecorneroffice.com/tag/azure/'>Azure</a>, <a href='https://beyondthecorneroffice.com/tag/featured/'>Featured</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgardner04.wordpress.com/165124214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgardner04.wordpress.com/165124214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgardner04.wordpress.com/165124214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgardner04.wordpress.com/165124214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgardner04.wordpress.com/165124214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgardner04.wordpress.com/165124214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgardner04.wordpress.com/165124214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgardner04.wordpress.com/165124214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgardner04.wordpress.com/165124214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgardner04.wordpress.com/165124214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgardner04.wordpress.com/165124214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgardner04.wordpress.com/165124214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgardner04.wordpress.com/165124214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgardner04.wordpress.com/165124214/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=beyondthecorneroffice.com&#038;blog=3994854&#038;post=165124214&#038;subd=jgardner04&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://beyondthecorneroffice.com/2016/04/26/azure-resource-manager-templates-and-custom-script-extensions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:thumbnail url="https://jgardner04.files.wordpress.com/2016/04/buildingblocks.jpg" />
		<media:content url="http://jgardner04.files.wordpress.com/2016/04/buildingblocks.jpg" medium="image">
			<media:title type="html">BuildingBlocks</media:title>
		</media:content>

		<media:content url="http://1.gravatar.com/avatar/4d6023b61245c3eb9f3183b803e900a9?s=96&#38;d=&#38;r=R" medium="image">
			<media:title type="html">jgardner04</media:title>
		</media:content>

		<media:content url="http://jgardner04.files.wordpress.com/2016/04/customscriptextension.png" medium="image">
			<media:title type="html">CustomScriptExtension</media:title>
		</media:content>
	</item>
		<item>
		<title>Shutdown tagged VMs with Azure Automation</title>
		<link>https://beyondthecorneroffice.com/2016/04/21/shutdown-tagged-vms-with-azure-automation/</link>
		<comments>https://beyondthecorneroffice.com/2016/04/21/shutdown-tagged-vms-with-azure-automation/#respond</comments>
		<pubDate>Thu, 21 Apr 2016 18:00:17 +0000</pubDate>
		<dc:creator><![CDATA[Jonathan Gardner]]></dc:creator>
				<category><![CDATA[Azure]]></category>

		<guid isPermaLink="false">http://beyondthecorneroffice.com/?p=165124128</guid>
		<description><![CDATA[ In this post I will use tags in conjunction with Azure Automation to shutdown virtual machines at the end of the day.]]></description>
				<content:encoded><![CDATA[<p>In my previous post <a href="https://beyondthecorneroffice.com/2016/04/19/adding-tags-to-resources-in-azure">PowerShell to update the tags on resources</a>, I added tags to the virtual machines in my subscription.  There are a host of reasons why resources may be tagged in Azure.  I have seen customers use them to identify the department or application resources belong to.  I have seen partners use tags for billing by tagging resources by customers.  The use varies but as a huge fan of automation I am going to use them to automate tasks against my virtual machines.  In this post I will use tags in conjunction with Azure Automation to shutdown virtual machines at the end of the day.</p>
<p><strong><em>Note: This article makes the assumption that you are familiar with the Azure portal.  I am not writing a full step-by-step article.  While I will outline all of the things that need to happen, I am not doing a “click here” walk-through.  I also am not going to cover the movement of the file from one blob to another, I will do that in a separate post.</em></strong></p>
<h1>The Setup</h1>
<p>There are a lot of templates that can be used for controlling VMs in the Azure Automation gallery but for me it was not that simple.  The preferred method of security using Azure Automation is to use <a href="http://bit.ly/1NBB74b">RBAC</a>.  The problem, for me, is that to get Azure Automation working with RBAC you need to be able to add that resource to Azure Active Directory and then to the Azure Subscription as a Co-Administrator.  All of that works well if you own the Azure Subscription or can get a user added.  In my case, I do not and cannot have that done with the way they are configured at internally at Microsoft.</p>
<p>In my previous post about using <a href="https://beyondthecorneroffice.com/2016/04/12/azure-automation-my-sql-agent-in-the-cloud/">Azure Automation, my SQL Agent in the Cloud</a> I created an Azure Automation RunAs account when I created my Azure Automation Account.  I will use this account to perform automation actions.</p>
<h1>Setting up the Azure RunAs Account</h1>
<p>In an effort to practice what I preach, I am going to link out this portion of the post in an effort not to recreate the wheel.  Checkout the documentation for how to <a href="http://bit.ly/1SURlK8">Authenticate Runbooks with Azure Run As Account</a>.  I actually made some corrections on this documentation for the Azure team in <a href="https://github.com/Azure/azure-content">GitHub</a> in preparation for this article and getting it to flow smoothly.</p>
<p>Once the <span class="pln">New</span><span class="pun">&#8211;</span><span class="typ">AzureServicePrincipal</span><span class="pun">.</span><span class="pln">ps1 file has been run two Azure Automation Assets will have been created.  A Certificate and Connection, both will be used in the code to shut down tagged VMs.</span></p>
<h1>The Business</h1>
<p>First create the assets necessary to automate the subscription.  The first is a schedule.  This scrip will run daily.  The second asset to create is a variable with the subscription name in it.  The subscription name is called when calling the <em>Get-AzureRmSubscription</em> command.  The final piece is to actually create the runbook.  Create a blank PowerShell runbook with the following code in it.</p>
<pre class="brush: powershell; title: ; notranslate">
$currentTime = (Get-Date).ToUniversalTime()
Write-Output &amp;amp;quot;Runbook started.&amp;amp;quot;

# Establish Connection
$Conn = Get-AutomationConnection -Name 'AzureRunAsConnection'
Add-AzureRMAccount -ServicePrincipal `
-Tenant $Conn.TenantID `
-ApplicationId $Conn.ApplicationID `
-CertificateThumbprint $Conn.CertificateThumbprint

$subName = Get-AutomationVariable -Name 'Subscription'
Get-AzureRmSubscription -SubscriptionName $subName

# Get a list of all tagged VMs in the Subscripiton that are running
$resourceManagerVMList = @(Get-AzureRmResource | `
where {$_.ResourceType -like &amp;amp;quot;Microsoft.*/virtualMachines&amp;amp;quot;} | `
where {$_.Tags.Count -gt 0 `
-and $_.Tags.Name `
-contains &amp;amp;quot;AutoShutdownSchedule&amp;amp;quot;} | `
sort Name)
Write-Output &amp;amp;quot;Found [$($resourceManagerVMList.Count)] tagged VMs in the subscription&amp;amp;quot;

#Shutdown any running VMs
foreach($vm in $resourceManagerVMList)
{
$resourceManagerVM = Get-AzureRmVM -ResourceGroupName `
$vm.ResourceGroupName `
-Name $vm.Name `
-Status
foreach($vmStatus in $resourceManagerVM.Statuses)
{
if($vmStatus.Code.CompareTo(&amp;amp;quot;PowerState/running&amp;amp;quot;) -eq 0)
{
$resourceManagerVM | `
Stop-AzureRmVm -Force
Write-Output $vm.Name was Shutdown
}
}
}

Write-Output &amp;amp;quot;Runbook finished (Duration: $((&amp;amp;quot;{0:hh\:mm\:ss}&amp;amp;quot; -f ((Get-Date).ToUniversalTime() - $currentTime))))&amp;amp;quot;
</pre>
<p>This code assumes that the only VMs in the account are running in the v2 or Azure Resource Manager type.  If you are dealing with a mixed environment, additional code will need to be written to shut down those VMs.</p>
<p>While this is designed to shut down my VMs at the end of the day, there are some exciting new features on the horizon to help with this as well.  Some of these power scheduling features will come standard in the new <a href="http://bit.ly/1NBHg0e">DevTest Labs</a> service in Azure.</p>
<p>Are you using Azure Automation in your environment today?  I would love to hear about it in the comments below.  If you like the content on my blog, I also blog on the <a href="http://bit.ly/1XneJkJ">US Azure</a> and <a href="http://bit.ly/1XneS7L">Data Analytics</a> Partner Blogs.  I encourage you to check those out for more great resources. Also don&#8217;t forget to follow me on <a href="http://bit.ly/1NBHu7O">Twitter</a> as much of what I talk about is related to Azure.</p><br />Filed under: <a href='https://beyondthecorneroffice.com/category/tech/cloud/azure/'>Azure</a> Tagged: <a href='https://beyondthecorneroffice.com/tag/azure/'>Azure</a>, <a href='https://beyondthecorneroffice.com/tag/featured/'>Featured</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgardner04.wordpress.com/165124128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgardner04.wordpress.com/165124128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgardner04.wordpress.com/165124128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgardner04.wordpress.com/165124128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgardner04.wordpress.com/165124128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgardner04.wordpress.com/165124128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgardner04.wordpress.com/165124128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgardner04.wordpress.com/165124128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgardner04.wordpress.com/165124128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgardner04.wordpress.com/165124128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgardner04.wordpress.com/165124128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgardner04.wordpress.com/165124128/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgardner04.wordpress.com/165124128/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgardner04.wordpress.com/165124128/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=beyondthecorneroffice.com&#038;blog=3994854&#038;post=165124128&#038;subd=jgardner04&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://beyondthecorneroffice.com/2016/04/21/shutdown-tagged-vms-with-azure-automation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:thumbnail url="https://jgardner04.files.wordpress.com/2016/04/adobestock_97576601.jpg" />
		<media:content url="http://jgardner04.files.wordpress.com/2016/04/adobestock_97576601.jpg" medium="image">
			<media:title type="html">AdobeStock_97576601</media:title>
		</media:content>

		<media:content url="http://1.gravatar.com/avatar/4d6023b61245c3eb9f3183b803e900a9?s=96&#38;d=&#38;r=R" medium="image">
			<media:title type="html">jgardner04</media:title>
		</media:content>
	</item>
		<item>
		<title>Adding Tags to Resources in Azure</title>
		<link>https://beyondthecorneroffice.com/2016/04/19/adding-tags-to-resources-in-azure/</link>
		<comments>https://beyondthecorneroffice.com/2016/04/19/adding-tags-to-resources-in-azure/#respond</comments>
		<pubDate>Tue, 19 Apr 2016 12:18:44 +0000</pubDate>
		<dc:creator><![CDATA[Jonathan Gardner]]></dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[PowerShell]]></category>

		<guid isPermaLink="false">http://beyondthecorneroffice.com/?p=165124022</guid>
		<description><![CDATA[In this post I will walk through setting up tags for virtual machines in Azure with PowerShell.]]></description>
				<content:encoded><![CDATA[<p>I am always looking for ways to automate my Azure environment.  I use Azure as a Demo and Testing environment and do not want it running 24/7 and shutting off each virtual machine at the end of a day is time consuming.  I want to have Azure Automation do that for me.  I am working on a post to show just how to do that but the first step was to set a tag on the virtual machines that I wanted to shut down.  In this post I will walk through setting up tags for virtual machines in Azure with PowerShell.</p>
<p>Organizing my resources by <a href="http://bit.ly/1qGQ3JR">tags</a> gives me the flexibility of applying them across resource group and allowing me to automate them across my entire subscription.  Tags can be applied in the portal but with multiple virtual machines in an environment, that is a time consuming proposition.  The smarter approach is to apply them systematically through PowerShell.  In this short post I will share the script I used to apply tags to my virtual machines.</p>
<h1>The Business</h1>
<p>In the script below I set the tags on the entire DemoAndTesting before applying it to the virtual machines. This step is not necessary to apply the tag only to virtual machines.  I also limit the tags to the virtual machines in that same resource group in the code below.</p>
<pre class="brush: powershell; title: ; notranslate">

Login-AzureRmAccount
$rmGroupName = &quot;DemoAndTesting&quot;
Set-AzureRmResourceGroup -Name $rmGroupName -Tag @( @{ Name=&quot;vmType&quot;; Value=&quot;test&quot;})
$tags = (Get-AzureRmResourceGroup -Name $rmGroupName).Tags
Get-AzureRmResource |`
 where {$_.ResourceType -eq &quot;Microsoft.Compute/virtualMachines&quot; -and $_.ResourceGRoupName -eq $rmGroupName} | `
   ForEach-Object {Set-AzureRmResource -Tag $tags -ResourceId $_.ResourceId -force}

</pre>
<p>The code to just apply the tags all virtual machines in a subscription it would look like the following.</p>
<pre class="brush: powershell; title: ; notranslate">

Login-AzureRmAccount
Get-AzureRmResource |`
where {$_.ResourceType -eq &quot;Microsoft.Compute/virtualMachines&quot;} | `
ForEach-Object {Set-AzureRmResource -Tag @( @{ Name=&quot;vmType&quot;; Value=&quot;test&quot;}) -ResourceId $_.ResourceId -force}

</pre>
<p>As a database administrator at heart I hated to create a cursor (ForEach-Object) to do this but trying a set based pipe didn&#8217;t work.  I would love to hear from you if you are doing this in a different way.  How are you using tags in your Azure environment?  Let us know in the comments below.</p><br />Filed under: <a href='https://beyondthecorneroffice.com/category/tech/cloud/azure/'>Azure</a> Tagged: <a href='https://beyondthecorneroffice.com/tag/azure/'>Azure</a>, <a href='https://beyondthecorneroffice.com/tag/featured/'>Featured</a>, <a href='https://beyondthecorneroffice.com/tag/powershell/'>PowerShell</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgardner04.wordpress.com/165124022/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgardner04.wordpress.com/165124022/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgardner04.wordpress.com/165124022/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgardner04.wordpress.com/165124022/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgardner04.wordpress.com/165124022/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgardner04.wordpress.com/165124022/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgardner04.wordpress.com/165124022/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgardner04.wordpress.com/165124022/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgardner04.wordpress.com/165124022/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgardner04.wordpress.com/165124022/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgardner04.wordpress.com/165124022/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgardner04.wordpress.com/165124022/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgardner04.wordpress.com/165124022/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgardner04.wordpress.com/165124022/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=beyondthecorneroffice.com&#038;blog=3994854&#038;post=165124022&#038;subd=jgardner04&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://beyondthecorneroffice.com/2016/04/19/adding-tags-to-resources-in-azure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:thumbnail url="https://jgardner04.files.wordpress.com/2016/04/adobestock_106652904.png" />
		<media:content url="http://jgardner04.files.wordpress.com/2016/04/adobestock_106652904.png" medium="image">
			<media:title type="html">AdobeStock_106652904</media:title>
		</media:content>

		<media:content url="http://1.gravatar.com/avatar/4d6023b61245c3eb9f3183b803e900a9?s=96&#38;d=&#38;r=R" medium="image">
			<media:title type="html">jgardner04</media:title>
		</media:content>
	</item>
		<item>
		<title>Easter in Sarasota</title>
		<link>https://beyondthecorneroffice.com/2016/04/15/easter-in-sarasota/</link>
		<comments>https://beyondthecorneroffice.com/2016/04/15/easter-in-sarasota/#respond</comments>
		<pubDate>Fri, 15 Apr 2016 18:00:24 +0000</pubDate>
		<dc:creator><![CDATA[Jonathan Gardner]]></dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://beyondthecorneroffice.com/?p=165124118</guid>
		<description><![CDATA[Video from our family trip to Sarasota during Easter]]></description>
				<content:encoded><![CDATA[<div class="jetpack-video-wrapper"><iframe class='youtube-player' type='text/html' width='960' height='570' src='https://www.youtube.com/embed/UTOBqLj_x04?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' allowfullscreen='true' style='border:0;'></iframe></div>
<p>Edit from our trip to Sarasota at Easter. Video and pictures shot on a Sony a6000.</p>
<p>Camera &#8211; <a href="http://amzn.to/1Y2kPa0">Sony a6000</a><br />
Lens &#8211; <a href="http://amzn.to/1RNmJtz">Sony SEL1670Z Vario-Tessar T E 16-70mm F4 ZA OSS</a><br />
Lens Filter &#8211; <a href="http://amzn.to/1Tlurh2">Hoya 55mm CIR-PL</a></p><br />Filed under: <a href='https://beyondthecorneroffice.com/category/other/'>Other</a> Tagged: <a href='https://beyondthecorneroffice.com/tag/video/'>Video</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgardner04.wordpress.com/165124118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgardner04.wordpress.com/165124118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgardner04.wordpress.com/165124118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgardner04.wordpress.com/165124118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgardner04.wordpress.com/165124118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgardner04.wordpress.com/165124118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgardner04.wordpress.com/165124118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgardner04.wordpress.com/165124118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgardner04.wordpress.com/165124118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgardner04.wordpress.com/165124118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgardner04.wordpress.com/165124118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgardner04.wordpress.com/165124118/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgardner04.wordpress.com/165124118/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgardner04.wordpress.com/165124118/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=beyondthecorneroffice.com&#038;blog=3994854&#038;post=165124118&#038;subd=jgardner04&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://beyondthecorneroffice.com/2016/04/15/easter-in-sarasota/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:thumbnail url="https://jgardner04.files.wordpress.com/2016/04/flamingo.jpg" />
		<media:content url="http://jgardner04.files.wordpress.com/2016/04/flamingo.jpg" medium="image">
			<media:title type="html">Flamingo</media:title>
		</media:content>

		<media:content url="http://1.gravatar.com/avatar/4d6023b61245c3eb9f3183b803e900a9?s=96&#38;d=&#38;r=R" medium="image">
			<media:title type="html">jgardner04</media:title>
		</media:content>
	</item>
		<item>
		<title>Building Azure Resource Manager Templates</title>
		<link>https://beyondthecorneroffice.com/2016/04/14/building-azure-resource-manager-templates/</link>
		<comments>https://beyondthecorneroffice.com/2016/04/14/building-azure-resource-manager-templates/#respond</comments>
		<pubDate>Thu, 14 Apr 2016 18:00:56 +0000</pubDate>
		<dc:creator><![CDATA[Jonathan Gardner]]></dc:creator>
				<category><![CDATA[Azure]]></category>

		<guid isPermaLink="false">http://beyondthecorneroffice.com/?p=165123897</guid>
		<description><![CDATA[ In this article I am going to go through the details of setting up this ARM template and some of the tools I used to get there.  ]]></description>
				<content:encoded><![CDATA[<p>Part of my responsibility as a Partner Technology Strategist at Microsoft is to work on community motions.  I regularly publish blog articles on the <a href="http://bit.ly/1XneJkJ">Microsoft US Partner Community Azure Blog</a> and am working on building the newly created <a href="http://bit.ly/1XneS7L">Data &amp; Analytics Partner Community Blog</a>.  In March I published an article on <a href="http://bit.ly/1Xnf0Eh">Creating a SQL Server 2016 demo</a> and linked to an Azure Resource Manager template I created to deploy a Windows Server virtual machine with SQL 2016 installed with the AdventureWorks database sames deployed.  In this article I am going to go through the details of setting up this ARM template and some of the tools I used to get there.</p>
<p>tl;dr &#8211;  If you don&#8217;t care about how the sausage was made you can grab the code from the <a href="http://bit.ly/1S2VyOE">GitHub repository</a>.</p>
<p><em>Note: All of this code was generated in <a href="http://bit.ly/1Xnh9zN">Visual Studio 2015 Enterprise</a> but can be generated using the <a href="http://bit.ly/1XnhlPC">Community</a> edition as well.  If you don&#8217;t wan to use Visual Studio at all you can do that as well, ARM templates are simply JSON files and can be written in your favorite text editor; at the moment mine is <a href="https://atom.io/">Atom</a>.</em></p>
<h1>Setup</h1>
<p>With Visual Studio installed, make sure that you have <a href="http://bit.ly/1Xnijv2">Azure SDK</a> installed as well.  This will add the Azure Resource Group template that we need.  That said, get VS running and create a new project.  Select Azure Resource Group, as seen in the image below, to get the project set up.</p>
<p><img class=" size-full wp-image-165123931 aligncenter" src="https://jgardner04.files.wordpress.com/2016/04/azureresourcegroup.png?w=960" alt="AzureResourceGroup"   /></p>
<p>The next screen, as seen below, pops up and takes the templates one step further and allow you to get started with some pre-built configurations.  These are certainly a great place to start if you are looking to build one of those solutions.  For the our purposes we are going to create a blank template.</p>
<p><img class="alignnone size-full wp-image-165123938" src="https://jgardner04.files.wordpress.com/2016/04/selecttemplate.png?w=960" alt="SelectTemplate"   /></p>
<h1>The Business</h1>
<p><img class="  wp-image-165123949 alignright" src="https://jgardner04.files.wordpress.com/2016/04/scaffold.png?w=301&#038;h=178" alt="Scaffold" width="301" height="178" />This blank template builds out the project scaffolding with 3 main files, seen in the image<br />
but the one where we will focus the most is on the a<em>zuredeploy.json</em> file.  The file has the basic structure of an ARM template and if you wanted to write the JSON from scratch this is where you would do it.  The Azure team, and the broader community, have created some great references to help get you started and published them on <a href="http://bit.ly/1XnmeIq">GitHub</a>.</p>
<p>As I mentioned earlier in this article, it is quite possible to use your favorite text editor to create ARM Templates but the power of VS can be seen by opening the <em>azuredeploy.json</em> file.  This opens the JSON Outline window that not only helps users navigate but has some great creation tools.  Clicking the cube in the upper left of that window, seen in the image below, will bring up the Add Resource dialog.</p>
<p><img class=" size-medium wp-image-165123958 alignleft" src="https://jgardner04.files.wordpress.com/2016/04/jsonoutline.png?w=300&#038;h=132" alt="JSONOutline" width="300" height="132" />These templates can be used to create a number of items within the templates and build out the parameters and variables as well.  For my SQL 2016 VM deployment I ended up with 5 resources, 9 parameters, and 18 variables.  The full JSON code can be found <a href="http://bit.ly/1Wk0QFF">here</a>.  I would normally post it directly into the post but at 254 lines and no JSON code support for the syntax formatter it makes the post troublesome to read.</p>
<h1>The Magic</h1>
<p>Deploying a virtual machine through an ARM template is not necessarily where the magic happens. Using the Custom Script for Windows Extension, is where I am able to deploy the AdventureWorks databases.  The script actually does a few things and can be downloaded from <a href="http://bit.ly/1Wk1XoI">GitHub</a>.</p>
<ul>
<li>Create the folder structure necessary to deploy the databases</li>
<li>Download and extract the files</li>
<li>Move the backup files to the proper location</li>
<li>Uses SQL PowerShell to execute the restore commands</li>
<li>Open the firewall ports necessary to connect to the SQL Server</li>
</ul>
<h1>Deployment</h1>
<p>As with all things SQL and most things Azure the way you deploy an ARM template, well, depends.  if you are using Visual Studio, right clicking on the project will allow for deployment right from inside of VS.  If you prefer to stay away from Visual Studio, they can also be deployed from PowerShell using the <em>New-AzureRmResourceGroupDeployment</em> command or <em>azure group deployment create</em> from the Azure CLI.  There are additional ways and a great breakdown of how to deploy Azure Arm templates can be found on the <a href="http://bit.ly/1Wk2BT9">Deploy resources with Azure Resource Manager templates</a> documentation.</p>
<p>Are you using Azure Resource Manager templates are a powerful way to create templates for deployments on Azure.  Are you using ARM templates today?  I would love to hear about how you are using them in the comments below.</p><br />Filed under: <a href='https://beyondthecorneroffice.com/category/tech/cloud/azure/'>Azure</a> Tagged: <a href='https://beyondthecorneroffice.com/tag/azure/'>Azure</a>, <a href='https://beyondthecorneroffice.com/tag/featured/'>Featured</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgardner04.wordpress.com/165123897/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgardner04.wordpress.com/165123897/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgardner04.wordpress.com/165123897/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgardner04.wordpress.com/165123897/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgardner04.wordpress.com/165123897/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgardner04.wordpress.com/165123897/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgardner04.wordpress.com/165123897/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgardner04.wordpress.com/165123897/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgardner04.wordpress.com/165123897/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgardner04.wordpress.com/165123897/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgardner04.wordpress.com/165123897/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgardner04.wordpress.com/165123897/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgardner04.wordpress.com/165123897/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgardner04.wordpress.com/165123897/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=beyondthecorneroffice.com&#038;blog=3994854&#038;post=165123897&#038;subd=jgardner04&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://beyondthecorneroffice.com/2016/04/14/building-azure-resource-manager-templates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:thumbnail url="https://jgardner04.files.wordpress.com/2016/04/adobestock_99956429.jpg" />
		<media:content url="http://jgardner04.files.wordpress.com/2016/04/adobestock_99956429.jpg" medium="image">
			<media:title type="html">AdobeStock_99956429</media:title>
		</media:content>

		<media:content url="http://1.gravatar.com/avatar/4d6023b61245c3eb9f3183b803e900a9?s=96&#38;d=&#38;r=R" medium="image">
			<media:title type="html">jgardner04</media:title>
		</media:content>

		<media:content url="http://jgardner04.files.wordpress.com/2016/04/azureresourcegroup.png" medium="image">
			<media:title type="html">AzureResourceGroup</media:title>
		</media:content>

		<media:content url="http://jgardner04.files.wordpress.com/2016/04/selecttemplate.png" medium="image">
			<media:title type="html">SelectTemplate</media:title>
		</media:content>

		<media:content url="http://jgardner04.files.wordpress.com/2016/04/scaffold.png?w=600" medium="image">
			<media:title type="html">Scaffold</media:title>
		</media:content>

		<media:content url="http://jgardner04.files.wordpress.com/2016/04/jsonoutline.png?w=600" medium="image">
			<media:title type="html">JSONOutline</media:title>
		</media:content>
	</item>
		<item>
		<title>Azure Automation, my SQL Agent in the Cloud</title>
		<link>https://beyondthecorneroffice.com/2016/04/12/azure-automation-my-sql-agent-in-the-cloud/</link>
		<comments>https://beyondthecorneroffice.com/2016/04/12/azure-automation-my-sql-agent-in-the-cloud/#comments</comments>
		<pubDate>Tue, 12 Apr 2016 18:00:41 +0000</pubDate>
		<dc:creator><![CDATA[Jonathan Gardner]]></dc:creator>
				<category><![CDATA[Azure]]></category>

		<guid isPermaLink="false">http://beyondthecorneroffice.com/?p=165123621</guid>
		<description><![CDATA[In this article I will walk through the application workflow and how I set up Azure Automation to be my SQL Agent in the cloud.]]></description>
				<content:encoded><![CDATA[<p>My focus for the past 18 moths at Microsoft has been on Azure but that does not mean I left my love for SQL behind.  In fact, has become an asset.  In the course of regular operations I have built out a workflow to import call statistics and reporting data from our community activities into Azure SQL for reporting in Power BI.  In that process I needed the ability to run a stored procedure on schedule to normalize some data.  Without a SQL Agent in Azure SQL, I use Azure Automation to get this done.  In this article I will walk through the application workflow and how I set up Azure Automation to be my SQL Agent in the cloud.</p>
<h1>Workflow &amp; Setup</h1>
<p>Before we get started, a bit of context on the data workflow.  The raw data is delivered via email in a password protected Excel file.  I extract the relevant data into a .CSV file and upload it to <a href="http://bit.ly/1SUHx2w">Azure Blob Storage</a>.  I have created an <a href="http://bit.ly/1SUHAvt">Azure Data Factory</a> pipeline to check the storage location and pipe the data into a staging table in Azure SQL Database.  At this point, I need to normalize the data into my database and archive the file in the event that I want to access the raw data later.</p>
<p>This article makes the assumption that you are familiar with the Azure portal.  I am not writing a full step-by-step article.  While I will outline all of the things that need to happen, I am not doing a &#8220;click here&#8221; walk-through.  I also am not going to cover the movement of the file from one blob to another, I will do that in a separate post.</p>
<h1>Automation Account</h1>
<p>As the name of the article suggests, we are going to start with an Automation Account.  Create an account with the requisite name, subscription, resource group and location.  I choose to create an <a href="http://bit.ly/1SURlK8">Azure Run As account</a> but determine if this is right for your security needs.  Once open, the default Automation account looks like the image below.</p>
<p><img class=" size-full wp-image-165123753 aligncenter" src="https://jgardner04.files.wordpress.com/2016/04/automationaccount.png?w=960" alt="AutomationAccount"   /></p>
<h1>The Basics</h1>
<p>Before we get started with the specific workflow, it is important to understand the structure of an Automation account.  Runbooks are where we will write the actions that we want to perform, assets are resources that we can call into the Runbook and there are various types, finally jobs are the actual execution of the Runbook.  It is also important to note that you can nest these Runbooks for complex tasks.</p>
<p>I cover the separation of assets from the code to highlight the fact that a Runbook can be created that can execute against many different environments.  In this case we can create a single Runbook that can execute across multiple SQL Servers by creating a combination of assets and jobs.  An advanced example may be that you have some index maintenance you perform and want to create one job that connects to all of your databases to execute.</p>
<h1>Creating Assets</h1>
<p>Before creating the Runbook, we will create some assets to call in it.  The first is a credential.  This is the credential of the SQL Server that you will connect to.  The second asset I would create is a schedule.  I run my script daily so I create a schedule to reflect that but there is an hourly option as well.</p>
<h1>The Runbook</h1>
<p>With my assets created, I create a PowerShell Workflow Runbook with the following code.</p>
<pre class="brush: powershell; title: ; notranslate">

workflow Execute-SQL
{
    param(
        [parameter(Manditory=$true)]
        [string] $SqlServer,&amp;amp;amp;lt;/code&amp;amp;amp;gt;

        [parameter(Manditory=$false)]
        [int] $SqlServerPort = 1433,

        [parameter(Manditory=$true)]
        [string] $Database,

        [parameter(Manditory=$true)]
        [PSCredential] $SqlCredential
    )

    $SqlUsername = $SqlCredential.UserName
    $SqlPassword = $SqlCredential.GetNetworkCredential().Password

    inlinescript{
        $Connection = New-Object System.Data.SqlClient.SqlConnection(&amp;amp;amp;quot;Server=tcp:$using:SqlServer,$using:SqlServerPort;Database=$using:Database;User ID=$using:SqlUsername;Password=$using:SqlPass;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;&amp;amp;amp;quot;)
        $Connection.Open()
        $Cmd=New-Object System.Data.SqlClient.SqlCommand(&amp;amp;amp;quot;EXECUTE usp_MyStoredProcedure&amp;amp;amp;quot;, $Connection)
        $Cmd.CommandTimeout=120
        $DataSet=New-Object System.Data.DataSet
        $DataAdapter=New-Object System.Data.SqlClient.SqlDataAdapter($Cmd)
        [void]$DataAdapter.fill($DataSet)
        $Connection.Close()
    }
}

</pre>
<p>While you can create the workflow yourself. You do not necessarily need to create it from scratch.  There is a gallery with hundreds of community driven templates to get you started.  To create a Runbook from the gallery, simply hit the gallery button shown below.</p>
<p><img class=" size-full wp-image-165123793 aligncenter" src="https://jgardner04.files.wordpress.com/2016/04/gallery.png?w=960" alt="Gallery"   /></p>
<h1>Scheduling Execution</h1>
<p>The final step to making Azure Automation your SQL Agent in the cloud is to schedule the Runbook.  From the Runbook panel, shown in the image below, select schedule to associate the one created when setting up our assets.   Configure the parameters that are defined in the Runbook (SQLServer, Port, Databsae, SqlCredential).</p>
<p><img class=" size-full wp-image-165123799 aligncenter" src="https://jgardner04.files.wordpress.com/2016/04/schedule.png?w=960" alt="Schedule"   /></p>
<p>Note that the SqlCredential is the name of the asset created earlier.  The rest of the parameters are going to be the actual names unless they have been defined as assets.</p>
<h1>Wrap Up</h1>
<p>There are a ton of advanced functions in Azure Automation that didn&#8217;t get covered but this should be the basics to help you get started.  How are you using Azure Automation?  We would love to hear from you in the comments below.</p><br />Filed under: <a href='https://beyondthecorneroffice.com/category/tech/cloud/azure/'>Azure</a> Tagged: <a href='https://beyondthecorneroffice.com/tag/featured/'>Featured</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jgardner04.wordpress.com/165123621/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jgardner04.wordpress.com/165123621/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jgardner04.wordpress.com/165123621/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jgardner04.wordpress.com/165123621/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jgardner04.wordpress.com/165123621/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jgardner04.wordpress.com/165123621/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jgardner04.wordpress.com/165123621/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jgardner04.wordpress.com/165123621/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jgardner04.wordpress.com/165123621/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jgardner04.wordpress.com/165123621/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jgardner04.wordpress.com/165123621/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jgardner04.wordpress.com/165123621/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jgardner04.wordpress.com/165123621/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jgardner04.wordpress.com/165123621/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=beyondthecorneroffice.com&#038;blog=3994854&#038;post=165123621&#038;subd=jgardner04&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://beyondthecorneroffice.com/2016/04/12/azure-automation-my-sql-agent-in-the-cloud/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:thumbnail url="https://jgardner04.files.wordpress.com/2016/04/death_to_stock_photography_weekend_work-2-of-10.jpg" />
		<media:content url="http://jgardner04.files.wordpress.com/2016/04/death_to_stock_photography_weekend_work-2-of-10.jpg" medium="image">
			<media:title type="html">Death_to_stock_photography_weekend_work (2 of 10)</media:title>
		</media:content>

		<media:content url="http://1.gravatar.com/avatar/4d6023b61245c3eb9f3183b803e900a9?s=96&#38;d=&#38;r=R" medium="image">
			<media:title type="html">jgardner04</media:title>
		</media:content>

		<media:content url="http://jgardner04.files.wordpress.com/2016/04/automationaccount.png" medium="image">
			<media:title type="html">AutomationAccount</media:title>
		</media:content>

		<media:content url="http://jgardner04.files.wordpress.com/2016/04/gallery.png" medium="image">
			<media:title type="html">Gallery</media:title>
		</media:content>

		<media:content url="http://jgardner04.files.wordpress.com/2016/04/schedule.png" medium="image">
			<media:title type="html">Schedule</media:title>
		</media:content>
	</item>
	</channel>
</rss>
