Updating BIOS and Vmware View Agent on HP t5545 Thin Client

Few weeks ago at work, I was tasked with updating the BIOS and Vmware View Agent on out of warranty HP’s t5545 clients. The purpose was to support a newer release of VMView. The catch was being comfortable with Unix and updating packages in a certain sequence. Rather than have one more IT person squirm, I had thought pay-it-forward with this extended set of instructions after some “trial and error” and reading HP documentation.

A. Verify BIOS and VIEW agent.

  1. Boot TERMINAL.
  2. Click HP START menu.
  4. NOTE: The default password: Administrator/administrator or root/root.
  5. Under GENERAL TAB.
  6. Verify release BIOS VERSION, (i.e. 786R5v.2.00 vs. 786R5 v2.02).
  8. Verify VMWARE-VIEW-CLIENT (i.e. 4.0.1-1 etc. vs. 4.6.0-366101-1).


  1. Click MANAGEMENT tab.
  2. Insert USB stick.
  3. Select HP THINPRO IMAGE, click NEXT.
  6. Click FINISH. Click YES to CONTINUE.
  7. TERMINAL will RESTART and backup. CLICK OK when done. CLICK CLOSE.
  9. NOTE: This makes the drive bootable version of Unix for T5545 client.

C. Configure USB Drive with Updates

  1. Download WES Add-On (Configure BIOS Settings) (International) sp49355.exe.
  2. Extract files to: Windows system: C:\SWSetup\SP49355\LFlash\
  3. Copy LFlash directory to USB drive.
  4. Download Thin Client Add-On – VMware Horizon View Client (International) sp52674.exe.
  5. Extract files to: C:\Program Files\Hewlett-Packard\HP ThinPro\Add-On\View46\VMVIW3\
  6. Copy VMVIW3 to USB drive.


  1. Place USB into drive restart system.
  2. When prompted to run YES, and confirm YES.
  3. Wait for the flashing yellow prompt to power cycle.
  4. Remove drive after restart.
  5. NOTE: Some terminals had required the HP’s DOS version of their OS to load the BIOS update.


  1. After restart logon to Admin Tools.
  2. Logon to TERMINAL.
  3. Plug drive into usb port on front.
  4. List drives: fdisk –l
  5. Mount USB Drive, example: mount /dev/sda1/
  6. CLI will return path in error message “mount: /dev/sdb1 already mounted or navigate to the /tmp/ path for usb drive (i.e. /tmp/tmpfs/media/K*)
  7. Change directory until you locate (i.e. cd VMVIW3)
  8. List directory contents: ls
  9. Run: fsunlock
  10. Run: dpkg -i *.deb
  11. Run: flock
  12. Restart System

Read More:
HP t5545 Thin Client Drivers ( hp.com)

upgrading beyond VMWare Horizon View Client 4.6 for t5545 thin client (hp.com)



The day after Cinco de Mayo


scuba_office1.jpg GARZAFX.COM

Relax and breath, it’s only troubleshooting Microsoft products.


scuba2.jpg GARZAFX.COM

A phone call? The PADI scuba training said avoid overexertion, ugh.



Seriously, I hope this is about free food or Nitrox.



Look, my buoyancy sucks in this chair and I’m low on air. Can I call you back tomorrow?

Cleaning up Active Directory Computers with Powershell

For better management of Active Directory computer objects across two domains, I had configured a scheduled Windows task to perform clean up of computer objects from a Windows 7 VM. Specifically, I had wanted to disable and delete computer accounts after moving them in a specific OU. Note, this had previously worked on Windows 2008 R1; however, the script eventually had stopped processing because of an access denied error message, Windows Powershell issue with move-adoobject access denied, KB article 2806748. I had attempted running the script with different versions and languages of powershell but, to no available. I had ultimately updated the problem domain to Windows 2008 R2.

This script below had continued to work on Windows 2008 R2 and above plus Windows 2003 with Active Directory Management Gateway Service. Modify the below directions for your environment.

1. Create a folder named C:\scripts.

2. Create a powershell file labeled movecomputers.ps1 inside C:\scripts

3. Copy and paste the below and save into movecomputer.ps1

# a. Get Computers on Active Directory Domain: garzafx.com and move to Disabled Computers OU over 60 days old

get-adcomputer -properties lastLogonDate -filter * | where { $_.lastLogonDate -lt (get-date).adddays(-60) } | Move-ADObject -TargetPath “OU=Disabled Computers,DC=garzafx,DC=com” -Confirm:$false -Verbose

# b. Get Computers over 60 days old on Domain: garzafx.com  and DISABLE

get-adcomputer -properties lastLogonDate -filter * | where { $_.lastLogonDate -lt (get-date).adddays(-60) } | Disable-ADAccount

# c. Get Computers over 70 days old on Domain: garzafx.com  and DELETE and export to file

Search-ADAccount -AccountDisabled -Searchbase “OU=Disabled Computers,DC=garzafx,DC=com” -ComputersOnly | where { $_.lastLogonDate -lt (get-date).adddays(-75) } | Remove-ADObject -Recursive -Confirm:$False –Verbose | export-csv c:\scripts\deletedcomputers.garzafx.com.csv

4. Create a service account with domain admin rights (i.e. powershell@garzafx.com).

5. Create an OU labeled DISABLED COMPUTER in the root of Active Directory.

6. Create a scheduled task labeled adcomputer.cleanup.

7. Run under service account (i.e. powershell@garzafx.com).

8. Select option to,”Run whether user is logged on or not.”

9. Choose, “Run with highest privileges enabled.”

10. Select trigger options (i.e. every day, 7am) and verify status, enabled.

11. Under Actions tab, select,”Start a Program.”

12. For Program/script enter: C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe

13. Under Add-arguments,”-file C:\scripts\.\movecomputers.ps1


14.  Click OK and enter credentials as necessary.

powershell @ garzafx.com

Read More:

Windows Powershell issue with move-adoobject access denied, KB article 2806748 (Microsoft)

Active Directory Management Gateway Service, Active Directory Web Service for Windows Server 2003 (Microsoft)

Resolving computer object replication conflicts (ourwinblog.blogspot.com)

Office 365 & ADFS: Compiler Error Message: CS0101: The namespace ‘Resources’ already contains a definition for ‘CommonResources’

Over the past month, I had participated in bringing Office 365 to our corporate environment. Working with respective team mates, all that had remained some login customizations and an email announcement. Reviewing a previously referenced Microsoft technet article, I had thought this should be a piece of cake.

Going through one of three ADFS proxy servers, I had started going through the customization directions from Customizing the ADFS forms based login page. The first couple of files, I had updated per article. Before making any changes, I had made a copy of each file, just in case of human error. Moving onto the directory C:\inetpub\adfs\ls\App_GlobalResources, I had repeated the same steps on the file, CommonResources.en.resx.

After testing, I had received a generic .net error. Having a long day, I had concluded a syntax error somewhere. More often than I had liked to admit, an errant space or another syntax faux paux, usually the source of a .net error. After some proof reading, nothing had seemed out of sorts. In the interest of time, I had rolled back the original file by updating the file name.


However, much to my chagrin, I had still received the generic .net error. After some reflection, I had started to look at file dates and alternate servers. After some frustration, I had worked my way inside out. Beginning with an internal ADFS server, I had copied the same custom files over. At this point, I had received the error message below. I had looked at line 25. Nothing had appeared incorrect. Going back to the error, I had deduced maybe having both files the cause of the message. I had copied the extra files to my server desktop. Testing again on the ADFS server, the error had cleared. I had repeated the same method on the ADFS proxy server with similar success. So with much jubilation, I had completed the customizations today and promptly exited the building.

.net Error message:

Server Error in ‘/adfs/ls’ Application.
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS0101: The namespace ‘Resources’ already contains a definition for ‘CommonResources’

Source Error:

[No relevant source lines]

Source File: c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\adfs_ls\a6c27ef8\7adb2961\App_GlobalResources.h4pqoe46.2.cs Line: 25

Show Detailed Compiler Output:

c:\windows\system32\inetsrv> “C:\Windows\Microsoft.NET\Framework64\v2.0.50727\csc.exe” /t:library /utf8output /R:”C:\Windows\assembly\GAC_MSIL\System.Runtime.Serialization\\System.Runtime.Serialization.dll” /R:”C:\Windows\assembly\GAC_MSIL\System.IdentityModel\\System.IdentityModel.dll” /R:”C:\Windows\assembly\GAC_MSIL\System.Web.Extensions\\System.Web.Extensions.dll” /R:”C:\Windows\assembly\GAC_MSIL\Microsoft.IdentityModel\\Microsoft.IdentityModel.dll” /R:”C:\Windows\assembly\GAC_MSIL\System.Web.Services\\System.Web.Services.dll” /R:”C:\Windows\assembly\GAC_64\System.Web\\System.Web.dll” /R:”C:\Windows\assembly\GAC_MSIL\System.Web.Mobile\\System.Web.Mobile.dll” /R:”C:\Windows\assembly\GAC_64\System.Data\\System.Data.dll” /R:”C:\Windows\assembly\GAC_MSIL\System.Data.DataSetExtensions\\System.Data.DataSetExtensions.dll” /R:”C:\Windows\assembly\GAC_MSIL\System.WorkflowServices\\System.WorkflowServices.dll” /R:”C:\Windows\assembly\GAC_MSIL\System.Drawing\\System.Drawing.dll” /R:”C:\Windows\assembly\GAC_MSIL\Microsoft.IdentityServer\\Microsoft.IdentityServer.dll” /R:”C:\Windows\assembly\GAC_64\System.EnterpriseServices\\System.EnterpriseServices.dll” /R:”C:\Windows\assembly\GAC_MSIL\System.Xml.Linq\\System.Xml.Linq.dll” /R:”C:\Windows\assembly\GAC_MSIL\System\\System.dll” /R:”C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorlib.dll” /R:”C:\Windows\assembly\GAC_MSIL\System.ServiceModel\\System.ServiceModel.dll” /R:”C:\Windows\assembly\GAC_MSIL\System.Configuration\\System.Configuration.dll” /R:”C:\Windows\assembly\GAC_MSIL\System.Core\\System.Core.dll” /R:”C:\Windows\assembly\GAC_MSIL\System.Xml\\System.Xml.dll” /R:”C:\Windows\assembly\GAC_MSIL\System.ServiceModel.Web\\System.ServiceModel.Web.dll” /out:”C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\adfs_ls\a6c27ef8\7adb2961\App_GlobalResources.h4pqoe46.dll” /debug- /optimize+ /res:”C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\adfs_ls\a6c27ef8\7adb2961\resources.commonresources.en___copy.resources” /res:”C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\adfs_ls\a6c27ef8\7adb2961\resources.commonresources.en.backup.resources” /res:”C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\adfs_ls\a6c27ef8\7adb2961\resources.commonresources.resources” /w:4 /nowarn:1659;1699;1701 “C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\adfs_ls\a6c27ef8\7adb2961\App_GlobalResources.h4pqoe46.0.cs” “C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\adfs_ls\a6c27ef8\7adb2961\App_GlobalResources.h4pqoe46.1.cs” “C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\adfs_ls\a6c27ef8\7adb2961\App_GlobalResources.h4pqoe46.2.cs” “C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\adfs_ls\a6c27ef8\7adb2961\App_GlobalResources.h4pqoe46.3.cs”

Microsoft (R) Visual C# 2005 Compiler version 8.00.50727.4927
for Microsoft (R) Windows (R) 2005 Framework version 2.0.50727
Copyright (C) Microsoft Corporation 2001-2005. All rights reserved.

c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\adfs_ls\a6c27ef8\7adb2961\App_GlobalResources.h4pqoe46.2.cs(25,18): error CS0101: The namespace ‘Resources’ already contains a definition for ‘CommonResources’
c:\Windows\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files\adfs_ls\a6c27ef8\7adb2961\App_GlobalResources.h4pqoe46.0.cs(11,11): (Location of symbol related to previous error)

Version Information: Microsoft .NET Framework Version:2.0.50727.5472; ASP.NET Version:2.0.50727.5474

Read more:
Customizing the ADFS forms based login page (blogs.technet.com/b/stevenha/)


5 more basic UNIX commands for troubleshooting for a Windows Guy

Recalling another blog this week, 5 CentOS commands for basic troubleshooting for a Windows guy, I had wanted to cover few more UNIX commands. These commands had come in handy recently and in the past.

1. w, for who is logged in to system? Simply type: w

Example of output:

USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT

root     pts/0    garzafx               14:05    0.00s  0.12s  0.00s w

Administering applications requiring UNIX user logons, this command had offered a quick view of the folks being displaced with service restarts or system restarts (i.e. Init 0,1,6 or reboot).

2. man, for help from the manual. If you had needed to get assistance on a command, simply remember, type man followed by what you are looking for! Syntax had followed this example;

man man or man ip a

Example of output:

[root@localhost ~]# man man

man(1)                                                                  man(1)


man – format and display the on-line manual pages


man  [-acdfFhkKtwW]  [–path]  [-m system] [-p string] [-C config_file]

[-M pathlist] [-P pager] [-B browser] [-H htmlpager] [-S  section_list]

[section] name …


man formats and displays the on-line manual pages.  If you specify sec-

tion, man only looks in that section of the manual.  name  is  normally

the  name of the manual page, which is typically the name of a command,

function, or file.  However, if name contains  a  slash  (/)  then  man

interprets  it  as a file specification, so that you can do man ./foo.5

or even man /cd/foo/bar.1.gz.

3. cp, for copying files. With UNIX configuration files of all sorts, this command had provided quick CYA measure worthy of mentioning. The syntax that UNIX had followed:

cp oldfile.txt newfile.txt

4. mv, for renaming files. Some applications had recreated configuration files on restart. Keeping it simple for this scenario, I had suggested a move in one command;

mv oldfile.txt newfile.txt

5. pf -ef | grep –I, for searching system wide. This command had required a lot of exposition maybe; however, in avoiding verbosity and any confusion, I had thought useful mentioning just the syntax. This piped command had come up multiple times in my travels from AIX to CentOS. Years ago, I had witnessed this command shopping for crash dump files (i.e. core files). The most recent occasion had occurred with hunting down NetworkManager service.

Example of output:

[root@localhost network-scripts]# ps -ef | grep -i network

root      1454     1  0 09:34 ?        00:00:00 NetworkManager –pidfile=/var/run/NetworkManager/NetworkManager.pid

If you had remembered other commands worth mentioning, chime in. Hopefully with your next system administrative crisis with UNIX gremlins, this post had provided some guide to navigating the waters of cli.


Read More:

Download Centos 6.4 
CentOS (Wikipedia)

Adding secure connectivity for remote administration of CentOS with NX Server

Having been part of IT, there had always been adventure around the next key stroke, call or email. This go around, I had wanted to take a few minutes to document some steps in getting remote connectivity to work on a flavor of Unix, CentOS. Now let me contrast this by saying, Unix’s strong suit had always been the level of customization. The question had been knowing which pieces to squeeze together for certain administrative task. On that note, here had been the steps for getting remote connectivity setup up for an install of NXServer on CentOS below.


Before proceeding, a target system had required an install of  CentOS (6.x) with all the default settings. I had performed the following steps on server and Windows 7 desktop.

  1. Logged on to CentOS server locally.
  2. Elevated permissions in terminal by typing, su
  3. Entered password  (i.e. root password, etc..)
  4. Entered, yum install nx freenx
  5. Allowed the installation to complete.
  6. Switched directories with the following command, cd /etc/nxserver
  7. Modified configuration file with VI by entering in the following command, Vi node.conf
  8. Started data insert with vi by typing, I
  9. Located the following variable and set to 1, ENABLE_PASSDB_AUTHENTICATION=”1″
  10. Pressed the ESC key.
  11. Saved the file the follow key combination, :q 
  12. Added user enter to nx server with, nxserver –adduser packetfence
  13. Generated a client key type, cat /var/lib/nxserver/home/.ssh/client.id_dsa.key
  14. Copied the results into notepad for use on your desktop, Windows 7
  15. Launched Windows NX client on Windows.
  16. nx2
  17. Modified NX client from dialog box, clicking CONFIGURE.
  18. Clicked the GENERAL tab.
  19. Selected KEY.
  20. Pasted the key from #12 into the field.
  21. Selected KDE for session for desktop
  22. kde
  23. Saved changes and attempted to logon. It failed.
  24. Went to CentOS server, entered,  service sshd restart
  25. Then followed-up with the next command, chkconfig sshd on
  26. Important, chkconfig sshd on command ensuresd that the SSH service started on boot.
  27. Relaunched the NX client and attempt to connect.This time it connected successfully.
  28. Rebooted server and verified remote login again.


Read more:




PowerShell – Search against large .csv file(s) for a string

Previously, I had exported log files of considerable size parsing for certain columns of data to multiple .csv files.  Now I had wanted a response file with corresponding variable(s) and each entry (i.e. time stamp etc.) searching against one or multiple files. Below had been the process for this search and export. In this example, I had been using Windows 2012.

1. Right-click on the PowerShell icon and select RUN AS ADMINISTRATOR and OPEN.



2. Determine PowerShell version with the following command: $host.version

IMPORTANT: PowerShell 2.0 and above must be used to support the forthcoming commands.


3. Change directory to .csv file(s) location  (i.e. c:\logs)


CD C:\logs

4. Create a directory to place your exported results (i.e. c:\garzafx)

5. Run the following command to export search to .csv file

Get-ChildItem | Get-Content | Select-String -pattern “ellen ripley” | export-csv c:\garzafx\ellen.ripley.csv

a. Get-ChildItem will reference the file or files within the current directory. For my purposes here and the size of the data files, I had referenced few at a time.

b. Get-Content, simply had taken what Get-ChildItem pulled from the aforementioned directory (i.e. C:\logs)

C. Select-string -pattern, This had provided the variable (i.e. ellen ripley)

6. Here had been the export results with time stamp and pattern match for Ellen Ripley.


More examples and information on these PowerShell commands:

Get-ChildItem (Microsoft Technet)

Get-Content (Microsoft Technet)

Select-String (Microsoft Technet)

To Get PowerShell 3.0

Download Powershell 3.0