Home Contact

The Frog Pond of Technology

Ripples of Knowledge for SharePoint and Other .Net Technologies

News

 Subscribe to this blog


About Me

Name:
Brian T. Jackett
Location:
Columbus, OH
Company:
Microsoft

Find me on...

Tag Cloud


Archives

Post Categories

Syndication:

I Finished My First 5k Run

   This post is a bit more personal than most.  Two weekends ago my fiancé and I (along with two friends) completed our first 5k run.  To many people this may not sound like a big deal, but to me it was a very significant event.  Below is the story why.

 

History

   When I was a junior in high school I started to have pain in my right hip when I ran or was on my feet for extended periods of time.  At the time I was in track doing shot put and discus which are very demanding on your leg joints and muscles.  When the pain didn’t go away for days and was uncomfortable just walking or sitting I decided to get it looked at by a doctor.  The doctor took a number of X-rays and performed various mobility tests.  Upon reviewing the X-rays it was clear what the problem was.  My right hip joint was not properly formed.  Specifically the socket portion of the “ball and socket” connection was under-formed and thus the ball portion slipped around causing inflammation.  To the best of my memory he called it hip dysplasia.

   This is a somewhat common issue with newborn babies where the hip joints aren’t properly aligned or the ball remains out of the socket.  In most cases some quick tests and manual adjustments pop the hip back into place.  Apparently this wasn’t the case for me.  At the time the doctor told me that I would need a hip replacement by the time I was 40-45, but to continue exercising and avoid any activities that caused pain.  For me that meant no more running or climbing large amounts of stairs.

 

Run Training

   Fast forward to a few years ago, I read an article discussing different running styles.  One that stood out to me was toe running.  Instead of landing on the heel (and absorbing all the shock with your bones) you focus on running on the ball or toes of your feet (and thus absorb the shock in your muscles).  For a year I started to walk on the balls of my feet rather than the traditional heel to toe stride.  I noticed a decrease in my hip pain as well as increased calf muscle strength.  I then tried running on my toes and found it to be much easier than expected.

   I joined my fiancé's gym at the beginning of this year intending to lift weights and do some minimal cardio.  I started out with running half a mile and worked my way up to 2 miles.  In Feb I found out the gym was holding a 5k run / walk for charity.  I thought this would be a great opportunity to see if I could run the full race and not have hip pain.  Sarah and I trained over the next few months increasing our distance and lowering our pace per mile.

 

The Race

   On April 27th, 2013 Sarah and I ran our 5K.  I finished with a time of 32:59 (just under 33 mins :) ) and Sarah finished at 34:56.  I’m very proud of both of our times and for completing.  The icing on the cake was that I had very minimal hip pain after the race (and even the days following the race).  The below picture was taken just before our race.

WP_20130427_002

 

Conclusion

   When my doctor told me that I wouldn’t be able to do many things that I enjoyed when I was younger it was discouraging.  Thankfully through changing the way that I walk, run, and get around I’ve found ways to cope with my hip issue.  I may still have to have an early hip replacement, but the fact that I could complete a 5K (with Sarah’s help and motivation) was a big boost to my confidence that I won’t let that keep me down.  Now to find the next race and continue on!

 

      -Frog Out



Speaking at SharePoint Cincy 2013

SP-speaker-image

   I will be speaking at SharePoint Cincy 2013 on Friday Apr 19th.  This will be my 2nd time speaking at SharePoint Cincy.  I always enjoy getting to speak at local conferences as it is a great chance to connect with customers, meet new and old friends, and give back in a more intimate venue.  I’ll be presenting one topic which I have delivered a similar presentation internally to Microsoft but this is slightly altered and for public consumption.  Registration is still open.  If you attend feel free to stop by and say hi.  I’ll be bringing a copy of my previous book to sign and give away.

Title: Integrating SharePoint with Office Web Apps (WAC) Server

Audience and Level: IT Pro / Architect, Intermediate

Abstract: WAC? WOPI? These are some of the new acronyms for Office Web Apps (WAC) Server 2013. This session will highlight what has changed since the 2010 version, what is new for the 2013 version, and how to administrate WAC. We will also cover considerations for capacity planning, installation, high availability, and common pitfalls when deploying WAC. This session will include demos of how to configure WAC server with SharePoint 2013 and how to enable user license enforcement for editing documents through WAC. Attendees need not have prior experience with Office Web Apps but should have an introductory knowledge of SharePoint 2013 administration.

 

      -Frog Out



PowerShell Script to Remove SharePoint 2010 or 2013 List Duplicates

<Updated 2013-05-11>

   Recently Derek, a fellow Premier Field Engineer (PFE), had a customer request on how to remove duplicates from a SharePoint 2010 list.  I have written some PowerShell scripts that remove list items, but never to check for duplicates.  My main concern for this was performance as looping through a list searching for duplicates could be an expensive operation.

 

Problem

   As it turns out the customer had a list with more than 85,000 items and many of the list items were duplicates.  The original solution the custom attempted took 5 hours to run and threw out of memory exception most times it was run.  My assumptions on the resource intensive list queries and looping were correct.

 

Solution

   I first wrote my own version of a looping structure to iterate over the items and remove duplicates while trying to be as efficient with memory and CPU usage as possible.  After about 10 minutes of scripting I wasn’t making good progress so I decided to switch up my approach.

   A quick Bing search pulled up the following article on checking for duplicates items in a SharePoint list.  The key piece of info from that article was not to loop through the items one at a time, but instead to convert the list into a DataTable using the method SPListItemCollection.GetDataTable() and then group the items on the column to compare for duplicates.  In this case the Title column was used for grouping.  With a little trickery I was then able to find the IDs of the duplicate items to then be used to delete the individual duplicate items.

   Two added added bonuses are included in the below script.  The first is that the script writes out the progress of the deletion process using Write-Progress.  The second is that the commented portion at the bottom will generate list items with random single letter titles to test out the duplicate deletions.

<Update 2013-05-11>

   Thank you to reader Santosh for pointing out an error in the script I published.  I had mistakenly published a version that included an invalid reference.  On line 10 in the foreach block (%) the call to $list.DeleteByItemID() will fail because that method doesn’t exist on that object.  I’ve updated the downloadable script and below sample to the original I used for $list.GetItemById($_.ID).Delete().  Santosh also got it to work by calling $list.Items.DeleteItemById().  I prefer not to call the Items member on an SPList object because of the performance impact which you can read about in my previous post.

</Update 2013-05-11>

 

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015

Add-PSSnapin microsoft.sharepoint.powershell
$web = Get-SPWeb -Identity "<URL of Site>"
$list = $web.Lists["DuplicatesList"]

$AllDuplicates = $list.Items.GetDataTable() | Group-Object title | where {$_.count -gt 1}
$count = 1
$max = $AllDuplicates.Count
foreach($duplicate in $AllDuplicates
)
{

$duplicate.group | Select-Object -Skip 1 | % {$list.GetItemById($_.ID).Delete()}
Write-Progress -PercentComplete ($count / $max * 100) -Activity "$count duplicates removed" -Status "In Progress"
$count++
}

<# # generate 100,000 items in a list using a random single character as the title foreach($x in 1..100000) { $item = $list.AddItem() $item["Title"] = [char](97 + (Get-Random -Maximum 25)) $item.Update() } #>

 

   Be sure to modify the site URL and list name to work in your environment.  In my example the list is named DuplicatesList and must already exist.

 

Conclusion

   With my current solution I was able to remove 75,000 duplicates in a list with a single column (Title) in roughly 45 minutes.  Derek made some tweaks and was able to remove 45,000 duplicates in about 3.5 hours on a list with dozens of columns.  It appears that a list with additional columns takes longer to process.  If I had additional time I would investigate the SPList.GetDataTable() method which allows passing in a query to only retrieve specific columns (i.e. the column we are using to determine duplicates).  I believe this might speed up the process but don’t know for sure.

   As it stands I was very happy with the solution I came up even if it did take a long time to run.  The important part was that it didn’t throw out of memory exceptions while running and did have increased performance vs. the customer’s original solution.  Thanks to Derek for collaborating on this item with me.  It really is great to work with other PFEs who are passionate about helping customers solve real problems in their environments.  I hope this script and / or post helps someone else in their environment.

 

      -Frog Out

 

Links

Check for duplicate items in Sharepoint lists with Powershell

http://jespermchristensen.wordpress.com/2008/09/22/check-for-duplicate-items-in-sharepoint-lists-with-powershell/

 

SPListItemCollection.GetDataTable() method

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitemcollection.getdatatable.aspx

 

SPList.GetDataTable() method

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splist.getdatatable(v=office.14).aspx



Guest Blog Post On Hey Scripting Guys Blog

   Just a quick post to mention that I have a guest blog post up on the Hey Scripting Guy! Blog today titled Get Exchange Online Mailbox Size in GB.  The guest post is a cleaned up version of this post I wrote on my blog many months ago.  I’m honored to be a guest blogger on there for the second time and look forward to future collaborations.

 

      -Frog Out



PowerShell Script to Create a Large SharePoint List with Random Data

<Updated 2013-02-06>

   Recently a fellow SQL PFE Lisa Gardner asked me for a PowerShell script that would create a SharePoint list with numerous (100+) columns.  She was doing some research for an upcoming internal presentation on SharePoint databases for SQL database administrators and wanted samples of really nasty SQL queries that are generated when querying a large SharePoint list.  The script that I came up with is below in the Solution section.

<Update 2013-02-06>

Lisa posted her findings on the SQL query generated from the script I provided.  You can read about it on her blog post here.

</Update>

   Before I get to my script though I did want to call out sample scripts that two other fellow SharePoint PFEs have created that are helpful for working with SharePoint lists.  Kirk Evans wrote a post on creating a SharePoint list with multiple folders and subfoldersJosh Gavant has written a custom module with commandlets that return SPList objects along with column metadata.  Feel free to take a look at these for additional insight in working with SharePoint lists and items.

 

Problem

   Create a SharePoint 2010 (or 2013) custom list that has a configurable number of columns with various datatypes.  Also populate these columns with random sample data.

 

Solution

   The only assumption for this script is that you already have a SharePoint site to work with and have modified the variables at the header to suit your needs.  If you do not have a site created there is a New-SPWeb commandlet call that you can uncomment early in the script to create a site if needed.  The list, columns, and sample data will be generated by the script.  Be sure to fill in the URL of the “big list” site to be used.

 

Note: When working with SharePoint lists it is important to be aware of SharePoint column limits and what is known as SQL row wrapping.  Read the information on the following TechNet article for more information about these: http://technet.microsoft.com/en-us/library/cc262787(v=office.14).aspx#Column

 

   Here is the script that I came up with.  You can also download the script from my SkyDrive folder.

 

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139

##########################
# Date: Feb 5, 2013
# Author: Brian T. Jackett
##########################

# set number of columns to create for various data types
# column limits courtesy of http://technet.microsoft.com/en-us/library/cc262787(v=office.14).aspx#Column

$IntColumnsToCreate = 30               # max of 96
$BoolColumnsToCreate = 30              # max of 96
$ChoiceColumnsToCreate = 0             # max of 276
$SingleLineTextColumnsToCreate = 70    # max of 276
$MultiLineTextColumnsToCreate = 42     # max of 192
$DateTimeColumnsToCreate = 10          # max of 48
$CurrencyColumnsToCreate = 40          # max of 72
$LookupColumnsToCreate = 20           
# max of 96


# set number of items to create

$ItemsToCreate = 10

# URL of site that will contain big list
$BigListSiteURL = "<set a value for this>"


if((Get-PSSnapin "Microsoft.SharePoint.PowerShell") -eq $null
)
{
   
Add-PSSnapin Microsoft.SharePoint.PowerShell
}

Start-SPAssignment -Global

# uncomment the New-SPWeb command to create a new site if necessary
#New-SPWeb -Url http://sps2013app/sites/demo/BigList -Template "STS#0"

# get reference to the "big list" site

$web = Get-SPWeb -Identity $BigListSiteURL


# if creating lookup columns and lookup list does not exist then create it
if($LookupColumnsToCreate -gt 0 -and $web.Lists["MyLookupList"] -ne $null
)
{
   
$web.Lists["MyLookupList"].
Delete()
}


# if big list exists delete it
if($web.Lists["MyBigList"] -ne $null
)
{
   
$web.Lists["MyBigList"].
Delete()
}


# if creating lookup columns create list and get reference to list
if($LookupColumnsToCreate -gt 0
)
{
   
$web.Lists.Add("MyLookupList", "My Lookup List", [microsoft.sharepoint.splisttemplatetype]::
GenericList)
   
$lookuplist = $web.Lists["MyLookupList"]
    $lookupItem = $lookuplist.Items.
Add()
   
$lookupItem["Title"] = "The one lookup item to rule them all"
    $lookupItem.
Update()
}


# create list and get reference to list
$web.Lists.Add("MyBigList", "My Big List", [microsoft.sharepoint.splisttemplatetype]::GenericList)
$list = $web.Lists["MyBigList"]


# add integer columns
for($count = 1; $count -le $IntColumnsToCreate; $count++
)
{
$list.Fields.Add("Int$count", [microsoft.sharepoint.SPFieldType]::Integer, $false)}

# add boolean columns
for($count = 1; $count -le $BoolColumnsToCreate; $count++
)
{
$list.Fields.Add("Bool$count", [microsoft.sharepoint.SPFieldType]::Boolean, $false)}

# add choice columns
for($count = 1; $count -le $ChoiceColumnsToCreate; $count++
)
{
$list.Fields.Add("Choice$count", [microsoft.sharepoint.SPFieldType]::Choice, $false)}

# add single line text columns
for($count = 1; $count -le $SingleLineTextColumnsToCreate; $count++
)
{
$list.Fields.Add("SingleLineText$count", [microsoft.sharepoint.SPFieldType]::Text, $false)}

# add multi line text columns
for($count = 1; $count -le $MultiLineTextColumnsToCreate; $count++
)
{
$list.Fields.Add("MultiLineText$count", [microsoft.sharepoint.SPFieldType]::Note, $false)}

# add date time columns
for($count = 1; $count -le $DateTimeColumnsToCreate; $count++
)
{
$list.Fields.Add("DateTime$count", [microsoft.sharepoint.SPFieldType]::DateTime, $false)}

# add currency columns
for($count = 1; $count -le $CurrencyColumnsToCreate; $count++
)
{
$list.Fields.Add("Currency$count", [microsoft.sharepoint.SPFieldType]::Currency, $false)}

# add lookup columns
for($count = 1; $count -le $LookupColumnsToCreate; $count++
)
{
$list.Fields.AddLookup("Lookup$count", $lookuplist.ID, $false)}


# populate list with items
foreach($x in 1..$ItemsToCreate
)
{
   
$item = $list.
AddItem()
   
$item["Title"] = [char](97 + (Get-Random -Maximum 25
))

   
# assign values integer columns
    for($count = 1; $count -le $IntColumnsToCreate; $count++
)
    {
$item["Int$count"] = Get-Random -Minimum -100000 -Maximum 100000
}

   
# assign values boolean columns
    for($count = 1; $count -le $BoolColumnsToCreate; $count++
)
    {
$item["Bool$count"] = [bool](Get-Random -Minimum 0 -Maximum 2
)}

   
# assign values choice columns
    # not implemented

    # assign values single line text columns
    for($count = 1; $count -le $SingleLineTextColumnsToCreate; $count++
)
    {
$item["SingleLineText$count"] = "lorem ipsum " * (Get-Random -Minimum 1 -Maximum 8
)}

   
# assign values multi line text columns
    for($count = 1; $count -le $MultiLineTextColumnsToCreate; $count++
)
    {
$item["MultiLineText$count"] = "lorem ipsum " * (Get-Random -Minimum 1 -Maximum 200
)}

   
# assign values date time columns
    for($count = 1; $count -le $DateTimeColumnsToCreate; $count++
)
    {
$item["DateTime$count"] = (Get-Date).AddDays((Get-Random -Minimum -1000 -Maximum 1000
))}

   
# assign values currency columns
    for($count = 1; $count -le $CurrencyColumnsToCreate; $count++
)
    {
$item["Currency$count"] = [system.decimal](Get-Random -Minimum -10000 -Maximum 10000
)}

   
# assign values lookup columns
    # not implemented
   

   
$item.
Update()
}


Stop-SPAssignment -Global

 

   Here is a screenshot of the list that this script creates.

CreateGiantSPList1

 

Conclusion

   Lisa was very happy with the results of this script and I learned a bit about generating SharePoint columns and random data.  This script is not very polished but it gets the job done.  If you have a need to generate a lot of SharePoint list columns or random data hopefully this script will be helpful.  If you have any feedback on it feel free to leave a comment or email me.

 

      -Frog Out



Goals for 2013

   Another new year, another set of goals.  Over the past few years I have set goals (2010, 2011, 2012) and done retrospectives at the end of the year (2010, 2011, 2012).  This year already has a number of big changes in the pipeline but I’m trying to introduce a few other changes with the goals I am setting.

 

Professional

  • Work local more – If you’ve been reading my blog the past year and a half you’ve probably heard me write that my new role as Premier Field Engineer with Microsoft has me traveling quite a bit (as evidenced by me hitting platinum status on Delta and Marriott last year).  There are some changes at work which have me traveling less but I’m still away from home at least a few weeks a month.  I am working towards doing more local and remote (from home) work.  With my upcoming wedding I would like to be home more as spending time with friends and family is an important part of my life.
  • Mentor / Mentee – Over the past 5-10 years I have had a few official and unofficial mentors whether through work, social groups, or otherwise.  I currently have two mentors through work.  I would like to build upon those relationships and also look for opportunities of becoming a mentor (not necessarily through work) for someone else.  The latter may not happen this year but I would like to start laying the foundation for that.
  • Blogging – I plan to continue blogging as I have been for the past almost 4 years now.  I intend to blog at least 20 posts throughout the year.

Personal

  • Get married – This Oct my fiancé Sarah and I will be tying the knot.  I’m very happy and excited to be getting married as it opens a completely new chapter of our lives together.
  • Stay Fit – Yes I included this last year and if you read my last retrospective I did lose 10+ pounds last year.  With the upcoming wedding in Oct Sarah and I both have goals to lose a little more for this year.  For me I am aiming to lose another 13 pounds by Oct and 15 total by the end of year.  I’m planning to join a gym and have already bought a FitBit to track steps / sleep patterns / weight.  I’m also continuing to eat healthier (most times) and practice portion control.
  • Read Books – Purchasing a Kindle over a year ago got me reading more frequently.  Now with my Surface RT I’m able to read easily on a device I travel with all the time.  Win-win situation.  This year I plan to read at least 5 books for the year.  I was very happy to find my local library lends e-books and I’ve already started with Daemon by Daniel Suarez which is hard to put down.  I’m also planning to track my books and post those as recommendations later similar to others (Todd Klindt’s book recommendations).

 

Conclusion

   I like the idea of managing things in groups of threes (which I picked up from 30 Days of Results) hence 3 personal and 3 work goals for the year.  There are a few smaller goals I have that are targeted for shorter term timeframes as well.  This year is looking to be another good year and I’m eager to tackle the challenges and opportunities that come.

   On a side note, when I first started posting my goals in 2010 I called out a close friend Sean McDonough to also post his goals online.  As it turns out this year Sean did finally post his goals and join the bandwagon.  Thanks for carrying on the torch Sean.  Since Sean posted his I’m going to call out a few of my coworkers in hopes they will also post their goals for the year: Josh Gavant and Ashley McGlone.

 

      -Frog Out



Goals for 2012 Retrospective

   Now in my third year of an annual tradition I have set goals (2010, 2011, 2012) and gone through retrospectives (2010, 2011).  So here goes a recap on the year that was 2012 and how I stacked up against my goals.

Year in Review

   Similar to 2011, 2012 was a big year for me.  In 2012 I proposed to my now fiancé Sarah (pictures), I completed my first year with Microsoft as a Premier Field Engineer, my middle brother got married, my oldest brother and his wife had a baby, Sarah’s sister and husband found out they were pregnant, my mom had a total hip surgery, I wrote two chapters for a new book (more details about this once it is closer to publishing), and I helped out with various conferences and projects.  As you may have noticed a number of these items are family related which has been a bigger focus for me this past year.

Professional Goals

  • Blog – I set a goal to blog twice a month but did not meet that goal.  I only had 18 blog posts throughout 2012 but they were fairly well spaced out through the months.  It has been more difficult to keep up with blogging given my travel schedule with work, increased family commitment, book writing I was involved with, and other factors.  I still plan to continue blogging as long as I have content / ideas to write about.
  • Speaking – I had a goal of speaking at 3 user groups and / or conferences in 2012.  I spoke at 4 events in 2012 (PowerShell Saturday Columbus, SharePoint Cincy, SharePoint Saturday Twin Cities, and SPTechCon Boston).  As intended I reduced the number of events I would speak at compared to 2011.  Due to frequently traveling for work it is difficult to spend a weekend or part of a week away when my time at home with friends and family is already limited.  Going forward my speaking commitments will greatly depend on family commitments and travel schedules.
  • Open Source – I intended to work on two separate open source projects.  I did not complete any additional work on SavePSToSP for a variety of reasons but mostly because my time was better spent on other projects and goals.  I have worked on the SharePoint diagnostics project with my coworker Eric Harlan but have not gotten to publishing the project or blogging on it.  This may see the light of day in 2013 but we shall see.
  • Volunteering – I assisted with planning Stir Trek again in 2012 as well as a new conference PowerShell Saturday which we held the first ever in Columbus.  I’ve also been involved in the local Buckeye SharePoint User Group (BuckeyeSPUG).

Personal Goals

  • Stay Fit – My goal for 2012 was to lose 15 pounds.  I ended up losing a total of 16 pounds by November but with the holiday food fests ended the year 11 pounds lighter than I started the year.  With our upcoming wedding this year Sarah and I have continued goals to lose a few more pounds.
  • Read Books – I set out to read at least 2 books.  With the Song of Ice and Fire (Game of Thrones series for you TV-only folks) I read the first 4 books.  Additionally I read a couple marriage prep books.  I wish I had kept a list of when I read certain books as they are a blur looking back now.  I like what Todd Klindt did and post the books he read throughout the year.  I may do the same for next year.

 

Conclusion

   Overall I met (or came close to) many of my goals for 2012.  Aside from these goals I also set a midyear goal for improving my personal productivity which I blogged about.  So far I have seen an increase in my personal productivity mainly by how many things I have cut out of my life that are / were unnecessary.

   Despite reading some articles about not setting goals I still find the process very worthwhile and will continue into 2013.  I even found a series called 30 Days of Getting Results which very much builds on the idea of setting 3 attainable goals for the day / week / month / year and then doing a retrospective at the end of the respective time period.  I have not fully adopted this system but have incorporated a number of the concepts into my daily life.

   I hope 2012 was good to you (as it was to me) and you are refreshed coming into 2013 ready to tackle new challenges and continue growing.

 

      -Frog Out



Accessing Host Machine Files From Hyper-V Guest Virtual Machine

   Similar to a previous post I wrote on How To Configure Remote Desktop to Hyper-V Guest Virtual Machine I commonly get questions for “how do I access Hyper-V host machine files from inside a guest virtual machine?”  The solution I use is a combination of software and configuration but there are many other options as well.

Problem

   When connecting to a Hyper-V guest virtual machine you cannot easily transfer files into or out of the virtual machine.

Solution

   For almost all of my remote desktop needs I use a program called mRemote (Multi Remote).  The original mRemote developer has joined a new company and folded mRemote into a new product but you can still download a stable build of mRemote from CNET here.  There is also a forked version called mRemoteNG (Multi Remote Next Generation) that I have not tried out personally.

   One of the nice features of mRemote is that you can configure an RDP connection to map local host drives so that they are available inside the RDP session.  By RDP’ing to a virtual machine with the host drives mapped you now have access to transfer files into or out of the virtual machine.  Open mRemote and configure your RDP session as normal.  Under the Redirect heading change the Disk Drives setting to Yes as in the screenshot below.

AccessHyperVHostFilesInGuest1

   As an added bonus mRemote also allows you to store credentials to use for an RDP connection.  I find this very helpful to avoid having to retype credentials every time I bring up a virtual machine, especially with how many fake demo domains I deal with in various virtual machine farms I build out.

   When you connect to this RDP session you may be prompted to allow the remote desktop connection to access local resources (I do on Windows 8 at least, I didn’t previously on Windows 7).  Make sure to allow the Drives resources to be accessed.  If anyone knows a way around this prompt I would be interested to hear as I have not found any yet.

AccessHyperVHostFilesInGuest2

   After connecting to the virtual machine you now have access to the host machine drives.  See the example below.

AccessHyperVHostFilesInGuest3

 

Conclusion

   As I stated earlier there are a number of ways you can solve the issue of not being able to access host machine files inside a Hyper-V guest virtual machine.  My solution is a combination of RDP session with the mRemote application and configuring the RDP connection to map local host drives into the RDP session.  If you have other solutions or tips feel free to leave them in the comments below.

 

      -Frog Out

 

Links

How To Configure Remote Desktop to Hyper-V Guest Virtual Machine

http://briantjackett.com/archive/2010/06/06/how-to-configure-remote-desktop-to-hyper-v-guest-virtual-machines.aspx

 

mRemote download from CNET

http://download.cnet.com/mRemote/3000-2648_4-10793919.html

 

mRemoteNG project

http://www.mremoteng.org/



Productivity Tips

   A few months ago during my first end of year review at Microsoft I was doing an assessment of my year.  One of my personal goals to come out of this reflection was to improve my personal productivity.  While I hear many people say “I wish I had more hours in the day so that I could get more done” I feel like that is the wrong approach.  There is an inherent assumption that you are being productive with your time that you already have and thus more time would allow you to be as productive given more time.

   Instead of wishing I could add more hours to the day I’ve begun adopting a number of processes or behavior changes in my personal life to make better use of my time with the goal of improving productivity.  The areas of focus are as follows:

  1. Focus
  2. Processes
  3. Tools
  4. Personal health
  5. Email

Note: A number of these topics have spawned from reading Scott Hanselman’s blog posts on productivity, reading of David Allen’s book Getting Things Done, and discussions with friends and coworkers who had great insights into this topic.

 

Focus

Pre-reading / viewing:

Overcome your work addiction

Millennials paralyzed by choice

Its Not What You Read Its What You Ignore (Scott Hanselman video)

   I highly recommend Scott Hanselman’s video above and this post before continuing with this article.  It is well worth the 40+ mins price of admission for the video and couple minutes for article.  One key takeaway for me was listing out my activities in an average week and realizing which ones held little or no value to me.  We all have a finite amount of time to work each day.  Do you know how much time and effort you spend on various aspects of your life (family, friends, religion, work, personal happiness, etc.)?  Do your actions and commitments reflect your priorities?

   The biggest time consumers with little value for me were time spent on social media services (Twitter and Facebook), playing an MMO video game, and watching TV.  I still check up on Facebook, Twitter, Microsoft internal chat forums, and other services to keep contact with others but I’ve reduced that time significantly.  As for TV I’ve cut the cord and no longer subscribe to cable TV.  Instead I use Netflix, RedBox, and over the air channels but again with reduced time consumption.  With the time I’ve freed up I’m back to working out 2-3 times a week and reading 4 nights a week (both of which I had been neglecting previously).  I’ll mention a few tools for helping measure your time in the Tools section.

 

Processes

   Do not multi-task.  I’ll say it again.  Do not multi-task.  There is no such thing as multi tasking.  The human brain is optimized to work on one thing at a time.  When you are “multi-tasking” you are really doing 2 or more things at less than 100%, usually by a wide margin.  I take pride in my work and when I’m doing something less than 100% the results typically degrade rapidly.

   Now there are some ways of bending the rules of physics for this one.  There is the notion of getting a double amount of work done in the same timeframe.  Some examples would be listening to podcasts / watching a movie while working out, using a treadmill as your work desk, or reading while in the bathroom.

   Personally I’ve found good results in combining one task that does not require focus (making dinner, playing certain video games, working out) and one task that does (watching a movie, listening to podcasts).  I believe this is related to me being a visual and kinesthetic (using my hands or actually doing it) learner.  I’m terrible with auditory learning.  My fiance and I joke that sometimes we talk and talk to each other but never really hear each other.

 

Goals / Tasks

   Goals can give us direction in life and a sense of accomplishment when we complete them.  Goals can also overwhelm us and give us a sense of failure when we don’t complete them.  I propose that you shift your perspective and not dwell on all of the things that you haven’t gotten done, but focus instead on regularly setting measureable goals that are within reason of accomplishing.

   At the end of each time frame have a retrospective to review your progress.  Do not feel guilty about what you did not accomplish.  Feel proud of what you did accomplish and readjust your goals for the next time frame to more attainable goals.  Here is a sample schedule I’ve seen proposed by some.  I have not consistently set goals for each timeframe, but I do typically set 3 small goals a day (this blog post is #2 for today).

  • Each day set 3 small goals
  • Each week set 3 medium goals
  • Each month set 1 large goal
  • Each year set 2 very large goals

 

Tools

   Tools are an extension of our human body.  They help us extend beyond what we can physically and mentally do.  Below are some tools I use almost daily or have found useful as of late.

Disclaimer: I am not getting endorsed to promote any of these products.  I just happen to like them and find them useful.

Instapaper – Save internet links for reading later.  There are many tools like this but I’ve found this to be a great one.  There is even a “read it later” JavaScript button you can add to your browser so when you navigate to a site it will then add this to your list.

Stacks for Instapaper – A Windows Phone 7 app for reading my Instapaper articles on the go.  It does require a subscription to Instapaper (nominal $3 every three months) but is easily worth the cost.  Alternatively you can set up your Kindle to sync with Instapaper easily but I haven’t done so.

News.me – News.me is a web service that will aggregate the top stories from your Facebook or Twitter stream and then send you a daily email.  I used to use a service that got bought by Twitter a few months ago, but I’ve honestly forgotten the name of that company.  I now use a combination of News.me and Instapaper to read news stories on my time schedule instead of constantly checking Twitter all day long.

SlapDash Podcast – Apps for Windows Phone and  Windows 8 (possibly other platforms) to sync podcast viewing / listening across multiple devices.  Now that I have my Surface RT device (which I love) this is making my consumption easier to manage.

Feed Reader – Simple Windows 8 app for quickly catching up on my RSS feeds.  I used to have hundreds of unread items all the time.  Now I’m down to 20-50 regularly and it is much easier and faster to consume on my Surface RT.  There is also a free version (which I use) and I can’t see much different between the free and paid versions currently.

Rescue Time – Have you ever wondered how much time you’ve spent on websites vs. email vs. “doing work”?  This service tracks your computer actions and then lets you report on them.  This can help you quantitatively identify areas where your actions are not in line with your priorities.

PowerShell – Windows automation tool.  It is now built into every client and server OS.  This tool has saved me days (and I mean the full 24 hrs worth) of time and effort in the past year alone.  If you haven’t started learning PowerShell and are administrating any Windows OS or server product you need to start learning PowerShell today.

Various blogging tools – I wrote a post a couple years ago called How I Blog about my blogging process and tools used.  Almost all of it still applies today.

 

Personal Health

   Some of these may be common sense or debatable, but I’ve found them to help prioritize my daily activities.

  • Get plenty of sleep on a regular basis.  Sacrificing sleep too many nights a week negatively impacts your cognition, attitude, and overall health.
  • Exercise at least three days.  Exercise could be lifting weights, taking the stairs up multiple flights of stairs, walking for 20 mins, or a number of other "non-traditional” activities.  I find that regular exercise helps with sleep and improves my overall attitude.
  • Eat a well balanced diet.  Too much sugar, caffeine, junk food, etc. are not good for your body.  This is not a matter of losing weight but taking care of your body and helping you perform at your peak potential.

 

Email

   Email can be one of the biggest time consumers (i.e. waster) if you aren’t careful.

  • Time box your email usage.  Set a meeting invite for yourself if necessary to limit how much time you spend checking email.
  • Use rules to prioritize your email.  Email from external customers, my manager, or include me directly on the To line go into my inbox.  Everything else goes a level down and I have 30+ rules to further sort it, mostly distribution lists.
  • Use keyboard shortcuts (when available).  I use Outlook for my primary email and am constantly hitting Alt + S to send, Ctrl + 1 for my inbox, Ctrl + 2 for my calendar, Space / Tab / Shift + Tab to mark items as read, and a number of other useful commands.  Learn them and you’ll see your speed getting through emails increase.
  • Keep emails short.  No one Few people like reading through long emails.  The first line should state exactly why you are sending the email followed by a 3-4 lines to support it.  Anything longer might be better suited as a phone call or in person discussion.

 

Conclusion

   In this post I walked through various tips and tricks I’ve found for improving personal productivity.  It is a mix of re-focusing on the things that matter, using tools to assist in your efforts, and cutting out actions that are not aligned with your priorities.  I originally had a whole section on keyboard shortcuts, but with my recent purchase of the Surface RT I’m finding that touch gestures have replaced numerous keyboard commands that I used to need.  I see a big future in touch enabled devices.  Hopefully some of these tips help you out.  If you have any tools, tips, or ideas you would like to share feel free to add in the comments section.

 

      -Frog Out

 

Links

Scott Hanselman Productivity posts

http://www.hanselman.com/blog/CategoryView.aspx?category=Productivity

Overcome your work addiction

http://blogs.hbr.org/hbsfaculty/2012/05/overcome-your-work-addiction.html?awid=5512355740280659420-3271

 

Millennials paralyzed by choice

http://priyaparker.com/blog/millennials-paralyzed-by-choice

 

Its Not What You Read Its What You Ignore (video)

http://www.hanselman.com/blog/ItsNotWhatYouReadItsWhatYouIgnoreVideoOfScottHanselmansPersonalProductivityTips.aspx

 

Cutting the cord – Jeff Blankenburg

http://www.jeffblankenburg.com/2011/04/06/cutting-the-cord/

 

Building a sitting standing desk – Eric Harlan

http://www.ericharlan.com/Everything_Else/building-a-sitting-standing-desk-a229.html

 

Instapaper

http://www.instapaper.com/u

 

Stacks for Instapaper

http://www.stacksforinstapaper.com/

 

Slapdash Podcast

Windows Phone -

 http://www.windowsphone.com/en-us/store/app/slapdash-podcasts/90e8b121-080b-e011-9264-00237de2db9e

Windows 8 -

http://apps.microsoft.com/webpdp/en-us/app/slapdash-podcasts/0c62e66a-f2e4-4403-af88-3430a821741e/m/ROW

 

Feed Reader

http://apps.microsoft.com/webpdp/en-us/app/feed-reader/d03199c9-8e08-469a-bda1-7963099840cc/m/ROW

 

Surface RT

http://surface.microsoftstore.com/store/msstore/Content/pbpage.Surface?ESICaching=off

 

Rescue Time

http://www.rescuetime.com/

 

PowerShell Script Center

http://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx



What I’m Up To: November 2012

   This is a short personal post to let any regular readers know what I’m up to (and why I’ll be in reduced blogging mode for a bit).

  • Writing 2 chapters for a SharePoint 2013 book (more to announce closer to publish date)
  • Doing research, proof of concepts, and testing for above said writing
  • Developing a SharePoint PowerShell diagnostic script to clean up issues found by the Health Analyzer
  • Prepping for teaching SharePoint 2013 content to customers

   There are some other community and personal commitments taking up my time (in addition to normal work responsibilities).  Since the number of hours in a day is limited to 24 hours I’m making a late addition to my goals for 2012 for the year of learning and adopting more personal productivity practices.  Before the end of this year I’ll be posting a couple that I’ve already adopted that are working well for me.  Scott Hanselman posted a great video recently that sparked me down this path.  I highly recommend you watch.

 

“It’s not what you read it’s what you ignore” video – Scott Hanselman

http://www.hanselman.com/blog/ItsNotWhatYouReadItsWhatYouIgnoreVideoOfScottHanselmansPersonalProductivityTips.aspx

 

      -Frog Out