Install E10 Client Files and Icons - Using Powershell Script

Hello. :slight_smile:

I’ve been seeing a lot of posts here lately of people asking how to Install or Update the E10 Client Files on User PCs and Laptops (or even Servers).

I’m not sure if this will be helpful or if I’m just going to embarrass myself :blush: but I wanted to share what I did to push out the E10 client files to our ~100 User PCs and Laptops (this even works on Terminal Servers like Citrix) to see if it might be of some help to someone.

Disclaimer: Please understand that this is only ever the second Powershell script that I’ve written in my life so it is very basic and there are probably much better ways to program this process but this is what worked for me. Please change the script in a way that makes sense to you and please understand the paths that you are using inside this script. And TEST, TEST, TEST on a single system to make sure it is working the way you need it to.

So here’s what I did…

First I copied all of the .16 Update Client files (the latest version we are on currently) from my \erplive\Epicor\ERP10\ERP10.1.600.0\Updates\ERP10.1.600.16\ClientDeployment\ReleaseClient.zip location:

And pasted them into our \erplive\ERP10.1.600.0Deployment\Client folder so that all of the .16 client file updates were applied to this single Client file location. (This allowed me to bring together ALL of the Client files that were needed to run the Client with our latest dot patch release into one folder that could be copied to each machine.)

image

I also created a folder that contained the E10 icon shortcuts (Shell, Classic and MES) so that they could be copied from this location to the local system by the Powershell script too:

You want to make sure that each icon is setup to point to the location on the local machine where the client files will be installed:

I created this Powershell script to copy the E10 client files and icon shortcuts locally to the PC or Laptop (or Server) that the user was logged into at the time of running it:

$LocalInstall_E10Path = 'C:\Epicor\ERPLIVE_101600Client\'
$E10ClientFilesSource = '\\erplive\ERP10.1.600.0Deployment\Client\'
$LocalE10IconsPath = 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Epicor Software\Epicor ERP Version 10.1 Client\ERPLIVE\'
$IconsShortcutSource = '\\server1\d\mis_data\Drivers and Programs\Epicor\Epicor 10\Migration from E9\_Falcon Migration\Client Installation\ERPLIVE Icons\'

    #If there is already an ERPLIVE_101600Client file out there DELETE it and all of its contents completely.
    If (Test-Path $LocalInstall_E10Path)
        {

           #Check Date on Existing E10 Client File Folder and if older than specified Date value, re-install Client Files     and Icons otherwise exit Script and do not run.
            $OldInstall = Get-Item $LocalInstall_E10Path | Where-Object {$_.LastWriteTime.Date -lt "12/01/2017"}
            If (-NOT($OldInstall))
            {
                Exit
            }
            Else
            {
                Remove-Item $LocalInstall_E10Path* -Recurse -Force
            }
        }
		
    #If there is already an Existing ERPLIVE_10.1.600Client Folder, DELETE it and all of its contents completely.
    If (Test-Path $LocalInstall_E10Path)
        {
            Remove-Item $LocalInstall_E10Path -Recurse -ErrorAction SilentlyContinue
        }

    #Create new Local E10 Client Folder and Copy entire ERPLIVE E10 Directory contents into it 
    New-Item -Path $LocalInstall_E10Path -ItemType Directory -Force
    Copy-Item $E10ClientFilesSource $LocalInstall_E10Path -Recurse -Force


    #If there is already an Icons Folder, DELETE it and all of its contents completely.
    If (Test-Path $LocalE10IconsPath)
        {
            Remove-Item $LocalE10IconsPath -Recurse -ErrorAction SilentlyContinue
        }

        #Create new Icons Folder and Copy Icon Shortcuts from a Shared Folder on the Network into it
        New-Item -Path $LocalE10IconsPath -ItemType Directory
        Copy-Item $IconsShortcutSource* $LocalE10IconsPath -Recurse 


    #Desktop Path for All Users - Place E10 Icon Shortcuts here
    $E10DesktopIconsPath = 'C:\Users\Public\Desktop\Epicor Software'

    #Create Empty Shortcut Icon Shell in Public Desktop folder
    $WScriptShell = New-Object -ComObject WScript.Shell
    $E10Shortcut = $WScriptShell.CreateShortcut($E10DesktopIconsPath + '.lnk')

    #Link the Shortcut Shell to path where E10 Icons exist
    $E10Shortcut.TargetPath = 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Epicor Software\'
    $E10Shortcut.Save()

I created a new shortcut in a shared location (easy access to all of my users) that pointed to my Powershell Script. All they had to do was just right-click on the Read-Only shortcut and choose Run As Administrator…. (this is KEY to getting the PS script to run successfully) They watch the little command box pop up and after a few minutes disappear and they have the E10 client installed locally on their system.

Here is my Powershell script Shortcut Target path with some options set for running the Script:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy RemoteSigned -command "& '\server1\D\mis_data\Drivers and Programs\Epicor10\PSS_InstallE10ClientFiles.ps1

Once the script is complete you should see the following on the PC/Laptop/Server:

An “Epicor Software” folder shortcut on the desktop which contains the three E10 icons (Shell, Classic and MES):

And all of the client files needed locally in the C:\Epicor\ERPLIVE_101600Client\Client folder:

image

I wanted to mention that there is some code in this PS script where it checks the LastWriteTime date of the E10 Client files directory, if it exists. I have this in there because I was going to try to schedule this as a startup script using Active Directory and I didn’t want AD to constantly copy over the Client files every time someone logged in if the files were up-to-date, so I put this check of - only copy if LastWriteTime is older than a particular date - option in here. It does save my bacon if someone on a Citrix server tries to run this script on their own and if, as it tries to update the files, they cancel the process half-way through then it will mess up the Client on the Citrix server for everyone. So it is a good safety to have in there…. I have not yet had time to figure out the AD setup to run this as a startup script (and if anyone has any helpful instructions on how to do that I’d love to hear them!) so I just had all of my users run the script manually through the shortcut and it seemed to work just fine.

I’m sure there are better ways to deploy the E10 client and to schedule a Powershell Script or something else to perform this task but this is what worked for me and I wanted to share it and hopefully it will help someone or at the very least trigger some ideas on how to do it in the best way that works for you. :wink:

Thanks,
-Heather :slight_smile:

17 Likes

Nice share.

1 Like

Thank you SO MUCH! :blush:

Heather,
Very very nice. Perhaps in a future EUG Meeting we can do a Epicor & PowerShell Theme, you can share this and I could share DMT Powershell.

3 Likes

Thank you @Rick_Bird! :slight_smile:

Oh my goodness! That’s a great idea! I’m not sure how well I can speak on Powershell even after this experience but I can try my best to at least explain this little script. :wink: And I’d love to learn more about your PS DMT experiences! I’ll run that suggestion by @Beth and see if we could do something like that during one of our next meetings! :smiley:

This post has been a big help for me as I have been looking at how I would get this installed on all our clients and I have not received a clear answer from Epicor so that you @ERPSysAdmin and @Rick_Bird is there a link to what you have done with DMT Powershell

Thanks

1 Like

Hi @GTI07094! Thank you so much for your post and I’m so glad that this post has been a help to you!!!

@Rick_Bird has presented at past Insights on the things he’s done with PowerShell and he has a lot of great links with DMT Powershell that I’m sure he would love to share with you on projects he’s done with PS. And there are a lot of posts here on epiusers.help that would be a great help! I haven’t done much with DMT and PS yet.

Not sure if you are interested but here is a modified version of the PS Epicor Client Files Installation code above. I added a fancy-smancy progress bar for the deletion and copying of files. And a prompt to let the user know when it is complete. Definitely not the greatest program in the world but it does the job for us. :wink:

$LocalInstall_E102Path = 'C:\Epicor\ERPLIVE102\Client'
$ExistingLocalInstall_E102Path = 'C:\Epicor\ERPLIVE102\Client'
$E102ClientFilesSource = '\\servername\ERP10.2.400.0Deployment\Client\'
$E102IconsPath = 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Epicor Software\Epicor ERP10.2 Client\ERPLIVE102\'
$IconsShortcutPath = '\\servername\Epicor\Epicor 10\Client Installation\ERPLIVE102 Icons\'

function Delete-ProgressBar
{
    Param([string]$filePath)
    
   #Create a container called $ListOfFiles and store the name of each file from the $filePath value ($ExistingLocalInstall_E102Path) that was sent to the Delete_ProgressBar function below.  
    $ListOfFiles = Get-ChildItem -Path $filePath -Recurse | Where-Object {!$_.PSIsContainer}
          #Step through each file in the $ListOfFiles container
           for ($i = 0; $i -lt $ListOfFiles.count; $i++) 
            { 
               #Write the name of each file that is being deleted and display the percentage complete as a progress bar
                Write-Progress -Activity 'Deleting files...' -Status $ListOfFiles[$i].FullName -PercentComplete (($i / $ListOfFiles.Count) * 100)
               #Delete the file
                Remove-Item -Path $ListOfFiles[$i].FullName -Recurse -ErrorAction SilentlyContinue #-Force - for hidden or read-only files #-WhatIf
            }
             Write-Progress -Activity 'Deleting files...' -Completed -Status "All done."
}


function Copy-ProgressBar
{
    Param([string]$fromPath, [string]$toPath)                                                  
                #Grab each file located in the $fromPath variable location ($E102ClientFilesSource) that was sent to the Copy-ProgressBar function below 
               $files = Get-ChildItem -Path $fromPath 
                [Double]$i = 0;
               #Go through each file in $files
                foreach ($file in $files)
                { 
                  #Does the file already exist?
                   If (! (Test-Path $LocalInstall_E102Path\$file))
                   { 
                      #If not, then copy the file to the $toPath variable location ($LocalInstall_E102Path) that was sent to the Copy-ProgressBar function below
                        Copy-Item -Path $files[$i].FullName $toPath -Recurse -Force
                        $i++;
                       #Display the percentage complete as a progress bar
                        Write-Progress -Activity 'Copying files...' -Status $file.FullName -PercentComplete (($i / $files.Count) * 100)
                    }
                }
}

	
#If there is already an Existing ERPLIVE102 Folder, DELETE it and all of its contents completely.
If (Test-Path $ExistingLocalInstall_E102Path)
    {

            Delete-ProgressBar $ExistingLocalInstall_E102Path
            Remove-Item $ExistingLocalInstall_E102Path* -Recurse -ErrorAction SilentlyContinue #-Force
    }



#Create new Local ERPLIVE102 Folder and Copy entire ERPLIVE102 E102 Directory contents into it 
New-Item -Path $LocalInstall_E102Path -ItemType Directory -Force
#Copy-Item $E102ClientFilesSource $LocalInstall_E102Path -Recurse -Force
Copy-ProgressBar $E102ClientFilesSource $LocalInstall_E102Path


#If there is already an Icons Folder, DELETE it and all of its contents completely.
If (Test-Path $E102IconsPath)
    {
        
        
        Remove-Item $E102IconsPath* -Recurse -Force #-ErrorAction SilentlyContinue #-Force
        Remove-Item $E102IconsPath -Force
		#$E102IconsPath | % {$_.Delete()}
    }

    #Create new Icons Folder and Copy Icon links from a Shared Folder on the Network into it
    New-Item -Path $E102IconsPath -ItemType Directory #-ErrorAction SilentlyContinue -Force
    Copy-Item $IconsShortcutPath* $E102IconsPath -Recurse #-Force
    [System.Windows.Forms.MessageBox]::Show('Epicor 10.2.400 Installation Complete!', 'OK') 

And I still setup the PS shortcuts as explained in the original post above so that the user just goes to a shared location, right-clicks on the PS Shortcut, Runs As Administrator, and it will install the Client on their computer. If you have any questions about this or need any help please let me know!

Thanks again for the feedback! I’m so happy to know this post was helpful! :slight_smile:

1 Like

thank you @ERPSysAdmin for the update and always looking to make this an easier process and I don’t get a lot of helpful feedback from Epicor.

Just curious will this work with a public cloud instance on prem?

What I did was copy my install of files from my local machine to one of our vm serves.

Does anyone know where I should get zp files that Epicor is talking about below:

  1. One could create their own install mechanism using PowerShell or another scripting language that extracts the releaseclient.zip and update.zip file from the deployment folder location.

Your ReleaseClient.zip folder is located in the, for example, \Epicor\ERP10\ERP10.1.600.0\ClientDeployment folder. I’m not sure where the update.zip file is located?

Heather - is that for on prem or SaaS as I do not have a ClientDeployment Folder?

Thank you for the help though

SaaS users get their client from the Azure Content Delivery Network via https.

Mark - I have been able to take the client folder on my machine, zip that up and safe it on the file server. I have been able to copy that to new workstation and set up the icons and it works well. Is there something I am missing doing this?

Once I change from the name of the server to IP address, the process has worked well on all systems. Power Shell script to copy the zip file down and unzip the folder. Copy the shortcut folder over users can connect with no concerns.