About Terminal Server, Citrix, Delphi and other stuff
A few days ago I needed to test a few things on a Windows XP Workstation running under a regular user account.
I wanted to verify if some files and registry keys existed but Group Policies were in place that denied me access to the command prompt and regedit.
While this may be a good thought to secure the pc it is not very convenient if you need to verify some settings.
For that purpose I created patched versions of the Windows Server 2003 command prompt and regedit utilities.
They are patched to ignore the Group Policy settings and I usually place them in some share, secured by NTFS permissions.
You can read about it in my post: Registry editing has been disabled by your administrator (not anymore!).
However due to kernel differences you cannot use the Windows 2003 cmd.exe on Windows XP (you can do it the other way round btw). So I decided to create a patched version of the XP version as well.
I thought it might be interesting to show you how it’s done so here we go:
I had a very interesting issue today on a new Citrix XenApp 5 farm. We went into production yesterday and we noticed a number of issues:
I took a look at the profiles first and noticed that the size growth was due to a Xerox subfolder in %APPDATA%:
Read the rest of this entry »
In my project the monitoring group required that SNMP was installed and configured on all servers.
I wrote scripts for Windows 2003 and Windows 2008 that I deploy from my Altiris Server.
This is the script for Windows 2003:
rem Create Sysoc Answer File
echo [NetOptionalComponents] >InstallSNMP.txt
echo SNMP = 1 >>InstallSNMP.txt
echo. >>InstallSNMP.txt
echo [SNMP] >>InstallSNMP.txt
echo Accept_CommunityName = MYCOMMUNITY:Read_Only >>InstallSNMP.txt
echo Any_Host = No >>InstallSNMP.txt
echo Community_Name = "MYCOMMUNITY" >>InstallSNMP.txt
echo Contact_Name = "MYCONTANT" >>InstallSNMP.txt
echo Limit_Host = MYIP >>InstallSNMP.txt
echo Location = "MYLOCATION" >>InstallSNMP.txt
echo Send_Authentication = Yes >>InstallSNMP.txt
echo Service = Applications, Internet, End-to-End, Physical, Datalink >>InstallSNMP.txt
echo Traps = THETRAPIP >>InstallSNMP.txt
Sysocmgr.exe /i:\windows\inf\sysoc.inf /u:\Windows\Temp\InstallSNMP.txt /r
After a restart of the Altiris Services or the Altiris Server some machines refuse to reconnect.
They are shown in the Computers Tree with the Inactive state icon:
The fastest way to resolve this is to restart the “Altiris Deployment Agent” service.
I wrote a little commandline tool to make this easy for myself, it’s called AClientFix.
If you don’t specify any parameters it will restart the services on the local machine. If you specify a Computername as parameter it will restart the services of a remote machine (admin rights needed of course).
AClientFix (181)I needed to relocate the WSUS content folder because it was placed on the C Drive (even though there was a 2nd 150 GB Data Partition) to prevent WSUS from filling up the OS Drive.
Unfortunately there doesn’t seem to be a GUI option to do that, all Google searches lead to a GUI option for Small Business Server.
The WSUSUtil tool can do it however, which is located in %ProgramFiles%\Update Services\Tools by default.
You need to create the targetfolder and then issue:
The tool will copy, and not move, the files to the new location and update the WSUS settings.
So don’t forget to manually delete the old folder!
The current storage location can be found or verified in the registry. It is stored in the ContentDir value in the HKLM\SOFTWARE\Microsoft\Update Services\Server\Setup key.
See also Verifying WSUS Server Settings (although in incorrectly states the ContentDir value as Content).
For my Reboot Script I needed to get the last character of the computername and convert it to an integer.
We can do it like this in PowerShell:
I wanted to create a Scheduled Task on my Citrix Servers to have the reboot every other night.
The idea is that half of the servers will reboot in a night and the other half the following night.
The TSSHUTDN tool is handy since it can issue a warning to logged on users, log them out after a certain period and finally issue the reboot.
Since I needed to add a scheduled task to many servers I wanted to do this with a script.
WMI Exposes the Win32_ScheduledJob Class and it’s Create Method.
In every project I do I will have to migrate data at some point. This usually involves three types of data:
Home Directory Data is usually a flat copy although I tend to filter out the garbage (temp files and such).
Workgroup data usually needs to be cleaned up so it involves some kind of data mapping (folder x goes to place y).
Application Data is usually a flat copy from old to new location but often there are things like ini files that are adjusted and we don’t want to overwrite that.
As you may know, Fast User Switching (FUS) is not available (disabled) on Windows XP computers joined to a domain, Microsoft confirms this in kb280758.
However, Microsoft doesn’t tell us there’s an undocumented registry value that allows us to have FUS when joined to a domain!
To enable FUS you need to set the DWORD registry value HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\ForceFriendlyUI.
It can also be set by Group Policy at HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System.
When the value is set to 1, and LogonType key is also set to 1, it allows you to use a Friendly UI on a computer joined in a domain:
Read the rest of this entry »
If you want to obtain a user’s token in a Terminal Server or Citrix session (eg to launch a process in a session) you can call the WTSQueryUserToken function.
On the x64 versions of Windows XP and Server 2003 this function fails however and returns ERROR_INSUFFICIENT_BUFFER (“The data area passed to a system call is too small.”) when called from a 32 bit process.
Internally WTSQueryUserToken calls the undocumented function WinstationQueryInformationW with the WinStationUserToken class (14) and passing a WINSTATIONUSERTOKEN struct, filled with caller ProcessId and ThreadId.
But on x64 Windows the size of this structure is 24 bytes, while on 32 bit Windows the size of the structure is 12 bytes!
Active Directory Altiris bug Citrix Dell Delphi Exchange Exchange2003 Exchange2010 Hewlett-Packard HP iOS Jailbreak Java LinkedIn Linux MSI MySQL Navigation Objects Office Outlook Passat PowerPoint PowerShell referall was returned RNS315 RNS510 SasLibEx script slow Terminal Server ThinApp TSAdmin TSAdminEx VBS VCDS Vista VMWare Volkswagen Windows PE WLAN Wordpress WTSWaitSystemEvent wts_event_flush
WP Cumulus Flash tag cloud by Roy Tanck requires Flash Player 9 or better.