Script Help: Logged On user

ernstcs
Contributor III

This is the dumbest thing, but I need some help with some scripting if
possible.

I have a policy that calls a shell script that's already local on the box
(why it has to be local I won't get into here) when a particular set of
users logs on as defined in the policy. So the advanced tab has a command
for '/bin/sh /some/file/ondisk.sh'

What I need it to do is copy a file also local on the machine to the Desktop
of the user that just logged on. I can't just use username=$(whoami) because
the policy calls the script as root, and it shouldn't copy to root of
course.

Can someone help? Let me know if you need more clarification. I'm sure this
should be the simplest thing ever for me to do, but for the life of me...

Thanks,

Craig Ernst
Systems Management & Configuration
----------------------------------
University of Wisconsin-Eau Claire
Learning & Technology Services
105 Garfield Ave
Eau Claire, WI 54701
Phone: (715) 836-3639
Fax: (715) 836-6001
----------------------------------
ernstcs at uwec.edu

5 REPLIES 5

ernstcs
Contributor III

Wanted to mention that I put in a sleep of 60 before that command to ensure the user was fully logged on, particularly on slow machines...

Have a great weekend.

Craig E

On 9/26/08 1:40 PM, "Ernst, Craig S." <ERNSTCS at uwec.edu> wrote:

I don't want it for every user though, just a particular group of AD users that will be doing laptop check-ins etc for a laptop pool. And this way I can change out the groups, or individuals easily within the scope of the policy. =)

It's ok. Nick from JAMF helped me out a little here with two different versions. Could have just used $3 if the script was being run directly from Casper stuffs, which I already knew wouldn't work.

username=/usr/bin/w | grep console | awk '{print $1}'

OR

username=/usr/bin/last -1 | grep awk '{print $1}'

However, I had to make sure that the command in the advanced tab of the JSS policy was backgrounded otherwise the login never completes fully until AFTER the script was running. So I had to have the command in the JSS '/bin/sh /some/file/ondisk.sh &'.

Thanks all!

Craig E

On 9/26/08 1:25 PM, "Thomas Larkin" <tlarki at kckps.org> wrote:

If the script is already on the local machine why not make a lauchd item under /Library/LaunchAgents which will trigger at log in for each user and then just wild card the script out to copy to each user in /Users?



Thomas Larkin
TIS Department
KCKPS USD500
tlarki at kckps.org
blackberry: 913-449-7589
office: 913-627-0351

Not applicable

Hey Craig-

I know you've said you have this working, but I just thought I'd throw in my two cents.

I have seen some issues with using last depending on when the script is run. I don't mean 'when' as in 'at login,' but more precise than that. We have found that sometimes the script will run before last has been updated and that is why the $3 fix in Casper is so imperative.

As for the $1 that you read online. $1 is really just the first parameter, whatever that might be. So if you run the script with the command "/bin/sh /some/local/script.sh" and print $1 it will be null. You need to run it like you would any other command line app. What I would suggest, is modify the Policy that fires it off to have the lines:

USER=$3 #pull the username from casper
/path/to/script.sh $USER #you could potentially pass any other parameters you need as well.

Then the username will be accessible from script.sh as $1.

The thing to keep in mind is that the list of parameters (actually it's everything in the command that fires off a script, eg. <script> <param1> <param2> etc.) is really just a zero based array from within that script. So if you fire off a script by running:

/path/to/script.sh param1 param2 param3

Then to access all of that you could

/bin/echo "$0" # returns /path/to/script.sh
/bin/echo "$1" # returns param1
/bin/echo "$2" # returns param2
/bin/echo "$3" # returns param3

Forgive me if this is elementary stuff. I do a lot of scripting here at UWSP and I feel it's an invaluable skill.

Ryan Harter
UW - Stevens Point
Workstation Developer
715.346.2716
Ryan.Harter at uwsp.edu

ernstcs
Contributor III

I tried $1 earlier because that was everything I had ready online, but that came back with nothing, at least in Leopard. =)

Craig

tlarkin
Honored Contributor

If the script is already on the local machine why not make a lauchd item under /Library/LaunchAgents which will trigger at log in for each user and then just wild card the script out to copy to each user in /Users?



Thomas Larkin
TIS Department
KCKPS USD500
tlarki at kckps.org
blackberry: 913-449-7589
office: 913-627-0351

ernstcs
Contributor III

I don't want it for every user though, just a particular group of AD users that will be doing laptop check-ins etc for a laptop pool. And this way I can change out the groups, or individuals easily within the scope of the policy. =)

It's ok. Nick from JAMF helped me out a little here with two different versions. Could have just used $3 if the script was being run directly from Casper stuffs, which I already knew wouldn't work.

username=/usr/bin/w | grep console | awk '{print $1}'

OR

username=/usr/bin/last -1 | grep awk '{print $1}'

However, I had to make sure that the command in the advanced tab of the JSS policy was backgrounded otherwise the login never completes fully until AFTER the script was running. So I had to have the command in the JSS '/bin/sh /some/file/ondisk.sh &'.

Thanks all!

Craig E

On 9/26/08 1:25 PM, "Thomas Larkin" <tlarki at kckps.org> wrote:

If the script is already on the local machine why not make a lauchd item under /Library/LaunchAgents which will trigger at log in for each user and then just wild card the script out to copy to each user in /Users?



Thomas Larkin
TIS Department
KCKPS USD500
tlarki at kckps.org
blackberry: 913-449-7589
office: 913-627-0351