OneDrive for Business Managed Deployment

Overview

OneDrive for Business is cloud storage for business similar to the personal experience provided by OneDrive. It's the place where employees can store, sync, and share their files across multiple devices with ease and security.  Built through the evolution of personal sites, OneDrive for Business provides the ability for an organization to provide their users enterprise grade data mobility across devices and screens and includes both a synchronization client for offline availability and simple upload experience and a Web UX to manage content through the rich capabilities of SharePoint.

Mobile View

OneDriveWeb

Web View

OneDriveUX

Managed Deployment Overview

Organizations can deploy the OneDrive for Business synchronization client by allowing their users to download the rich client and/or app at https://onedrive.live.com/about/en-us/download/ or optionally deploy to users using Click-To-Run technology for a managed, IT-led approach.

Scenario

Steps

Example Configuration.xml

IT Managed Internal OneDrive for Business Deployment

Step 1 Customize a Click-To-Run for Office 365 installation as documented at http://technet.microsoft.com/en-us/library/jj219422.aspx.

Step 2 Create a custom Configuration.xml configuration file (see example and refer to the article above for additional guidance).

Step 3 Download the OneDrive for Business Click-To-Run deployment source and copy to a network location accessible to the target users.

Step 4 Specific configuration options and product ID details as documented at http://technet.microsoft.com/en-us/library/jj219426.aspx.

 

Sample 

\serversharesetup.exe /download \servershareCustomConfiguration.xml.

<Add SourcePath="\servershareC2R_deploy" OfficeClientEdition="32" >

    <Product ID="GrooveRetail">

      <Language ID="en-us" />

    </Product>

  </Add>

IT Managed OneDrive for Business Silent Desktop Deployment

(SxS w/ Office 2010)

Refer to Steps 1-3 above and configure the custom Configuration.xml to specify the configuration options for deployment as documented at http://technet.microsoft.com/en-us/library/jj219426.aspx (see example for additional guidance).

 

Sample

\serversharesetup.exe /configure \servershareCustomC2RConfig.xml

  <Add SourcePath="\servershareC2R_deploy" OfficeClientEdition="32" >

    <Product ID="GrooveRetail">

      <Language ID="en-us" />

    </Product>

  </Add>

<Display Level="None" AcceptEULA="TRUE" />

Resources

OneDrive for Business [https://onedrive.live.com/about/en-us/business/]

OneDrive for Business Plans and Pricing [https://onedrive.live.com/about/en-us/plans/]

Download OneDrive for Business [https://onedrive.live.com/about/en-us/download/]

Office Deployment Tool for Click-to-Run [http://technet.microsoft.com/en-us/library/jj219422.aspx]

Reference for Click-to-Run Configuration.xml File [http://technet.microsoft.com/en-us/library/jj219426.aspx]

Quick Starting Demos and Windows PowerShell

Preparing virtual machines for demonstrations can be a tedious process, compounding this is when virtual machines need to be started or shut down in a specific order.  For example, starting database servers prior to starting web servers, or starting the preferred active node before the passive node.  Starting those machines; however, is only a portion of the process, in most cases you will want them to be “available” before starting a subsequent machine.  For example, having an iSCSI Target available before the consuming iSCSI initiators are available.  Windows PowerShell, is perfect to support this scenario – it’s something I use almost everyday and have shared an example (below) of how you can accomplish all of these tasks…

So what does it do?

Provides parameters to Start/Shut Down one or more virtual machines.

Checks for process elevation, escapes if the script is not run elevated.

Starts the Hyper-V Virtual Machine Management Service if not running.

Iterates through an array of virtual machines stored in a .txt file.

Starts each virtual machine in the .txt file and waits for the heartbeat status to report ‘OK’ before starting the next virtual machine in the list.  Virtual machines are started in the order they appear in the source file, waiting ensures a clean start up – particularly where a defined start order with dependencies exists.

Shuts down virtual machines in the reverse order they were started by reading the source file bottom to top.  Waits for the virtual machine heartbeat status to report ‘’ before processing the next virtual machine.

Displays a progress bar to report on the status of the operation.

Script

[CmdletBinding(ConfirmImpact="Low")]

Param(
     [Parameter(Mandatory=$True,Position=0,ValueFromPipeline=$False,HelpMessage="Operation to perform on one or more virtual machines.")][ValidateSet("Start","Stop")]
     [String]$operation,
     [Parameter(Mandatory=$True,Position=1,ValueFromPipeline=$False,HelpMessage="Collection of virtual machines on which operation is to be performed.")][ValidateNotNullorEmpty()]
     [String]$source
)

$ErrorActionPreference = "Stop"

Process
{
     $identity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
     $principal = New-Object System.Security.Principal.WindowsPrincipal($identity)
     $role = [System.Security.Principal.WindowsBuiltInRole]::Administrator
     $elevated = $principal.IsInRole($role)

     If ($operation -eq "Start")
     {
         $service = Get-Service -Name vmms

         If ($service.Status -ne "Running")
         {
             Try
             {
                 If ($elevated)
                 {
                     Start-Service $service

                     Write-Host "Starting the Hyper-V Virtual Machine Management Service."

                     Start-Sleep -s 10

                     Clear-Host
                 }
                 Else
                 {
                     Write-Host "Requires elevation."
                     break
                 }
             }
             Catch
             {
                 [System.Exception]
                 Write-Host "Could not start Virtual Machine Management Service."
                 break
             }
         }

         $exists = Test-Path "$(Get-Location)$source.txt" 

         If ($exists -eq $True)
         {
             Try
             {
                 $list = Get-Content "$(Get-Location)$source.txt"
             }
             Catch
             {
                 [System.Exception]
                 break
             }
         }
         Else
         {
             Write-Host "The file could not be found: $source.  The document name or path is not valid."
             break
         }

         For ( $count = 0; $count -lt $list.Count; $count++
         { 
             $guest = $list[$count]

             $progress = 100 / $list.Count * ($count + 1)

             Write-Progress -Activity "Starting virtual machine…" -CurrentOperation "Starting…" -Status $guest -PercentComplete $progress

             Try
             {
                 If ($elevated)
                 {
                     Start-VM -Name $guest
                 }
                 Else
                 {
                     Write-Host "Requires elevation."
                     break
                 }
             }
             Catch
             {
                 Write-Host "Could not start virtual machine(s)."
                 break
             }

             Write-Progress -Activity "Starting virtual machine…" -CurrentOperation "Waiting…" -Status $guest -PercentComplete $progress

             do {Start-Sleep -milliseconds 100
             until ((Get-VMIntegrationService $guest | ?{$_.name -eq "Heartbeat"}).PrimaryStatusDescription -eq "OK")
         }
     }

     ElseIf ($operation -eq "Stop")
     {
         $exists = Test-Path "$(Get-Location)$source.txt" 

         If ($exists -eq $True)
         {
             Try
             {
                 $list = Get-Content "$(Get-Location)$source.txt"
             }
             Catch
             {
                 [System.Exception]
                 break
             }
         }
         Else
         {
             Write-Host "The file could not be found: $source.  The document name or path is not valid."
             break
         }

         For ($count = $list.Length1; $count -ge 0 ; $count)
         { 
             $guest = $list[$count]

             $progress = 100 / $list.Count * ($count + 1)

             Write-Progress -Activity "Stopping virtual machine…" -CurrentOperation "Stopping…" -Status $guest -PercentComplete $progress
    
             Try
             {
                 Stop-VM -Name $guest
             }
             Catch
             {
                 Write-Host "Could not stop virtual machine."
                 break
             }

             Write-Progress -Activity "Stopping virtual machine…" -CurrentOperation "Waiting…" -Status $guest -PercentComplete $progress

             do {Start-Sleep -milliseconds 100
             until ((Get-VMIntegrationService $guest | ?{$_.name -eq "Heartbeat"}).PrimaryStatusDescription -ne "OK")
         }

         Start-Sleep -s 10

         If ($elevated)
         {
             Try
             {
                 Stop-Service vmms
                 Write-Host "Stopping the Hyper-V Virtual Machine Management Service…"
             }
             Catch
             {
                 [System.Exception]
                 Write-Host "Could not stop the Hyper-V Virtual Machine Management Service."
                 break
             }
         }
         Else
         {
             Write-Host "Requires elevation."
             break
         }

         Clear-Host
     }
}

Usage

Using the scripts requires 1) saving the attached script as <name>.ps1 2) creating source .txt file with virtual machines listed in the preferred start up order.  For example,

Machine1

Machine2

Machine3

3) Saving the script and source .txt file in the same location.

4) Running the script as <name>.ps1 –Operation Start –Source <name>

Yammer Redirection in SharePoint Server 2013 Service Pack 1

In previous articles I discussed redirecting OneDrive for Business to Office 365 in SharePoint Server 2013 Service Pack 1.  In addition to new functionality that allows IT administrators to redirect OneDrive for Business and Sites pages to Office 365, Service Pack 1 also allows IT administrators to activate Yammer as the default social experience for SharePoint Server 2013.

When activated, the Newsfeed link in the navigation bar is replaced with a Yammer link that directs users to the organizations’ Yammer network. 

Yammer Configuration page in Central Admin

While a simplified Activate/Deactivate configuration is provided in Service Pack 1, proper identity management planning is required to deliver a consistent and integrated user experience.

For organizations with an established Active Directory and identity management infrastructure and practices

Directory Synchronization with Office 365 is a distinct configuration that provides an integrated identity solution for applications within the Office 365 suite with the exception of Yammer.  Integrated identity with Yammer requires a separate implementation of a directory synchronization solution provided by Yammer, Yammer Directory Sync (DSync).

Similar to Directory Synchronization, Yammer Directory Sync (DSync) is a Windows application that automates user provisioning in your Yammer network by querying your Active Directory (AD) host(s).

 

Sites Page

The Sites page introduced in SharePoint Server 2013 is designed to provide users a unified location to create new sites and view sites they are following.

Managing Sites Page Redirection

Service Pack 1 also includes within OneDrive for Business redirection the option to redirect users Sites page to Office 365.

Example 1 C#

        static void Main(string[] args)
        {
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://sharepoint.spc.com.co"));
 
                foreach (SPSite site in webApp.Sites)
                {
                    foreach (SPWeb web in site.AllWebs)
                    {
                        if (web.Features != null)
                        {
                            web.Features.Remove(new Guid("{043C4BDD-9745-441a-A9A7-0BCD9B910319}"));
                        }
                    }
                }
            });
        }

Example 1 Windows PowerShell

This example can be used to deactivate a specific Feature across all sites within the specified Web application.

$webApp = Get-SPWebApplication -Identity http://sharepoint.contoso.com

$webApp | Get-SPSite -limit all | ForEach-Object {Disable-SPFeature -Identity “FeatureName” -Url $_.Url}

The Uninstall-SPFeature cmdlet removes the specified feature definition from the collection of feature definitions in the farm.

Uninstall-SPFeature –Identity

Other Social Capability Considerations

In addition to addressing scenarios such as Following Content you should also consider the management of other SharePoint Server 2013 social capabilities such as:

  • Removing the SharePoint Server social web parts from My Sites and Team Sites.
  • Hiding user interface controls that provide social functionality.

For additional information on replacing the social features in SharePoint Server 2013 with equivalent Yammer features in a SharePoint Server 2013 on-premises deployment see also http://technet.microsoft.com/en-us/library/dn270535(v=office.15).aspx.

Resources

Add Yammer to the navigation bar for SharePoint 2013 [http://technet.microsoft.com/en-us/library/dn627521(v=office.15).aspx]

SharePoint 2013 and Office 365 Hybrid

The French philosopher, Henry Bergson, once said “to exist is to change, to change is to mature, to mature is to go on creating oneself endlessly.” While the Nobel Prize winner wasn’t talking about the software and services world, the thought is extremely applicable to technology- from development to administration to use. The adoption of, and change to, cloud computing is maturing at a rapid rate…but the move needs to be thoughtful.

At Microsoft we are truly embracing this change through our cloud first/mobile first mantra and we have seen customer interest grow for all of our maturing cloud services, in a very significant way- from IaaS capabilities in Microsoft Azure, to gaming and entertainment consumption in XBOX Live to our productivity and collaboration solutions for Office 365. In all cases, customers love the time to value, cadence of new and helpful features and predictive costs that the cloud computing offers.

However, we also know that the move to cloud doesn’t happen all at once. In Office 365, we have seen incredible interest and growth for all of our services, including SharePoint Online. To that end, we absolutely recognize customers need to balance their desire to adopt SharePoint Online, while still maintaining existing, on-premises, SharePoint Server investments until the time when they can be migrated to the cloud.

For those customers ready to thoughtfully embrace the change to cloud, we are committed to helping you with our hybrid models and tools so you can leverage the Microsoft Cloud to change your business endlessly. We believe the future of work is how we build relationships, share information, and respond to conditions that can change at a moment’s notice, Office 365 is the cornerstone of our response, and with our current and future investments we’re helping to bring you there with as little friction as possible.

For more information and to understand what hybrid scenarios can do for your business see the following resources:

Check out new downloadable content you can share with your organization at http://technet.microsoft.com/en-us/library/dn769084(v=office.15).aspx

Learn more about Hybrid Models with SharePoint and Office 365 [http://technet.microsoft.com/en-us/library/jj838715(v=office.15).aspx]

Download Hybrid SharePoint 2013 Resources [http://technet.microsoft.com/en-us/library/jj838715(v=office.15).aspx]

Check back often as we continue to innovate on our hybrid vision to help you realize the best of on-premises and the cloud.