Computer rename script

New Contributor

Hi all.

Anyone have a quick shell script to rename computers by looking up the serial in a CSV file? Figure it should be easy to install a CSV on the computer and then run a script to rename?

Of is there another easier way to do this? Why? I duplicated a renaming policy and then didn't remove "all computers" from scope, causing buggered computer names. It would be nice to not have to fix manually.


Valued Contributor

If your naming convention uses the user's real name (or even username) as the device name, you may want to consider using an obfuscated name.  If your users are all adults, it's a lesser concern, but if your user's are K12 students, having PII in the device name is a security and safety risk.

Contributor II

I have used this Python script in the past, it lets you read the names from a CSV on a remote Server or even a google sheet. (your mileage may vary now, though, with python not coming pre-installed on macOS)

Rename computer from remote CSV using Jamf binary
Pass in the URL to your remote CSV file using script parameter 4
The remote CSV could live on a web server you control, OR be a Google Sheet
specified in the following format:<document ID>/export?format=csv&id=<document ID>&gid=0

import os
import sys
import urllib2
import subprocess

CSV_PATH = '/var/tmp/computernames.csv'

def download_csv(url):
    '''Downloads a remote CSV file to CSV_PATH'''
        # open the url
        csv = urllib2.urlopen(url)
        # ensure the local path exists
        directory = os.path.dirname(CSV_PATH)
        if not os.path.exists(directory):
        # write the csv data to the local file
        with open(CSV_PATH, 'w+') as local_file:
        # return path to local csv file to pass along
        return CSV_PATH
    except (urllib2.HTTPError, urllib2.URLError):
        print 'ERROR: Unable to open URL', url
        return False
    except (IOError, OSError):
        print 'ERROR: Unable to write file at', CSV_PATH
        return False

def rename_computer(path):
    '''Renames a computer using the Jamf binary and local CSV at <path>'''
    cmd = ['/usr/local/bin/jamf', 'setComputerName', '-fromFile', path]
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, _ = proc.communicate()
    if proc.returncode == 0:
        # on success the jamf binary reports 'Set Computer Name to XXX'
        # so we split the phrase and return the last element
        return out.split(' ')[-1]
        return False

def main():
        csv_url = sys.argv[4]
    except ValueError:
        print 'ERROR: You must provide the URL of a remote CSV file.'
    computernames = download_csv(csv_url)
    if computernames:
        rename = rename_computer(computernames)
        if rename:
            print 'SUCCESS: Set computer name to', rename
            print ('ERROR: Unable to set computer name. Is this device in the '
                   'remote CSV file?')
        print 'ERROR: Unable to set computer name without local CSV file.'

if __name__ == '__main__':