Skip to main content
Question

Installing an Application via Policy to a user's Application folder


Forum|alt.badge.img+3

I have two options for the Application, DMG and PKG.

What I need to do is ensure that the application is deployed to the currently logged in user's Applications folder (or all local user's Applications folder). At the moment, having just put the package in the Repository, and having created a policy with a Package inside it, it is being installed to "/".

I know that this is because I haven't changed the Target Drive. I was hoping I could use "/Users/$USERNAME/Applications" to do some kind of variable substitution, but it creates a literal "$USERNAME" folder.

How do I get a package onto an Apple device using JAMF that installs to the user's Applications folder?

Thanks :)

7 replies

Forum|alt.badge.img+18
  • Contributor
  • 475 replies
  • May 2, 2019

In the package, is it just a .app?


Forum|alt.badge.img+8

If you're building your PKG via Composer, just drop your .app in a folder named "Applications". Also, make sure the permissions are configured correctly before finalizing it.


Forum|alt.badge.img+7
  • Contributor
  • 29 replies
  • May 2, 2019

You probably ought to use a postinstall script for the package or a script that runs after the package installs via policy. The script could go through every user home directory and copy the app from a central, temporary location to the Applications directory within. Something like this:

#!/bin/bash

# Identify the name of the app
APP_NAME="AppName.app"

# Identify the path to where the package places the app
TEMP_APP_PATH="/path/to/$APP_NAME"

# Loop through all home directories in /Users/
for user_home in "/Users/"*; do

    # Get the username for the current home directory
    username="$(/usr/bin/basename "$user_home")"

    # Skip the Shared directory. Duplicate this line and substitue Shared
    # for other user home directories you know you need to skip.
    [ "$user" = "Shared" ] && continue

    # Identify the user's Applications directory
    user_app_dir="$user_home/Applications"

    # Create the user's Applications directory if it does not exist
    if [ ! -d "$user_app_dir" ]; then
        /bin/mkdir "$user_app_dir"
        /bin/chmod 755 "$user_app_dir"
        /usr/sbin/chown "$username" "$user_app_dir"
    fi

    # Copy the app from the temp location to the user's Application directory
    /bin/cp "$TEMP_APP_PATH" "$user_app_dir/$APP_NAME"
done

exit 0

Forum|alt.badge.img+5
  • Contributor
  • 39 replies
  • June 25, 2019

Is it possible to use @ChrisCox script above and pull parameter values from a policy for the app name and app path? This would allow for one script that can be used in multiple policies to install different applications in the user directory Applications folder. If so, what changes would need to be made to pull those values in for the app name and app path variables?


Forum|alt.badge.img+7
  • Contributor
  • 29 replies
  • June 25, 2019

@Gascolator, if I understand your question, you can definitely do this with just a little modification. Just assign the script parameters to variables instead of hardcoding in the name and path. Then you could use this script for several different apps in several different policies with different script parameters for each.

#!/bin/bash

# Parse Jamf Pro script parameters
APP_NAME="$4"
TEMP_APP_DIR="$5"
PERM_APP_DIR="$6"

# Identify the temporary and permamant paths for the app
TEMP_APP_PATH="$TEMP_APP_DIR/$APP_NAME"
PERM_APP_PATH="$PERM_APP_DIR/$APP_NAME"

# Loop through all home directories in /Users/
for user_home in "/Users/"*; do

    # Get the username for the current home directory
    username="$(/usr/bin/basename "$user_home")"

    # Skip the Shared directory. Duplicate this line and substitue Shared
    # for other user home directories you know you need to skip.
    [ "$user" = "Shared" ] && continue

    # Identify the permanent path to the app in the user's home directory
    user_app_dir="$user_home$PERM_APP_DIR"

    # Create the directory if it does not exist
    if [ ! -d "$user_app_dir" ]; then
        /bin/mkdir "$user_app_dir"
        /bin/chmod 755 "$user_app_dir"
        /usr/sbin/chown "$username" "$user_app_dir"
    fi

    # Copy the app from the temporary location to the permanent one
    /bin/cp "$TEMP_APP_PATH" "$user_app_dir/$APP_NAME"
done

exit 0

Forum|alt.badge.img+5
  • Contributor
  • 39 replies
  • June 25, 2019

@ChrisCox that's exactly what I'm looking for. That's where I was headed in my mind but wasn't sure if it was the correct way to proceed. I'll give that a try. I have several drag and drop .app files I want to install in the Applications folder in the user's home directory instead of root Applications folder. This should allow me to do that. Thanks.


Forum|alt.badge.img+7
  • Contributor
  • 29 replies
  • June 25, 2019

No problem. Looking back at it I noticed I made a couple mistakes on lines 23 and 33. I already went back in and edited it, so make sure you get the updated version.


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings