• December 2017
    M T W T F S S
    « Feb    
     123
    45678910
    11121314151617
    18192021222324
    25262728293031

Naming Computers in LANDesk Upgrade

Late last year I wrote an article on how to rename computers before an image is applied during LANDesk’s OSD process (read this article first if you haven’t already). Here at CSN, we PXE boot our faculty/staff computers into LANDesk’s specially configured WinPE, which launches a GUI menu of OSD tasks. These OSD tasks can be anything really, but that is a story for another article. My previous article about injecting the computer name into the Sysprep.inf file used a VBScript. I have since then upgraded to an AutoIt script that gives us more options.

PC Rename

First, let me give a brief explanation of our environment. We have a parent domain, and a child domain for students. We have four LANDesk agent configurations: one for labs and classrooms, one for office computers, one for laptops, and one for computers that don’t reside on our network. The LANDesk agent gets installed during the GUIRunOnce section of Sysprep. So, I upgraded our OSD task to prompt the technician to select which domain to join (or none), and which LANDesk agent to install. Here is the script. I won’t go through line by line like I did for the VBScript; you’ll just have to visit the AutoIt documentation website to look up some of the functions. Re-read my previous article on how I did the VBScript. The AutoIt script follows the exact same logic, but expands the idea to add more options.

#include <GUIConstantsEx.au3>

GUICreate("PC Rename", 250, 310) ; Create the GUI Window
GUICtrlCreateLabel("Enter the computer name:", 30, 10) ; Create a label
$computername = GUICtrlCreateInput("", 30, 30, 190, 20) ; Create the textbox
GUICtrlSetLimit(-1, 15) ; Limit the computer name to 15 characters
GUICtrlCreateGroup("Domain to join", 30, 60, 190, 90) ; Create the join domain "group" that surrounds the radio buttons
$optCSN = GUICtrlCreateRadio("CSN", 40, 80, 100, 20) ; Create the radio button to join the CSN domain
GUICtrlSetState(-1, $GUI_CHECKED) ; Set the CSN radio button as checked by default
$optSTUDENT = GUICtrlCreateRadio("STUDENT", 40, 100, 100, 20) ; Create the radio button to join the STUDENT domain
$optNONE = GUICtrlCreateRadio("Do not join a domain", 40, 120, 150, 20); Create the radio button to not join a domain
GUICtrlCreateGroup("", -99, -99, 1, 1)  ;close group

GUICtrlCreateGroup("LANDesk Agent", 30, 150, 190, 110) ; Create the agent "group" that surrounds the radio buttons
$optStaff = GUICtrlCreateRadio("Standard Staff/Faculty", 40, 170, 150, 20) ; Create the radio button to install the Faculty Staff agent
GUICtrlSetState(-1, $GUI_CHECKED) ; Set the Faculty Staff agent radio button as checked by default
$optDeepfreeze = GUICtrlCreateRadio("Deep Freeze Required", 40, 190, 170, 20) ; Create the radio button to install the Lab Classroom agent
$optLaptop = GUICtrlCreateRadio("Laptop/Roaming", 40, 210, 150, 20); Create the radio button to install the Roaming Laptop agent
$optRural = GUICtrlCreateRadio("Rural Site", 40, 230, 150, 20); Create the radio button to install the Rural Site agent
GUICtrlCreateGroup("", -99, -99, 1, 1)  ;close group

$okbutton = GUICtrlCreateButton("OK", 100, 270, 60)	; Create the OK button
GUISetState(@SW_SHOW) ; Show the GUI

$f = FileOpen("x:\LDClient\insertname.bat", 2) ; Create the insertname.bat file

While 1 ; infinite loop that waits for the GUI to receive a message
  $msg = GUIGetMsg() ; get any user input
  
  Select
    Case $msg = $okbutton ; if the Ok button is pressed, check the options that the user selected
		If GUICtrlRead($computername) = "" Then ; if blank computer name, use the LANDesk inventory computer name for the name.
			FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf COMPUTERNAME=%Computer - Device Name%")
		Else ; else use the user input for the computer name
			FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf COMPUTERNAME=" & GUICtrlRead($computername))
		EndIf
		Select ; Chose the domain to join or not join a domain
			Case GUICtrlRead($optCSN) = $GUI_CHECKED ; Join CSN domain
				FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf DOMAIN=CSN")
				FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf NOWG=")
				FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf WG=;")
			Case GUICtrlRead($optSTUDENT) = $GUI_CHECKED ; Join STUDENT domain
				FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf DOMAIN=STUDENT")
				FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf NOWG=")
				FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf WG=;")
			Case GUICtrlRead($optNONE) = $GUI_CHECKED ; Join WORKGROUP and no domain
				FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf NOWG=;")
				FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf WG=")
		EndSelect
		Select ; Chose the Agent to isntall
			Case GUICtrlRead($optStaff) = $GUI_CHECKED ; Install the Staff faculty agent
				FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf AGENT=instfacst.bat")
			Case GUICtrlRead($optDeepfreeze) = $GUI_CHECKED ; Install the Lab Classroom agent
				FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf AGENT=instlabcl.bat")
				MsgBox(64, "Deep Freeze Reminder", "1.  Remember to run a scheduled Deep Freeze task for this computer in LANDesk Console after imaging is complete." & @CRLF & "2.  Set the System BIOS to auto power on every day at 11:00 pm.")
			Case GUICtrlRead($optLaptop) = $GUI_CHECKED ; Install the Laptop Roaming agent
				FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf AGENT=instlaptop.bat")
			Case GUICtrlRead($optRural) = $GUI_CHECKED ; Install the Rural agent
				FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf AGENT=instrural.bat")
		EndSelect
		ExitLoop
	Case $msg = $GUI_EVENT_CLOSE ; if the GUI is closed, the default is to name the computer using the LANDesk inventory, and not join a domain.
		FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf COMPUTERNAME=%Computer - Device Name%")
		FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf NONE=;")
		FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf WG=")
		FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf AGENT=instfacst.bat")
		ExitLoop
  EndSelect
WEnd 

AutoIt scripts can easily be converted into an executable using AutoIt’s “Compile Script to .exe” tool.

I guess I also owe an explanation on how tokreplw.exe works. You can probably get this file by downloading the trial version of LANDesk Management Suite. This command takes two inputs: a file and a pair of tokens. The file is obvious, this is the target file to look at for token replacement. The token syntax is VARIABLE=VALUE, where VARIABLE appears in your target file as %VARIABLE%, and the value is whatever you decide. For example let’s examine one line in the prename.au3 script, line 35:

FileWriteLine($f, "tokreplw c:\sysprep\sysprep.inf DOMAIN=CSN")

To help not confuse the Autoit portion of the code, we’ll break this down to the tokreplw command:

tokreplw c:\sysprep\sysprep.inf DOMAIN=CSN

So, the “c:\sysprep\sysprep.inf” file is targeted. Within this file, an occurrence of the variable %DOMAIN% will be replaced with the value of CSN, which is the name of our parent domain. If we crack open our sysprep.inf file (do an Advanced Edit in LANDesk Console), we have this:

[Identification]
%NOWG%JoinDomain=%DOMAIN%
DomainAdmin=csn\BadBoy
DomainAdminPassword=LeeroyJenkins
%WG%JoinWorkgroup=WORKGROUP

You can see the %DOMAIN% variable here. You will also notice several other variables as well. I use tokreplw to manipulate the sysprep.inf file dynamically, depending on what the technician chooses. If the tech selects to join a domain then %NOWG% becomes blank, and %DOMAIN% becomes the name of one of our two domains. The %WG% variable becomes a semicolon, which comments out the JoinWorkgroup line. If the tech does not select to join a domain, then %NOWG% becomes a semicolon, which comments out the JoinDomain line, and %WG% becomes blank. This configures the sysprep.inf file to join the computer to a workgroup instead.

Feel free to ask any questions about the script, and I will do my best to answer them.

Advertisements

A Windows SSH Client with Tabs

I’ve decided to upload my SSH client code, written in C# for Windows, to Sourceforge. This is very unfinished, buggy, and probably not well written. There is no installer yet. I need to update the telnet code since the library I am using (and had to hack to include some basic telnet negotiation code) has been updated. I am not sure how much of the telnet code I need to change, but the library looks like it has been improved quite a bit. The site manager portion of the code is also very unfinished, and I would like to finish that as well before making an installer for this program.

Here’s the code

Preparing 2000 College Computers for Next Semester

At College of Southern Nevada, I’ve often wondered if students, faculty, or college administration have ever thought just how the heck their college computers have received their updates, configure themselves, install software, etc.  I mean, someone or something has to do it, right?  Well, I am one of the three main Sungard employees who are actually responsible for getting this done before the start of every semester.  This blog will try to explain in layman’s terms how the College of Southern Nevada’s OTS department goes about preparing for each semester.

It all starts with three to four specifically trained computer technicians called “Imagers”.  We call ourselves Imagers because that is the process that allows us to successfully prepare 2000+ computers each semester.  Think about it.  Every month new computer updates come out.  Windows updates, the new Firefox browser release, upgrades to online learning environments like MyITLab, etc.  The list goes on!  Our job is to keep CSN up to date with the most recent versions of software.  Most of the software is requested by the instructors who use it to teach, and our faculty have always prided themselves with keeping up with the latest and greatest.  It is our job to make sure this happens.

Building images

Building images (Rob F., James, and Rob S.)

Each Imager from the three main campuses of CSN, West Charleston, Cheyenne, and Henderson, get together around this time of year to build what is called the “base image”.  An image is just that, it is a snapshot of a computer’s hardrive.  That image is then transferred to the hardrives of all of the other 2000+ computers at CSN.  Each image has to be ready at least two weeks before the beginning of the semester in time for it to be deployed to the 2000+ computers in the labs and classrooms.  We call these last two weeks, “crunch time.”

The base image is created and configured with each of the lead Imagers agreeing on what needs to go in, and how it is configured.  Every step in the installation and configuration of software is meticulously documented.

Once the base image is done, a few more “large” images need to be created.  First, we build the Oracle image.  Although Oracle is only taught on a few campuses, it must be available at all computer labs for students.

Prototypes

Our Prototypes

Next, we build the mighty CET image.  The CET image this semester includes several versions of Visual Studio, Adobe Creative Suite CS3, VMWare with a working Windows XP virtual machine, and a plethora of programming and computer teaching related tools.  After the CET and Oracle images are complete, we create another massive image for the newest version of Autodesk, ArcGIS, and lastly a Nursing image that contains specialized software for the nursing department.

Once all of the base images are done (a process that takes us around two weeks), we return to our home campuses, and begin building specific images for each computer lab pod, each computerized classroom, and smart classroom (a classroom with a projector, computer, and usually some telemedia equipment).

This process is a long one that takes months of preparation.  Often mistakes on our part, and with last minute requests from faculty, we are required to go back, reconfigure our images, and redeploy them.  Deployment of an image to a classroom usually takes around an hour or two for each room.  Depending on what else needs to be done, it may take an additional twenty to thirty minutes to finalize the classroom for use by students and faculty.  Between dozens of computerized classrooms, six large computer labs, and hundreds of smart classrooms spread out among 15 campuses, we have our work cut out for us!  I was debating about including this next picture, but it sort of displays the mental fatigue that can set in after hours of staring at a bunch of computer screens.

Time to go home

Time to go home (Rob S. and me)

Currently, the OTS department is making leaps and bounds in the implementation of new technology.  The Imaging team is no different.  We are currently in the process of implementing LANDesk Management Suite

The LANDesk Console

The LANDesk Console

to help us maintain the computerized labs and classrooms at CSN.  With this new tool, we will be able to handle the different computer hardware we have in place, use remote control to assist students and faculty with their computer problems, assist with inventory and software license tracking, and deploy software en mass upon request from faculty.  I am really excited to be a part of the planning and implementation process of the LANDesk Management Suite!

Hopefully this post has been insightful.  I know that I have enjoyed working for CSN’s “new” IT department.  Many changes have happened to us in the past, some of which were not always easy.  However, I think things at the college are working out, and I look forward to what comes next!

Include Cygwin in your PowerShell Environment (Vista)

Want to include your Cygwin environment in your Windows PowerShell on Vista?

Step 1.

Open PowerShell. Run:

set-executionpolicy RemoteSigned

Step 2.

Create a directory in your user profile:

mkdir c:\users\(profile)\Documents\WindowsPowerShell

Step 3.

Navigate to the above created directory, and create a new file called “Microsoft.Powershell_profile.ps1”

Step 4.

Edit the file in Notepad:

$env:path=$env:path+";C:\cygwin\bin"

Step 5.

Include any other paths if necessary, or include other scripts and add-ons as needed. Relaunch PowerShell and varify the changes. Trying running

c:\cygwin\cygwin.bat

or more simply

bash