OneDrive Next Gen (2016)

//OneDrive Next Gen (2016)
OneDrive Next Gen (2016) 2016-01-15T22:07:56+00:00

The Toolkit Forums Deployment Scripts OneDrive Next Gen (2016)

  • Author
    Posts
  • Pierrick
    Participant
    Post count: 15
    #1020 |

    Hello,

    Microsoft released the new OneDrive Next Generation (Build 17.3.6281.1202) in order to replace Groove, the syncing tool built-in to Office 2013. However, there is no automatic deployment and you have to script and deploy it with GPO/SCCM.

    PSAppDeployToolkit was a perfect choice !

    My script proceeds as follows:
    – unsync the user’s library (clear the OneDrive caches from %LocalAppData% without deleting any personal data)
    – disable the Groove process (rename Groove.exe to Groove.exe.OLD, which is totally impactless)
    – silent-install OneDrive NG
    – auto-launch OneDrive NG in the Business configuration (don’t forget to change your Tenant ID in the 3rd part of the script)

    – User has already synced with Groove and will not be prompted to enter his account (O365)
    – User has never used Groove and is prompted to enter his UPN’s account (UPN format for SSO)username@any.domain.company.com

    Download :
    http://1drv.ms/1KgX4Uy

    Pierrick

  • Pierrick
    Participant
    Post count: 15
    • Stefan
      Participant
      Post count: 2

      Pierrick, your both links seems to be broken

      the script sounds interesting, can you please share it

      thank you

  • Pierrick
    Participant
    Post count: 15

    Oh, it seems we have to rebuild a new link sometimes !

    https://onedrive.live.com/redir?resid=1C235E3F778E4F17!16543&authkey=!APajn9D5gVLjAw4&ithint=file%2cps1

    Hope this script will helps you, don’t hesitate to share your comments

  • Pierrick
    Participant
    Post count: 15

    Finally, should be easier if I copy/paste the code here

    <#
    .SYNOPSIS
    This script performs the installation or uninstallation of an application(s).
    .DESCRIPTION
    The script is provided as a template to perform an install or uninstall of an application(s).
    The script either performs an “Install” deployment type or an “Uninstall” deployment type.
    The install deployment type is broken down into 3 main sections/phases: Pre-Install, Install, and Post-Install.
    The script dot-sources the AppDeployToolkitMain.ps1 script which contains the logic and functions required to install or uninstall an application.
    .PARAMETER DeploymentType
    The type of deployment to perform. Default is: Install.
    .PARAMETER DeployMode
    Specifies whether the installation should be run in Interactive, Silent, or NonInteractive mode. Default is: Interactive. Options: Interactive = Shows dialogs, Silent = No dialogs, NonInteractive = Very silent, i.e. no blocking apps. NonInteractive mode is automatically set if it is detected that the process is not user interactive.
    .PARAMETER AllowRebootPassThru
    Allows the 3010 return code (requires restart) to be passed back to the parent process (e.g. SCCM) if detected from an installation. If 3010 is passed back to SCCM, a reboot prompt will be triggered.
    .PARAMETER TerminalServerMode
    Changes to “user install mode” and back to “user execute mode” for installing/uninstalling applications for Remote Destkop Session Hosts/Citrix servers.
    .PARAMETER DisableLogging
    Disables logging to file for the script. Default is: $false.
    .EXAMPLE
    Deploy-Application.ps1
    .EXAMPLE
    Deploy-Application.ps1 -DeployMode ‘Silent’
    .EXAMPLE
    Deploy-Application.ps1 -AllowRebootPassThru -AllowDefer
    .EXAMPLE
    Deploy-Application.ps1 -DeploymentType Uninstall
    .NOTES
    Toolkit Exit Code Ranges:
    60000 – 68999: Reserved for built-in exit codes in Deploy-Application.ps1, Deploy-Application.exe, and AppDeployToolkitMain.ps1
    69000 – 69999: Recommended for user customized exit codes in Deploy-Application.ps1
    70000 – 79999: Recommended for user customized exit codes in AppDeployToolkitExtensions.ps1
    .LINK

    The Toolkit


    #>
    [CmdletBinding()]
    Param (
    [Parameter(Mandatory=$false)]
    [ValidateSet(‘Install’,’Uninstall’)]
    [string]$DeploymentType = ‘Install’,
    [Parameter(Mandatory=$false)]
    [ValidateSet(‘Interactive’,’Silent’,’NonInteractive’)]
    [string]$DeployMode = ‘Interactive’,
    [Parameter(Mandatory=$false)]
    [switch]$AllowRebootPassThru = $false,
    [Parameter(Mandatory=$false)]
    [switch]$TerminalServerMode = $false,
    [Parameter(Mandatory=$false)]
    [switch]$DisableLogging = $false
    )

    Try {
    ## Set the script execution policy for this process
    Try { Set-ExecutionPolicy -ExecutionPolicy ‘ByPass’ -Scope ‘Process’ -Force -ErrorAction ‘Stop’ } Catch {}

    ##*===============================================
    ##* VARIABLE DECLARATION
    ##*===============================================
    ## Variables: Application
    [string]$appVendor = ‘Microsoft’
    [string]$appName = ‘OneDrive’
    [string]$appVersion = ‘17.3.6281.1202’
    [string]$appArch = ‘x86’
    [string]$appLang = ‘FR’
    [string]$appRevision = ’01’
    [string]$appScriptVersion = ‘3.6.7’
    [string]$appScriptDate = ’01/11/2016′
    [string]$appScriptAuthor = ‘PIELUCAS’
    ##*===============================================

    ##* Do not modify section below
    #region DoNotModify

    ## Variables: Exit Code
    [int32]$mainExitCode = 0

    ## Variables: Script
    [string]$deployAppScriptFriendlyName = ‘Deploiement OneDrive Next Gen’
    [version]$deployAppScriptVersion = [version]’11.01.2016′
    [string]$deployAppScriptDate = ’11/01/2016′
    [hashtable]$deployAppScriptParameters = $psBoundParameters

    ## Variables: Environment
    If (Test-Path -LiteralPath ‘variable:HostInvocation’) { $InvocationInfo = $HostInvocation } Else { $InvocationInfo = $MyInvocation }
    [string]$scriptDirectory = Split-Path -Path $InvocationInfo.MyCommand.Definition -Parent

    ## Dot source the required App Deploy Toolkit Functions
    Try {
    [string]$moduleAppDeployToolkitMain = “$scriptDirectory\AppDeployToolkit\AppDeployToolkitMain.ps1”
    If (-not (Test-Path -LiteralPath $moduleAppDeployToolkitMain -PathType ‘Leaf’)) { Throw “Module does not exist at the specified location [$moduleAppDeployToolkitMain].” }
    If ($DisableLogging) { . $moduleAppDeployToolkitMain -DisableLogging } Else { . $moduleAppDeployToolkitMain }
    }
    Catch {
    If ($mainExitCode -eq 0){ [int32]$mainExitCode = 60008 }
    Write-Error -Message “Module [$moduleAppDeployToolkitMain] failed to load: n$($_.Exception.Message)n `n$($_.InvocationInfo.PositionMessage)” -ErrorAction ‘Continue’
    ## Exit the script, returning the exit code to SCCM
    If (Test-Path -LiteralPath ‘variable:HostInvocation’) { $script:ExitCode = $mainExitCode; Exit } Else { Exit $mainExitCode }
    }

    #endregion
    ##* Do not modify section above
    ##*===============================================
    ##* END VARIABLE DECLARATION
    ##*===============================================

    If ($deploymentType -ine ‘Uninstall’) {
    ##*===============================================
    ##* PRE-INSTALLATION
    ##*===============================================
    [string]$installPhase = ‘Pre-Installation’

    ## Show Welcome Message, close Office apps, allow up to 3 deferrals, and verify there is enough disk space to complete the install
    Show-InstallationWelcome -CloseApps “winword,excel,onenote,outlook,winproj,visio” -AllowDefer -DeferTimes 2 -CheckDiskSpace

    ## Display Pre-Install cleanup status
    Show-InstallationProgress -StatusMessage ‘[1/3] Mise à niveau OneDrive…’

    # Unset Groove
    Write-Log -Message ‘Déconfiguration de Microsoft Office Groove’ -Source $deployAppScriptFriendlyName
    Execute-ProcessAsUser -Path “powershell.exe” -Parameters “cmd.exe /C RD /S /Q %LOCALAPPDATA%\Microsoft\Office\15.0\OfficeFileCache”
    Execute-ProcessAsUser -Path “powershell.exe” -Parameters “cmd.exe /C RD /S /Q %LOCALAPPDATA%\Microsoft\Office\Spw”

    ##*===============================================
    ##* INSTALLATION
    ##*===============================================
    [string]$installPhase = ‘Installation’

    Show-InstallationProgress -StatusMessage ‘[2/3] Mise à niveau OneDrive…’
    Execute-Process -Path “$scriptDirectory\Files\OneDriveSetup.exe” -Parameters “/silent” -WindowStyle Hidden

    ##*===============================================
    ##* POST-INSTALLATION
    ##*===============================================
    [string]$installPhase = ‘Post-Installation’

    Show-InstallationProgress -StatusMessage ‘[3/3] Mise à niveau OneDrive…’
    Rename-Item -Path “$env:CommonProgramFiles\Microsoft Office 15\root\office15\GROOVE.EXE” -NewName “$env:CommonProgramFiles\Microsoft Office 15\root\office15\GROOVE.EXE.OLD”
    Execute-ProcessAsUser -Path “powershell.exe” -Parameters “cmd.exe /C DEL /F /Q %LOCALAPPDATA%\Microsoft\Windows\Start Menu\Programs\Microsoft Office 2013\OneDrive Entreprise 2013.lnk”
    Execute-ProcessAsUser -Path “powershell.exe” -Parameters “cmd.exe /C DEL /F /Q %LOCALAPPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\OneDrive Entreprise.lnk”
    Execute-ProcessAsUser -Path “powershell.exe” -Parameters “cmd.exe /C DEL /F /Q %USERPROFILE%\Links\OneDrive.lnk”
    Execute-ProcessAsUser -Path “powershell.exe” -Parameters “cmd.exe /C RD /S /Q %USERPROFILE%\OneDrive”
    Start-Sleep -Seconds 2
    Execute-ProcessAsUser -Path “powershell.exe” -Parameters “cmd.exe /C %LOCALAPPDATA%\Microsoft\OneDrive\OneDrive.exe /configure_business:<TenantID>”
    Start-Sleep -Seconds 2
    }
    ElseIf ($deploymentType -ieq ‘Uninstall’)
    {
    ##*===============================================
    ##* PRE-UNINSTALLATION
    ##*===============================================
    [string]$installPhase = ‘Pre-Uninstallation’

    ## Show Welcome Message, close applications that cause uninstall to fail
    Show-InstallationWelcome -CloseApps ‘onedrive’

    ## Show Progress Message (with the default message)
    Show-InstallationProgress

    ##*===============================================
    ##* UNINSTALLATION
    ##*===============================================
    [string]$installPhase = ‘Uninstallation’

    Execute-Process -Path “$scriptDirectory\Files\OneDriveSetup.exe” -Parameters “/uninstall” -WindowStyle Hidden -IgnoreExitCodes ‘1,2,3’

    ##*===============================================
    ##* POST-UNINSTALLATION
    ##*===============================================
    [string]$installPhase = ‘Post-Uninstallation’

    ## <Perform Post-Uninstallation tasks here>
    }

    ##*===============================================
    ##* END SCRIPT BODY
    ##*===============================================

    ## Call the Exit-Script function to perform final cleanup operations
    Exit-Script -ExitCode $mainExitCode
    }
    Catch {
    [int32]$mainExitCode = 1
    [string]$mainErrorMessage = “$(Resolve-Error)”
    Write-Log -Message $mainErrorMessage -Severity 3 -Source $deployAppScriptFriendlyName
    Show-DialogBox -Text $mainErrorMessage -Icon ‘Stop’
    Exit-Script -ExitCode $mainExitCode
    }

    • This reply was modified 1 year, 5 months ago by  Pierrick.
  • Zak
    Participant
    Post count: 3

    Did you use SCCM to deploy this and if so did you create an application or package? Again assuming you used SCCM if it was a package that you used did you use run as admin or user?

  • Zak
    Participant
    Post count: 3

    I went ahead and created a package calling Deploy-Application.exe. Configuring the package to run as administrator allowing user interaction. The result is what I’ve been battling with my own solutions. The OneDrive configuration thinks it is being run as an administrator.

    • Pierrick
      Participant
      Post count: 15

      Dear Zak,

      My script uses a PSADT function which is called “Execute-ProcessAsUser”. It generates a XML as current user which is currently logged on, so you’ve to set your program to run it “Only when a user is logged on” and “Run with user’s right” (refer to the PSADT documentation). In my company, we have one user per computer but I can advise you to “Run once for every user who logs on” in the Advanced panel from your program.

      Be careful, as part of an OSD installation, OneDrive can’t be installed when no user has already been logged on because it only works with an existing AppData.

      Execute-ProcessAsUser = Logged in Username under which to run the process from. Default is: The active console user. If no console user exists but users are logged in, such as on terminal servers, then the first logged-in non-console user.

  • Zak
    Participant
    Post count: 3

    I got it working I had to add -RunLevel ‘LeastPrivilege’ to the OneDrive.exe call used to configure the tenantId to prevent it from trying to run with higher elevation. I also added in checking for the client install and if the client had previously been configured. Thank you for the great deployment script!

    • This reply was modified 1 year, 5 months ago by  Zak.
    • Pierrick
      Participant
      Post count: 15

      Glad you liked this deployment script and thank you for your contribution Zak !

  • Joel
    Participant
    Post count: 1

    Thanks for the code you shared – can you provide insight into the detection method you leveraged for SCCM Application? Was it PowerShell, VBscript or simple file detection?

    • Pierrick
      Participant
      Post count: 15

      Joel, you understand that Onedrive leaves almost no system borrow. I suggest you add a registry key in HKCU\SOFTWARE or something to keep a trace of its installation.

  • Jason
    Participant
    Post count: 2

    Awesome work here and its close to what I am looking for? My only question is how would this work if we are using roaming profiles and the local profile is removed at logoff?

    • Pierrick
      Participant
      Post count: 15

      We’re using some Wyse devices (with volatile profile) in our organization and I could try this scenario in my spare time.
      Keep in mind than OneDrive is user-based and will be only stored in the %APPDATA% path, so you’ll have to reinstall it (GPO, SCCM, scheduled job..) and let it download all datas at each login.

      • This reply was modified 1 year, 3 months ago by  Pierrick.
      • This reply was modified 1 year, 3 months ago by  Pierrick.
  • Jason
    Participant
    Post count: 2

    Thanks, just confirmed what I was thinking.

You must be logged in to reply to this topic.