About Jeremy Pavlov

Jeremy is just a regular guy that likes to occasionally tell the world about stuff.
Thanks for digging in to more of what I've written...

Hyper-V, Windows 10, and Insider Preview…

2017-07-27T00:00:58+00:00 July 21st, 2016|blog, Hyper-V, Microsoft|

I am guilty of running Windows 10 with the Insider Preview “Fast Ring” in production as my day-to-day laptop.  I also maintain a lab of Hyper-V Virtual Machines (VMs) on my laptop that use shared virtual networking with the built-in interfaces, so I can have the equivalent of a NAT environment for my VMs.

Mind you, it’s really been great in almost every way — except that every time I get an update to the Windows 10 Insider Preview (and that is ever few days lately), I have to re-configure my interface sharing and NAT so my VMs can reach the Internet.  So, I thought I’d whip up the steps for you, in case you face the same thing.

So first, after you notice that your VMs don’t have Internet access — and then you remember that you got another Fast Ring update recently, you do this:

Open the Hyper-V Manager on the Windows 10 laptop, and click on “Virtual Switch Manager…” from the Actions area.


Select the virtual switch to be fixed, in my case named “Internal-NAT switch”, and change from Internal to Private, and apply.


You may notice that the Hyper-V interface disappears from the laptop Interface list.  Select Internal again to change from Private, and click OK.  The Hyper-V interface reappears in the interface list.


Right-click on the WiFi interface (or whichever you wish to share networking with the VMs), and choose Properties.  On the Sharing tab, ensure the box is checked for “Allow other network users…” and click the drop-down list under “Home networking connection:”.  Change from “Select a private network connection to choose the Hyper-V interface, and click OK.


Note that the previous step has not *always* worked for me, though it usually does.  A couple times, I’ve had to either a.) un-check the check box and save before re-enabling sharing, or in rare cases, b.) go into Device Manger and remove the WiFi interface, reboot, and return to re-enable sharing.  Anyway, if all goes well and you’ve re-enabled sharing, your VM pings will start going through as the networking gets reconnected.


I’ve become quite used to doing this series of steps and have got it down to a quick few moments, but it always seems to catch me off-guard each time it happens.  I hope it helps you a bit!

PowerShell – AD Recycle Bin Check or Enable…

2017-07-27T00:00:58+00:00 March 24th, 2016|Uncategorized|

When I begin working with a new customer Active Directory environment, one thing I always like to know is whether or not the AD Recycle Bin is enabled for safety.  If you don’t already know, the Active Directory Recycle Bin is a feature that appeared in the 2008 R2 era, and gave us the not-too-easy ability to save us from our own administrators.  Over the years, especially with Server 2012 R2, the ability to restore AD objects have become as easy as a few clicks.  I won’t say that it’s a “no-brainer”, because there are a couple reasons why you might not want to enable it, but I will say that it only takes deleting a couple objects accidentally to make a compelling argument for implementation.  For some further reading, check out this TechNet Guide.

If you want to use PowerShell to check if the AD Recycle Bin is enabled, run the following command to find out (requires that you have the PowerShell AD modules installed):

Get-ADOptionalFeature -Filter 'name -like "Recycle Bin Feature"'

…and if it is NOT enabled, you will see a result something like this in the image below; notice that among the other information, the “Enabled Scopes” is empty.


So if the Recycle Bin is NOT enabled, and you want it enabled, what then?  Well, if your Forest Functional level is already at Server 2008R2, one way is to enable it with the following PowerShell command:

Enable-ADOptionalFeature `
–Identity 'CN=Recycle Bin Feature,CN=Optional Features,CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=domain,DC=com' `
–Scope ForestOrConfigurationSet `
–Target 'domain.com'

…which looks a bit like this, as I enable the feature and then re-check:


As you can see above, the AD Recycle Bin is now enabled in my lab AD forest.

Note that in the above code example, I’m using “back-ticks” to be able to wrap lines.  However, in my screen cap I put it all on one line.  I’ll go over the back-ticks in a future post, but for now be careful with them, or remove them and include the entire command on one line.

So to recap, when ENABLEDSCOPES isn’t populated (e.g. {} ) it’s off.  If it contains values, then it is enabled!

And remember this: after enabling the AD Recycle Bin, you cannot disable it anymore!

PowerShell – Bulk Convert Global Groups to Domain Local…

2017-07-27T00:00:59+00:00 September 29th, 2015|Uncategorized|

Recently I was working with someone who spent a bunch of time building Active Directory groups for a project I’m working on.  After he was done, I noticed the groups he made were Global type groups (which is the default type in ADUC) instead of Domain Local type groups, which I needed for my project.

Instead of causing the person to panic, I told him we could turn to PowerShell to easily flip the type.  However, there is one caveat… You cannot convert groups directly from Global to Domain Local, so they have to be converted to Universal first.

Fortunately for me, all these groups were in a single OU, and we could fix this with just a few simple commands.  Just read along in the comments for explanations of each line.

# So before we begin to process groups, we set a variable to set your searchbase:

$MySearchBase = "ou=Groups,ou=ABC,dc=lab,dc=local"

# For our first step – we load up a variable with the groups we want (filtered by type):

$MyGroupList = get-adgroup -Filter 'GroupCategory -eq "Security" -and GroupScope -eq "Global"' -SearchBase "$MySearchBase"

# If you want to validate you got the correct groups in the variable, list out the names of your objects in the variable:


# Now, for every group in the list, we flip the type to Universal:

$MyGroupList | Set-ADGroup -GroupScope Universal

# Now for our second step – we re-load the variable:

$MyGroupList = get-adgroup -Filter 'GroupCategory -eq "Security" -and GroupScope -eq "Universal"' -SearchBase "$MySearchBase"

# Again, if you want to validate you got the correct groups, list them out:


# Finally, convert them from Universal to Domain Local:

$MyGroupList | Set-ADGroup -GroupScope DomainLocal

And of course, I thought it’d be great to pass it along in case it helps stop some panic in your world…  Enjoy!

Server 2003 EOS, Part 6…

2017-07-27T00:01:00+00:00 July 9th, 2015|Uncategorized|

For previous parts of this blog series, see Parts 1, 2, 3, 4, and 5.

In just a few days it will be July 14th.  And that means End Of Support (EOS) for Windows Server 2003 after more than ten years!  Mind you, I won’t be celebrating; but I might just pause a moment to think of all the critical applications and services that I’ve experienced on Server 2003 throughout the years.  And my, how times have changed since then…

Now, we know there are still some of you out there that have Server 2003 running somwhere in your datacenters, or under a desk, or on a server plastered behind a wall.  It happens.  And we are here to help you. 

So start by checking out our 4-part webinar series on how you might approach different aspects of your migration away from Server 2003, which you can finnd at these links:

If all that’s not good enough, check out Microsoft’s dedicated Server 2003 EOS site for even more detail. 

…and then send us a message from our Contact Page, and let us help you with your critical Server 2003 workloads.  We can’t wait to help you solve your Server 2003 problem and get you back into a fully-supported, modern compute and workload environment.  Talk to you soon!

Ignite 2015 – Download Specific Videos and Slides…

2017-07-27T00:01:00+00:00 May 7th, 2015|Uncategorized|

I was unable to attend the Microsoft Ignite event this year, but I wanted to try and get all the value out of the conference that I could from afar.  I knew I needed to get the session videos and slides, similar to the scripted process that I did for TechEd last year

And while I’ve seen a few download scripts out there, I specifically want just my favorite slides and videos, not a whole category.  Plus, I want the lower-quality MP4s so that the download consumes less space.  And since I’m downloading them while they still post them (the week of the event), I need to permit that they may not yet be available, and that I may re-run it until I get everything I want.

And so here it is, for all my Ignite/TechEd peeps…  It’s a “how-to” to help you grab the content you want, and *only* what you want…

Step 1

First, go to the Ignite 2015 Session catalog at Channel 9 and figure out which session Videos and PowerPoints you want.  Look for the little code by each session, for example FND1451, BRK3505 or BRK2306, etc.

Step 2

Next, create a folder.  I created C:TempGetVideos   …Yes, original, I know. 

Step 3

In that folder you created, make a text file called “MySessionIdList.txt”, and paste in a list of the session IDs, one-per-line, like this:


…and so on. 

Step 4

Again, in that same folder, create a text file called something like I did, “GetSessionVideos.ps1”, and paste in the following code:

Import-module bitstransfer
$inputFile = "mySessionIdList.txt"
$mySessionList = Get-Content $inputFile
$myUrlPathParent = "http://video.ch9.ms/sessions/ignite/2015"
$myRestPath = "http://s.ch9.ms/Events/Ignite/2015/RSS/slides"
$myRestComparison = "http://channel9.msdn.com/Events/Ignite/2015"
# For pete's sake, do NOT show this to Don Jones! I can't take that level of criticism! ;)
foreach ( $sessionId in $mySessionList )
# Check to see if the file is present before attempting to download
if (!(Test-Path "$sessionId.pptx"))
# Yep, the dreaded Write-Host, because I actually want to watch the script run...
# I'm crazy like that...
Write-Host -ForegroundColor GREEN "Getting $sessionId.pptx..."
# Get the PPTX
$MyThing = Invoke-RestMethod $myRestPath | Where-Object link -Contains "$myRestComparison/$sessionId"
if ($MyThing -ne $NULL)
$MyPptxUrl = $MyThing.getelementsbytagname('enclosure').url
start-bitstransfer -source "$MyPptxUrl" -destination "$sessionId.pptx"
Write-Host -ForegroundColor CYAN "Sorry, the PPTX for $sessionId is not yet available..."
write-host "Already have $sessionId.pptx, skipping..."
# Check to see if the file is present before attempting to download
if (!(Test-Path "$sessionId-mobile.mp4"))
# Go ahead and revoke my MVP, Don...
Write-Host -ForegroundColor GREEN "Getting $sessionId-mobile.mp4..."
# Get the MP4
start-bitstransfer -source "$myUrlPathParent/$sessionId-mobile.mp4" -destination "$sessionId-mobile.mp4"
write-host "Already have $sessionId-mobile.mp4, skipping..."

…And run that script in a Powershell session to get your videos! It might look something like this, using my examples above (note that some files were downloaded, some skipped, and some not yet available):

Of course,you can modify the code to suit your tastes, but this simple set of instructions should get you going.

Have fun viewing and learning!

Note: This is an update from my TechEd 2014 download script posted here.  And thanks to THIS POST for the clue on the Rest API call, due to the *horrible* naming convention for the slides this year. 


Walk For Wishes 2015 – A Record-Breaking Success!

2017-07-27T00:01:00+00:00 May 6th, 2015|Uncategorized|


What a great event, on what turned out to be a great day!

For 2015, my family and I again joined fellow Coreteker Sarah and her family for a fun way to help out a wonderful cause: the 17th Annual Walk For Wishes® by the Make-A-Wish® Michigan organization.  Sarah and her team are veterans of the Walk, and I’ve been proud and grateful to have a chance to participate with them the last few years.

And as usual, Sarah’s son made an excellent (and patient) tour guide, sharing his wealth of knowledge about the Zoo.  He should run the place!  😉

In the process, we helped to raise our part (thanks to Coretek and other donors) of the event total of more than $445,000.00, with a record-breaking attendance of more than 4,500 walkers!  This amount means the organization will be able to grant wishes to more than 400 Michigan kids this year.  Awesome. 

If you didn’t get the chance to donate before the event but still would like to, please click here to donate with our team.

Thank you!  And see you out there next year…


Server 2003 EOS, Part 5…

2017-07-27T00:01:00+00:00 April 1st, 2015|Uncategorized|

(Please see Server 2003 EOS Parts 1, 2, 3, and 4 for background)

Wow, we’re at the end of our 4-part series of webinars about the Comfort Trap of Server 2003, and the End of Service.  We’ve covered a lot over these sessions, and shared some great insight and detail about various challenges you face — and options you have — in getting your critical services off of Server 2003.

I want to thank Avi for his help and contributions to this episode, where he brings his skills and background as a developer and application specialist to help us understand the complexities of the application space.

And while today is April fool’s day, it’s no joke that some of your critical systems may be at risk when support ends on July 14th.  Interestingly, today is 4/01 and the Server 2003 EOS is just 104 days away as I type this…

So kick up your feet and relax, and spend about 42 minutes with us.  It’s just what you need to get out of the Comfort Trap!

By the way, our other sessions can be seen here:

Thanks to all that attended the live webinars!  We’ll keep you posted on future items and events, and look forward to hearing from you…


Server 2003 EOS, Part 4…

2017-07-27T00:01:00+00:00 March 4th, 2015|Uncategorized|

(Please see Server 2003 EOS Parts 1, 2, and 3 for background)

Well, folks, now the Server 2003 EOS is just 132 days away as I type this in early March of 2015… 

Did you really forget that you’re running Terminal Services on that Server 2003… to get to your critical applications?!?

Well, it’s a good thing that Kris and I just finished presenting the third part of our 4-part webinar series, “The Windows Server 2003 Comfort Trap”.  This time we’re back with a new episode filled with tips, anecdotes, and some helpful options to get you and your applications as far away from TS 2003 as you can get.

So grab a cup of tea, and watch the movie!  It’s about 38 minutes long, and is just what you need to get out of the Comfort Trap!

By the way, our other sessions can be seen here:

Thanks to all that attended the live webinar!  So register for our last session.

And who knows what’s next?  Whatever it is, I know I’m looking forward to it!  See you then…


Server 2003 EOS, Part 3…

2017-07-27T00:01:00+00:00 February 12th, 2015|Uncategorized|

(Please see Server 2003 EOS, Part 1, and Part 2 for background)

Well, folks, now the Server 2003 EOS is just 153 days away as I type this in early February…  And don’t tell me you’re still running Exchange 2003 or 2007 on that Server 2003, are you?!?

Well, it’s a good thing that Chris Shalda and I just finished presenting the second part of our 4-part webinar series, “The Windows Server 2003 Comfort Trap”.   Part 2 is all about Exchange, and you can watch it embedded below in this page or directly here.  Chris goes into pretty good detail about why you should be concerned about EOS and your Exchange server, and some tips and approaches to help you get started in preparing.  

So grab some popcorn and cocoa, and watch the movie!  It’s about 40 minutes long, and could be the first step in helping you out of the Comfort Trap!

Update: Also, the other Sessions can be seen here:

Thanks to all that attended the live webinar!  And for those that stuck with us even though we had some audio difficulties at the beginning.  😉

In the upcoming sessions in this series, we’ll be bringing on more special guests from Coretek to tell their stories and give great insight.  I know I’m looking forward to it!  See you then…


Server 2003 EOS, Part 2…

2017-07-27T00:01:00+00:00 January 28th, 2015|Uncategorized|

(Please see Server 2003 EOS, Part 1 for background)

Well, folks, the Server 2003 EOS is just 167 days away as I type this in late January…  What is the “EOS” you ask?  I’m glad you asked…

I just finished presenting the first part of our 4-part webinar series, “The Windows Server 2003 Comfort Trap”.  Part 1 is called “Foundations”, and you can watch it at this link, and its also embedded below in this page. I go into pretty good detail about what the EOS is, why you should be concerned, and some tips and approaches to help you get started in preparing.  

So grab some popcorn and cocoa, and watch the movie!  It’s only about 33 minutes long, and might just be your first step in getting yourself out of the Comfort Trap!

Update: By the way, the other Session can now also be seen here:

Thanks to all that attended the live webinar!  And thanks to all those that pointed out that I have the wrong date in the first slide… I promise to have that fixed for the next session.  😉

Speaking of which, in the upcoming sessions in this series, we’ll be bringing on other special guests from Coretek to tell their stories and give great insight into the areas which are their strengths.  I know I’m looking forward to it!  See you then…


Load More Posts

Fatal error: Uncaught exception 'GuzzleHttp\Exception\ClientException' with message 'Client error: `POST https://dc.services.visualstudio.com/v2/track` resulted in a `400 Invalid instrumentation key` response: {"itemsReceived":1,"itemsAccepted":0,"errors":[{"index":0,"statusCode":400,"message":"Invalid instrumentation key"}]} ' in /home/coretek/public_html/wp-content/plugins/application-insights/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:113 Stack trace: #0 /home/coretek/public_html/wp-content/plugins/application-insights/vendor/guzzlehttp/guzzle/src/Middleware.php(66): GuzzleHttp\Exception\RequestException::create(Object(GuzzleHttp\Psr7\Request), Object(GuzzleHttp\Psr7\Response)) #1 /home/coretek/public_html/wp-content/plugins/application-insights/vendor/guzzlehttp/promises/src/Promise.php(203): GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Response)) #2 /home/coretek/public_html/wp-content/plugins/application-insights/vendor/guzzlehttp/promises/src/Promise.php(156): GuzzleHttp\Promi in /home/coretek/public_html/wp-content/plugins/application-insights/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php on line 113