I get it now.
All makes sense.
I will put it together tomorrow and post it here. Maybe it can be a good use for someone.
Thanks
Cem
Sent from my iPhone
On 26 Oct 2011, at 07:21 PM, "Sean Holden" <Sean.Holden at framestore.com<mailto:Sean.Holden at framestore.com>> wrote:
Tom has supplied a function called getname
He did this with:
getname()
{
bunch of code
}
You can then call the function in the script using its name 'getname'
He could have just as easily called it football
football()
{
bunch of code
}
and then use 'football' to call this code
Personally I use the following syntax:
function getname {
bunch of code
}
----------------------------------------
If you need to write a function you need to define it first and then call it when you like. So you could have something like the following. You can specify variables before or after the definition and then just call the function by its name to run it.
#!/bin/bash
outputBlurb=/tmp/rubbish
function spewrubbish {
echo $myBlurb > $myPath
}
myBlurb=wibble
myPath=$outputBlurb
spewrubbish
Hope that makes sense now.
Sean
I did look at jamfHelper, but no luck.
/Library/Application
Support/JAMF/bin/jamfHelper.apontents/MacOS/jamfHelper -help
JAMF Helper Help Page
Usage: jamfHelper -windowType [-windowPostion] [-title] [-heading]
[-description] [-icon] [-button1] [-button2] [-defualtButton]
[-cancelButton] [-showDelayOptions] [-alignDescription] [-alignHeading]
[-alignCountdown] [-timeout] [-countdown] [-iconSize] [-lockHUD]
-windowType [hud | utility | fs]
hud: creates an Apple "Heads Up Display" style window
utility: creates an Apple "Utility" style window
fs: creates a full screen window the restricts all user input
WARNING: Remote access must be used to unlock machines in this mode
-windowPosition [ul | ll | ur | lr]
Positions window in the upper right, upper left, lower right or lower
left of the user's screen
If no input is given, the window defaults to the center of the screen
-title "string"
Sets the window's title to the specified string
-heading "string"
Sets the heading of the window to the specified string
-description "string"
Sets the main contents of the window to the specified string
-icon path
Sets the windows image filed to the image located at the specified path
-button1 "string"
Creates a button with the specified label
-button2 "string"
Creates a second button with the specified label
-defaultButton [1 | 2]
Sets the defualt button of the window to the specified button. The
Default Button will respond to "return"
-cancelButton [1 | 2]
Sets the cancel button of the window to the specified button. The Cancel
Button will respond to "escape"
-showDelayOptions "int, int, int,..."
Enables the "Delay Options Mode". The window will display a dropdown with
the values passed through the string
-alignDescription [right | left | centered | justified | natural]
Aligns the description to the specified alignment
-alignHeading [right | left | centered | justified | natural]
Aligns the heading to the specified alignment
-alignCountdown [right | left | centered | justified | natural]
Aligns the countdown to the specified alignment
-timeout int
Causes the window to timeout after the specified amount of seconds
Note: The timeout will cause the the defualt button, button 1 or button 2
to be selected (in that order)
-countdown
Displays a string notifying the user when the window will time out
-iconSize pixels
Changes the image frame to the specified pixel size
-lockHUD
Removes the ability to exit the HUD by selecting the close button
Return Values: The JAMF Helper will print the following return values to
stdout...
0 - Button 1 was clicked
1 - The Jamf Helper was unable to launch
2 - Button 2 was clicked
XX1 - Button 1 was clicked with a value of XX seconds selected in the
drop-down
XX2 - Button 2 was clicked with a value of XX seconds selected in the
drop-down
239 - The exit button was clicked
240 - The "ProductVersion" in sw_vers did not return 10.4.X, 10.5.X, or
10.6.X
243 - The window timed-out with no buttons on the screen
250 - Bad "-windowType"
254 - Cancel button was select with delay option present
255 - No "-windowType"
What about writing a GUI app in Xcode?
Criss Myers
I love to. But I don't know where to start :)
Can you recommend any sites?
Cheers
Cem
This should do it:
getname()
{
asmsg=`arch -i386 /usr/bin/osascript << EOT
tell app "System Events"
Activate
set foo to text returned of (display dialog "Enter the name of the
Computer" buttons {"OK"} default answer "mr flibble")
end tell
EOT`
if [ "$asmsg" = "false" ]; then
getname
else
echo $asmsg
fi
}
Call this like this
computername=getname
You could do something like this: (not tested)
#!/bin/bash
#set variables for computer name on local computer via post image script
# this example assume cname is the variable used
#source the file that holds the computer name
source /path/to/computernamefile
/usr/bin/osascript >>EndOfApplescript
tell application "System Events"
display dialog "Do you want to set the computer name to ${cname[@]} ?" { "Cancel" , "OK" } default button 2
if result = {button returned:"OK"}
then do shell script "/usr/sbin/networksetup -setcomputername ${cname[@]}"
else display dialog "Please see tech support to get the proper name changed."
end if
end tell
EndOfApplescript
exit 0
No clue if this works I just whipped it up as proof of concept, I am not the strongest apple scripter out there, but this works with my previous solution on caching the name and it doesn't allow manual data entry which also has a margin of error.
-Tom
and I already noticed I have a syntax error
it should be
osascript <<EndOfApplescript
What is getname command?
Do you mean networksetup -getcomputername ?
Tom,
I am trying to get the staff to update the cname file or set the hostname with the pop up window.
Your script is asking; do you want to use cname to set up the hostname. So it assumes its all setup already.
Also it has some typo I think as it didn’t brought up the dialogue box.
Thanks for trying to help though.
Cheers
Cem
It is the function Mr. Piper wrote
This is using bash functions.
You define the function
Myfunction()
{
Some code
}
You can then call this function in your script like any other command.
Thus
Foo='myfunction' <--- they are supposed to be back ticks, can't find on my iPhone.
You don't need to have it as a function, just the way I like to code.
Remove the getname and the {} and $asmsg will be the result from the dialog box
Hope that helps :)
Mr Piper is my father :)
I'm Jak
On 26 Oct 2011, at 19:01, "Thomas Larkin" <tlarki at kckps.org<mailto:tlarki at kckps.org>> wrote:
It is the function Mr. Piper wrote
Tom has supplied a function called getname
He did this with:
getname()
{
bunch of code
}
You can then call the function in the script using its name 'getname'
He could have just as easily called it football
football()
{
bunch of code
}
and then use 'football' to call this code
Personally I use the following syntax:
function getname {
bunch of code
}
----------------------------------------
If you need to write a function you need to define it first and then call it when you like. So you could have something like the following. You can specify variables before or after the definition and then just call the function by its name to run it.
#!/bin/bash
outputBlurb=/tmp/rubbish
function spewrubbish {
echo $myBlurb > $myPath
}
myBlurb=wibble
myPath=$outputBlurb
spewrubbish
Hope that makes sense now.
Sean
It was Jak, not me...
I should probably brush up on my Apple script, but I am not really fond of user interaction with policy.
-Tom
Here is the script to change the name with ease in Casper Self Service (MCX applied to disabled Sharing prefs Naming). Thanks guys for all the help with osascript.
I have tested both scripts successfully in my environment. I suggest test it before using in your environment.
--missing content--
anges their Mac names)
- First script will remove the Mac from AD (set as before in policy)
#!/bin/sh
# This script will remove existing Directory records and will reset Search
Paths
# to /Active Directory/mycompany.com
# Tested with 10.6.x
# Remove all files containing AD bindings informations
#####################################
#Clock restart / Remove existing settings
#####################################
#Restart ntpdate
StartService ()
{
if [ "${TIMESYNC:-YES-}" "-YES-" ] &&
! GetPID ntpd > /dev/null; then
CheckForNetwork
if [ -f /var/run/NetworkTime.StartupItem -o "${NETWORKUP}" "-NO-" ]; th
en exit; fi
touch /var/run/NetworkTime.StartupItem
echo =93Starting network time synchronization=94
# Synchronize our clock to the network=92s time,
# then fire off ntpd to keep the clock in sync.
ntpdate -bvs
ntpd -f /var/run/ntp.drift -p /var/run/ntpd.pid
fi
}
# Remove exisiting
logger =93Removing existing DS Config=94
if [ ! -d "/Library/Preferences/DirectoryService/ActiveDirectory" ]; then
rm -R /Library/Preferences/DirectoryService/ActiveDirectory*
fi
if [ ! -d "/Library/Preferences/DirectoryService/DSLDAPv3PlugInConfig" ]; t
hen
rm -R /Library/Preferences/DirectoryService/DSLDAPv3PlugInConfig*
fi
if [ ! -d "/Library/Preferences/DirectoryService/SearchNode" ]; then
rm -R /Library/Preferences/DirectoryService/SearchNode*
fi
if [ ! -d "/Library/Preferences/DirectoryService/ContactsNode" ]; then
rm -R /Library/Preferences/DirectoryService/ContactsNode*
fi
if [ ! -d "/Library/Preferences/edu.mit.Kerberos" ]; then
rm -R /Library/Preferences/edu.mit.Kerberos
fi
# Restart DirectoryService (necessary to reload AD plugin activation settin
gs)
killall DirectoryService
/bin/sleep 3
exit 0
- Second Script will rename the Mac and the record .txt file. (set as "bef
ore" and make sure it runs after the first script above - alternatively you
can combined them)
#!/bin/bash
# Lets enter the computername with GUI
getname()
{
asmsg`arch -i386 /usr/bin/osascript << EOT
tell app "System Events"
Activate
set foo to text returned of (display dialog "Enter the new name of the Comp
uter" buttons {"OK"} default answer "Type Computer Name Here")
end tell
EOT`
if [ "$asmsg" "false" ]; then
getname
else
echo $asmsg
fi
}
computernamegetname
# Set the computername
networksetup -setcomputername ${computername}
# This will update the original hostname record and it will keep the old re
cord with date stamp then set the permissions
mv /Library/Receipts/cname.txt /Library/Receipts/oldcname_`date +%M-%H-%m-%
d-%y`.txt
networksetup -getcomputername > /Library/Receipts/cname.txt
chmod -R 644 /Library/Receipts/cname.txt
chown -R root:wheel /Library/Receipts/cname.txt
# lets set the computer
setNamecat /Library/Receipts/cname.txt
scutil --set ComputerName ${setName}
scutil --set LocalHostName ${setName}
# Run Recon to update JSS record with the new name
jamf recon
exit 0 ## computermame and the record updated successfully
exit 1 ## fail
- Then check bind to AD in Account section of the Policy to bind the Mac t
o AD. I have some editing Macs here that they don=92t need to be on domain.
So I have set a pop up window message saying " Please run "AD bind" from S
elf Service to join this Mac to domain. Then Restart or Shut Down."
I hope this is useful=85
Cem
I have now decided to add cancel button. It appears in GUI but doesn’t quit the script.
Is there way to cancel button to stop the entire process?
#!/bin/bash
# Lets enter the computername with GUI
getname()
{
asmsg=`arch -i386 /usr/bin/osascript << EOT
tell app "System Events"
Activate
set foo to text returned of (display dialog "Enter the new name of the Computer" buttons {"Cancel", "OK"} default button 2 default answer "Type Computer Name Here")
end tell
EOT`
if f "$asmsg" = "false" ]; then
getname
else
echo $asmsg
fi
}
computername=getname
Yup, the text returned when you hit cancel will be 'Cancel'
You can add another if statement or an elif, the value will be 'Cancel' so
If you read that back you can then exit 0
If that's not working.... I've a script somewhere that deletes the UTC database & uses AppleScript to prompt & can be ran from remote (with or without prompts) or self service.
I can dig it up if it helps.
Regards,
Ben.