Pierrick

//Pierrick
Pierrick

Forum Replies Created

Viewing 13 posts - 1 through 13 (of 13 total)
  • Author
    Posts
  • Pierrick
    Participant
    Post count: 15

    Kevin is right,

    Thanks to your screenshot, I see you’re using the smart quotes ”” (in HTLM code).
    This is a typical issue which can be an huge loss of times !

    Be careful when you copy/paste from the Web and replace them with ASCII quotes.

    Refer to this article: http://windowsitpro.com/powershell/powershell-got-smart-about-smart-quotes

  • Pierrick
    Participant
    Post count: 15

    Kevin,

    This is because Deploy-Application.exe calls “powershell.exe -ExecutionPolicy Bypass” !
    This is a good suggestion. 🙂

  • Pierrick
    Participant
    Post count: 15

    William,

    Are you trying to specify the drive letter but keeping his own default install path ? Assuming that your OS is not installed on the C:\ partition, you should use the “INSTALLDIR=” or “TARGETDIR=” switch with the full desired path, in this way:
    msiexec.exe /i your.msi TARGETDIR=”C:\your\specific\path”

    Or simply, I never tried it but could you test this following command line, before executing your MSI:
    set RootDrive=C

    You can check the result by typing “set rootdrive”

  • Pierrick
    Participant
    Post count: 15

    Hello Jacob,

    Managing the Current User context seems to be nothing but a real need ! =)

    Assuming your Current User is logged on, you can easily import a reg file with the following command line:
    Execute-ProcessAsUser -Path “reg.exe” -Parameters “import file.reg”

    Let me know the result !

  • Pierrick
    Participant
    Post count: 15

    Jan,

    You have an issue related to your $computer variable. Despite the fact that I don’t really understand the concept of “location” with your programs, the Task Sequence do not seems to rely with your computer name.

    Do you work in a WinPE OS ? So, use the following command lines to avoid that your script will looking for machinename inside the WinPE OS.
    $tsenv = New-Object -COMObject Microsoft.SMS.TSEnvironment
    $tsenv.Value(‘OSDComputerName’)

    Do you work directly on the operating system during the Task Sequence ?
    Prefer to use $env:COMPUTERNAME

  • Pierrick
    Participant
    Post count: 15

    Hello Sid !

    Your script works but the toolkit not. I think you’re having an issue with your HKCU settings. When you deploy with SCCM, the SYSTEM account is used and have to be set to work with.
    I made a script to deploy the OneDrive sync tool. I have described a way to manage the current user scenario.

    In this kind of deployment, I could suggest you to use Powershell DSC (Desired State Configuration). You will have more flexibility to manage configurations and nodes.

  • 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

    #>
    [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
    }

  • 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
  • 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.

  • 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.

  • Pierrick
    Participant
    Post count: 15

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

  • 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.

Viewing 13 posts - 1 through 13 (of 13 total)