Browsed by
Category: SharePoint 2013

Ignite is sold out?!? Now what?

Ignite is sold out?!? Now what?

For the past 2 years I have been honored to be the Speaker co-chair for the SharePoint Intersections Conference with Dan Holme. This year SharePoint Intersections is in Scottsdale, Arizona, May 18-21and the line up is epic. We have Ruven Gotz, Asif Rehmani, Scott Hillier, Mike Fitzmaurice, Brian Alderman, Mark Rackley, Michelle Caldwell, and Andrew Connell to name a few.

DevIntersection is co-located with SharePoint Intersection. This means that developers can take advantage of sessions not only about SharePoint, but also about Visual Studio, ASP.NET, HTML, SQL and open web standards like angular, from the absolute best speakers on those topics.

SharePoint Intersection features great content for Developers, IT Pros, and business owners of SharePoint and Office 365. We’ll be covering hybrid, security, governance, workflow and business process automation, and much, much more.

There will be dozens of awesome presenters including Microsoft’s own Jeremy Thake, Scott Hanselman, Scott Guthrie and Steve Guggenheimer so you’ll get to hear both the “Microsoft” and the “independent” perspective on todays’ and tomorrow’s technologies, including all of the big news from Ignite.

And a Surface for Free…

SharePoint Intersection just announced a ridiculously cool package. If you register for the Complete Package, which includes the event and 2 workshops, you will get the recently-announced Surface 3, for free!

Shirley Brothers and her team work tirelessly to ensure a great event experience, with delicious food and a gorgeous venue–the five-star Fairmont Scottsdale Princess resort. All that, with a price tag lower than Ignite and a Surface on your desk to build your next SharePoint or Office 365 project!

Register today at http://www.spintersection.com/Sharepoint-Office365-Conference/!

Order is everything when setting up SharePoint on Azure IaaS

Order is everything when setting up SharePoint on Azure IaaS

I spent a bunch of time with my buddy Kirk Evans while at DevConnections in Las Vegas last month, some drinking and watching football, but mostly learning about running SharePoint on Azure. Azure IaaS has come a long way, but is still confusing & troublesome at times. I have written a few PowerShell tools that help me and I will share them in some future posts.

I started playing with SharePoint on Azure IaaS on my own without doing much reading. My goal in this was to see how intuitive it was to get things setup and going for the average person. Once in the console creating a VM was very quick and simple. I was up and running on a pre-built Windows Server image in no time. This was great.

Then I decided that I wanted to build a SharePoint farm. I deployed out 2 addtional VMs. I built an Active Directory and attempted to join the other 2 servers to the domain. This is where I ran into problems.

There are some building blocks that need to first be put in place before you start building servers if you want them to be able to communicate with one another.

The first is the Affinity Group (AG). An AG is required before you can create a Virtual Network. The way that Kirk explained it, the AG is a container to keep your Virtual Network in a single data center. To create an AG you will either use PowerShell or go to Settings at the bottom of the Management Portal and find Affinity Groups as the fourth of five options.

1-1-2014 10-30-49 PM

Next create the Virtual Network and assign it ot the AG.

2

After the Virtual Network is created you will be able to setup a Cloud Service. The Cloud Service is going to be the container for your VMs.

3

This process sounds uber simple, but the order of things matters here. Now you can create your VMs. Once you have your VMs and your DNS server built you can go in and specify the Domain Controller as a DNS server.

This is where you will hit a snag. In the normal course of events you would be running a domain controller on a static IP address. Unfortunately this is not something that you can do on Azure IaaS. Every time you deprovision a VM, which you have to do unless you want to get charged, your IP address reservation can get taken by another machine.

My solutions to this problem was fairly simple:

1.) Create a virtual network for each of my environments
2.) Always start the VMs in the same order so that they pick up the same IP address each time

The first part was easy, however the second part is difficult when you get beyond one or two people using the same Azure subscription. I needed an easier way to ensure that my VMs would start in a specific order. After a late night with one of my favorite single malts I came up with a fairly simple PowerShell solution.

set-AzureVMs.ps1
As a result of my conversations with Kirk, and some annoyance at the inconsistent nature of shutting down VMs using the Management Portal, I decided to look into how I could shutdown my VMs using PowerShell. There is a nice cmdlet for doing this called stop-AzureVM.

Since I want to do this for a set of VMs I needed to be able to run a for-each loop, so I wrote a start and stop function into the script.

4

I started to use a CSV or text file method for loading the VMs that I wanted to start and stop together when I realized that I didn’t want to have to maintain a series of files on every environment that I create and then distribute that to my team. Not to mention that I have multiple Azure subscriptions that I am using for clients and personal use. The management of that would get cumbersome quickly.

Then I remembered that all of the VMs that I will want to use together are going to be a part of the same Azure Cloud Service (ACS) and that each farm or group of servers that I want to use will have their own unique ACS. There is a cmdlet to get all of the ACS in an Azure Subscription called get-AzureService. I have opted to get the Service Name, Affinity Group, and status of the ACS in my script.

5

The status field is not overly useful, but if something other than “Created” is returned it is worth investigating since that is the expected value.

6

Once you have the correct ACS the script will list the VMs that exist within and ask if you want to start or stop them.

The obvious question at this point is “How does this solve the IP address problem that you set out to solve?”

The answer is that the script will always start and stop the VMs in a specific order. Starting the VMs using this script will ensure that the same IP addresses are obtained every time.

The script was originally designed to solve this problem however I have been using it to ensure that my VMs get shutdown cleanly rather than using the Management Portal which, as I mentioned earlier, is inconsiestent at best.

I hope that you find this as useful as I do. I have been using this script since I wrote it Thanksgiving weekend and I stopped tweaking about a week ago. You can find the script here: http://www.jasonhimmelstein.com/scripts/Azure/set-AzureVMs/set-AzureVMs.ps1

Enjoy!

SharePoint Intersections wrap up

SharePoint Intersections wrap up

We just closed out the first SharePoint Intersections show in Las Vegas and I am enroute to SPSDFW but wanted to share my decks from the show:

Business Intelligence in SharePoint 2013

SharePoint 2013 Admin in the Hybrid World

This was a very enjoyable show during which I got to sit in on a recording of Andrew Connell (@andrewconnell) & Chris Johnson’s (@LoungeFlyZ) new podcast “MICROSOFT CLOUD SHOW“. I’m not sure when our episode will drop, but it will be worth a listen. Most of the speakers from the show stopped by and we had a bit of fun with the AC & CJ during the show.

New in Office 365: Power View in HTML5 Preview

New in Office 365: Power View in HTML5 Preview

During my final session of SharePoint Fest Chicago on Wednesday I was doing a demo of Power View using my Office 365 E3 tenant & came across something new, that I had only previously seen in Power BI. The new feature in question is the Power View using HTML5.

Here is what we saw:

2

Naturally this caused some immediate excitement, referred to by one in attendance as a nerdgasm, as this feature had been promised to us since PASS last year. Here is what we found as we walked through the preview…

First, I hovered over the icon the following tool tip showed up:

a

Once clicked, we flipped over to the new HTML5 preview and the following announcement showed up in the lower left hand corner of the screen:

3

The “More Info” link here takes you over to a support article on the Microsoft site that contains a list of what is and is not supported under the preview as well as some great FAQs, the highlights I will list at the close of this article.

The first thing that happened when I clicked into the new HTML5 preview was that I got a failure message. Currently the preview does not support hierarchies or drilldown, both of which were present in the Power View that I was attempting to demo.

4

I switched to a different Power View to demo that was simply a line graph with some slicers and this is what I got:

5

It looked pretty great to me at first, until I stopped and looked at the slicers. I flipped out of the HTML5 preview to validate that my Power View was built correctly and it was.

6

The fields that were represented incorrectly in the slicers were text fields, not numeric fields. Specifically what is supposed to show here is the text of month & day of the week names. Intestingly, the “Quarter” field is a concatenated field using the DAX equation of =Concatenate(“Q”,[QuarterofYear]). Not yet sure why this is happening, but as we are dealing with a preview here there is an expectation of bugs.

Here are a couple of important things from the Microsoft Support FAQ regarding the Power View for HTML5 Preview:

1.) Currently only IE 10 & higher are supported. Other browsers may work, but are not supported at this time.
2.) The preview is only available in English today.
3.) The only way to make the HTML5 Preview the default view for Power View is to uninstall Silverlight
4.) There is still not support for embedding a Power View into an app or page, though they state they know this is a big one and are considering it for a future release.

The bottom line here is that this is a preview, not the final product. Regardless, I am über excited that it is finally here.

DevConnections 2013 Recap

DevConnections 2013 Recap

DevConnections 2013 was an amazing conference, as it has in all years past. The attendees are always hyper-engaged and come with tons of questions. As a presenter, nothing makes me happier than helping people understand the concepts I am covering better than when they walked into my sessions.  Thanks to Scot Hillier for being an amazing track chair and moderating the panel on Tuesday afternoon.

During DevConnections I did 3 sessions (2 of which were recorded) and a panel session (also recorded).  SharePoint Pro Magazine is selling access to all 60 hours of recorded content from the show.  You can find details about this at http://windowsitpro.com/itdev-connections

I have been hearing from folks that my slides are not accessible on the site, so if you are looking for my content please look no further:

PowerShell for the Anxious ITPro

SharePoint Performance – Best Practices from the Field

Business Intelligence in SharePoint 2013

Time for the second half of my crazy SharePoint road trip… See you at SharePoint Fest Chicago!

Setting up SharePoint Online collaboration with external users

Setting up SharePoint Online collaboration with external users

One of the key enhancement in SharePoint 2013 is the ease of sharing. Being able to share a site, library, or piece of content is as easy as clicking on the Share button and specifying a user and assigning the rights you want them to have. This, along with the new licensing model that allows non-organizational users to use your SharePoint environment without requiring a CAL or FIS licensing for the farm, have made SharePoint 2013 target for extranets.

Once a site collection is established sharing with external users is quick and easy. The one thing that is that upon intial setup of a private site collection in SharePoint Online is to setup sharing with external parties. By default sharing is set to “Don’t allow sharing outside your organization”. When you attempt to share with outside people from a site collection that still has this set you get a message that no results are found when typing in an email address.

no sharing

To change this you need to log into the SharePoint admin center select the site collections tab on the left nav and then select the site collection you wish to enable external sharing for.

O365 Site Collections

Once selected click on the Sharing option in the ribbon and set the option to “Allow external users who accept sharing invitations and sign in as authenticated users”. This will allow you to share securely with specified users.

SPO External sharing

Once this is set return to your site collection and attempt to share again. You should find a result based upon the email address that you entered now.

yes sharing

If you prefer to allow users to share links and allow external parties to access the site collection without having to authenticate you can chose the “Allow both external users who accept sharing invitations and anonymous guest links”.

PowerShell Script: SharePoint Farm Creation

PowerShell Script: SharePoint Farm Creation

For a long time I have been meaning to rewrite the PowerShell script that I have been using to do my SharePoint farm creation and just haven’t gotten around to completing the necessary effort to make it all that I want it to be. I have leveraged the work of others, borrowing a piece here and a snippet there but to honest I haven’t been satisfied.

What I really wanted was a script that I can use in my consulting practice as a normalized practice of how a farm should be deployed as well as a script that I could use in the highly repetitive process of doing ITPro dev work. I wanted something that was flexible enough to use for client installs, but repeatable enough that I could use it in my dozens of farm builds that I do in my spare time for troubleshooting and fun.

Here are the key points of what I did differently with this script:

  1. use temporary variables that can be accepted or overridden at the PowerShell command-line when the script is called
    SNAGHTML37d3721b
  2. validate if the pieces have been implemented correctly & gives information about what piece failed, not just throwing the ugly PowerShell errors that we are used to seeing
    SNAGHTML37d4db9e
  3. validate that you are using PowerShell running as Administrator to ensure that you won’t fail for that silly reason
    SNAGHTML37d64475
  4. pulls the system & domain variables rather than having to set those parameters manually
    SNAGHTML37d7b73f

I am happy to report that I was able to accomplish all of these things in my script and am happy to offer it up for others to use if you see fit. I highly recommend that you consider using the PowerShell profile that I laid out in my previous article “How to: Automatically log your PowerShell session everytime” so that you can, among other things, capture the output of building your farm.

There are very few people who can honestly say that they created their PowerShell scripts completely from scratch, and I am certainly not among them. Credit is due for snippets & reference to Shannon Bray, Gary LaPointe, Brian Lalancette, Todd Klindt, & I’m sure others. Special appreciation to Evan Riser for helping me QA this script. 

One last thing to note about this script… it does just what it says it does. It creates a SharePoint farm.  This is not an all inclusive build your farm & configure every setting script. If you are looking for the all inclusive, über build & configure script please go visit Brian’s codeplex project: AutoSPInstaller. There is no need for anyone to recreate the amazing work that he has done. 

The reason I create this scripts like this is that I prefer to break my scripts down into pieces and keep them highly modular. This is partly because I consult on such a wide variety of projects that it makes my life easier to be able to deploy pieces at a time using different scripts. It also could be that I am a neurotic, lunatic control freak who is a bit over obsessed with developing in PowerShell for fun.  Hopefully it’s more the first thing than the second thing… 🙂

I will continue to publish the scripts that I find useful here in the hopes that it helps someone else along the way. You can find my SharePoint Farm Creation PowerShell script here on my SkyDrive.

How to: Create Active Directory Users using PowerShell

How to: Create Active Directory Users using PowerShell

Not unlike several posts in recent weeks, tonight’s adventures in PowerShelling started with from a conversation at SharePoint Saturday New Hampshire with the Iowan treasure Todd Klindt. The conversation was around the script that he used to create Active Directory users. I had my own bit of jumbled together code for this purpose, but his has some snazzy ifelse-ness to it and the ability to set Managers and add Pictures that made it especially appealing.

At the same time there were things in his script that I felt were a bit lacking and it lead to the whole “I can write that code in 2 hours” game not unlike a name that tune style geek-out.

Rather than reiterating all of the goodness that Todd built into his version of the script I will refer you to his post: http://www.toddklindt.com/PoshMakeUsers to read all of his fun comments.

Instead I will regale you with the updates that I have made:

  1. Specify an OU – I am an old school AD guy at heart and I HATE a mess Users directory where I can’t find anything. I always end up moving my SQL & SharePoint Service accounts to their own OU, as well as my dummy test accounts. This tweak to the script asks you what OU you want the accounts created in and then will create the OU if it doesn’t already exist (given you have those rights). If you hit enter it will default to attempting to place the accounts in an OU called “SharePoint Service Accounts”.
  2. Prompt for the CSV input file – I have multiple files that I use in different dev environments for different purposes: a.) SQL service accounts b.) SharePoint service accounts c.) Dummy user accounts d.) Smart user accounts e.) etc, etc, etc. The script now prompts for which CSV file you want to import the users from. Hitting enter when prompted will look for a file called Users.csv in the local running directory.

    **Updated**

  3. Change the default passwordOn Todd’s Netcast tonight he mentioned this little bit of code, however I hadn’t actually written it yet. Nothing like throwing down the gauntlet there, Mr. Klindt! In response I whipped up version 3.1 of the script which now allows you to change the default password as a variable when run. If you choose nothing it will default to the pass@word1 standard.

Here is a copy of the code:

# Script to create Active Directory accounts
# v3.1 11/26/2012
# Updated by Jason Himmelstein
# http://www.sharepointlonghorn.com
# Based upon the script by Todd Klindt
# http://www.toddklindt.com

# Add the Active Directory bits and not complain if they're already there
Import-Module ActiveDirectory -ErrorAction SilentlyContinue

$OU= Read-Host -Prompt "Enter OU name you want. Press Enter for SharePoint Service Accounts"
If ($OU -eq "") {$OU = 'SharePoint Service Accounts'}
$FQDN = (Get-ADDomain).DistinguishedName

If ([adsi]::Exists("LDAP://OU=$OU, $FQDN") -eq $True){
write-host "The OU already exist" -ForegroundColor DarkGreen -BackgroundColor Gray}
else{dsadd ou "ou=$OU,$FQDN"}

$OU_specified = "ou=$OU,$FQDN"

# specify the file location
$csvfile = 'users.csv'
$userfile = Read-Host -Prompt "
Enter the location of the CSV file containing the users you want to import. Press Enter for $csvfile"
If ($userfile -eq "") {$userfile = $csvfile}

# set default password
# change pass@word1 to whatever you want the account passwords to be
$userpassword = Read-Host -Prompt "Enter default password you wish to set for all of these accounts. Press Enter for pass@word1"
If ($userpassword -eq "") {$userpassword = 'pass@word1'}
$password = (ConvertTo-SecureString $userpassword -AsPlainText -Force)

# Get domain DNS suffix
$dnsroot = '@' + (Get-ADDomain).DistinguishedName

# Import the file with the users. You can change the filename to reflect your file
$users = Import-Csv $userfile

foreach ($user in $users) {
if ($user.manager -eq "") # In case it's a service account or a boss
 {
try {
New-ADUser -SamAccountName $user.SamAccountName -path $OU_specified -Name ($user.FirstName + " " + $user.LastName) `
-DisplayName ($user.FirstName + " " + $user.LastName) -GivenName $user.FirstName -Surname $user.LastName `
-EmailAddress ($user.SamAccountName + $dnsroot) -UserPrincipalName ($user.SamAccountName + $dnsroot) `
-Title $user.title -Enabled $true -ChangePasswordAtLogon $false -PasswordNeverExpires  $true `
-AccountPassword $password -PassThru `
                    }
catch [System.Object]
 {
Write-Output "Could not create user $($user.SamAccountName), $_"
 }
            }
 else
 {
try {
New-ADUser -SamAccountName $user.SamAccountName -path $OU_specified -Name ($user.FirstName + " " + $user.LastName) `
-DisplayName ($user.FirstName + " " + $user.LastName) -GivenName $user.FirstName -Surname $user.LastName `
-EmailAddress ($user.SamAccountName + $dnsroot) -UserPrincipalName ($user.SamAccountName + $dnsroot) `
-Title $user.title -manager $user.manager `
-Enabled $true -ChangePasswordAtLogon $false -PasswordNeverExpires  $true `
-AccountPassword $password -PassThru `
                    }
catch [System.Object]
 {
Write-Output "Could not create user $($user.SamAccountName), $_"
 }
             }
 # Put picture part here.
 $filename = "$($user.SamAccountName).jpg"
 Write-Output $filename

 if (test-path -path $filename)
            {
Write-Output "Found picture for $($user.SamAccountName)"

 $photo = [byte[]](Get-Content $filename -Encoding byte)
Set-ADUser $($user.SamAccountName) -Replace @{thumbnailPhoto=$photo} 
            }
   }

If you are looking for the downloadable PowerShell or text file version, please find them linked below. Happy PowerShelling!

powershell notepad

Office 2013 has reached RTM… SharePoint, Lync & Exchange as well.

Office 2013 has reached RTM… SharePoint, Lync & Exchange as well.

The big news of the [yester]day (after presenting at NHSPUG & then doing other work this post won’t actually go up until morning) is that Office 2013 has reached RTM.  Big excitement for those of us who are already huge fans, but especially exciting is the announcement that Office, SharePoint, Exchange and Lync will all be dropping at the same time.  The MSDN & TechNet availability is stated to be “mid-November” (can’t imagine what event that might coincide with​) and Volume License with SA customers will have availability by December 1.  General Availability is expected in Q1 of 2013.  For a feature overview please refer back to my post SharePoint 2013 Unveiled!

office While Office, SharePoint, Lync and Exchange are all completely separate products with different product teams within Microsoft and their own processes and development methodologies it is very impressive that everything has come together for this release and was announced by Kirk Koenigsbauer, the Corporate VP of the Microsoft Office Division.  It was a unified message that was echoed by the rest of the products.  We know the tight integration across this version of the stacks, but this seems like a pretty big shift to a unified stance within Microsoft. 

SharePoint

The biggest statement in the post from my perspective is: “We will begin rolling out new capabilities to Office 365 Enterprise customers in our next service update, starting in November through general availability.”  This suggests that the shift that many of us have been predicting is coming to pass and that true availability of this version of SharePoint is going to be in Office 365 first. 

Lync

The announcement coming from Kirk seems to signal that Microsoft is pushing these 4 very distinct products together and that, ready or not, Office 365 is THE future.  It seems like a question of when, not if we are going to see Microsoft abandon the on premises model for these products.  I hope that I am reading the tea leaves wrong, but that is certainly what it is looking like after today.  </prognostication>

Exchange

Read the entire post on the Office News Blog site here, The SharePoint Team Blog announcement can be found here, the Exchange Team Blog announcement can be found here, and the Lync Team Blog announcement can be found here.

Getting PowerPivot & Power View working in Office 2013

Getting PowerPivot & Power View working in Office 2013

One of the many exciting features of Office 2013 is that PowerPivot now comes as a part of the installation & Power View is now available in the client for Excel 2013 , rather than being an post installation add-in for PowerPivot and web resident only for PowerView.  PowerPivot is still a COM add-in, but is not more tightly integrated with the product & Power View is now a COM Add-in.

I upgraded to Office 2013, removing the 2010 version, on Monday night and immediately I was faced with a problem.  PowerPivot showed in the ribbon, but was not clickable! After attempting to click in the greyed out bar for about 5 minutes I started digging in.  I found that PowerPivot was active in the Add-ins section, but something didn’t seem quite right:

1

This Add-in was the SQL 2012 version.  Once I unchecked this and went back to the Add-ins section I found the newer version of PowerPivot was now available.  There was a conflict with the older version blocking the newer version from being able to be activated.

2

Once I checked “Microsoft Office PowerPivot for Excel 2013” (and Power View since I was already here and excited to check it out) the Manage option in the ribbon lit up and I was off to the races.

3

Since I still need to do work with PowerPivot v2 models and am not willing to upgrade everything to the beta version yet, I did re-install Office 2010 and now have the fun experience of two PowerPivot tabs in my ribbon in Excel 2013 (doesn’t happen in Excel 2010), but if I disable the older version of PowerPivot in 2013, it disables it in 2010 as well. 

4

5

I have yet to have an issue with having both add-ins active at once since reactivating the older version, as the active add-in is the only one that lights up.

6

More to come on the great new features of PowerPivot, Power View and Inquire, but for now its time to get back to my vacation smile