How to start Prophet21 Acclaim

Today I needed to power-up our old Prophet21 Acclaim server to find some old information. It has been 7 years since we upgraded and the terminal connected to the machine did not work. So, I connected a switch and laptop to the server and tried to get in that way.

Unfortunately, when I tried to go into Acclaim I got the “Stopped!” message. I remember I had to enter an ON and a GO somewhere but, couldn’t remember where. The trick it turns out is being the console. The console automatically goes to UTILITY COMMAND. The problem was I wasn’t on the console. It took a call from a colleague to remind me how to seize the console.

1. login as root or su to root
2. if not on console take control of console: #p21 -t tty0
4. at UNIT NR… type 0
6. keep hitting <enter> until back at UT prompt
7. at UTILITY COMMAND… type GO <enter>
8. at UTILITY COMMAND… hit <enter>
9. at JOB… prompt hit <enter>
10. Login to P21

Hopefully, I will never have to use this again but, just in case here it is.

Use 7-Zip to install ISO files

Challenge: You download an ISO (like Office 2010 from Microsoft) but, cannot install it because your computer doesn’t have a CD-ROM.

Solution: Use 7-Zip to extract the contents to a folder and install from there.

Note: Windows 8 and Windows Server 2012 can mount ISOs to virtual CD drives natively but, Windows XP, Windows Vista, and Windows 7 cannot. However, Microsoft has created a utility to enable this functionality which can be downloaded from here:

Using Microsoft Access for ETL

Challenge: Taking information out of MS SQL Server database and putting it into MySQL database – de-normalized for reporting (without spending a fortune).

Tentative Solution: Use Microsoft Access to bridge the divide with linked tables, pass-through queries, and append queries.

  1. Create a simple “make-table” query in MS Access to query SQL Server and make a local table. This query will later be changed to an “update-table” query.
    Hint: add a constraint (or add a “top x”) to limit your data – you only need enough rows to build the structure and see it.
  2. Use MySQL Migration Toolkit (or MySQL Workbench) using the Access database as source to build the scripts (create and insert) that would recreate the table in MySQL. Save output as scripts – if you allow the Migration Toolkit to build the table directly then you will need to edit the table. By saving to scripts you can add your edits to the script.
  3. Edit the MySQL script (combining the create and insert scripts) and adding additional fields, keys, and indexes if needed.
  4. Run the edited MySQL script against your MySQL database.
  5. In Access add the new MySQL table using Link Table Manager.

    Linked Tables in Microsoft Access

    Linked Tables in Microsoft Access

  6. Create a a pass-through query to “truncate” the linked MySQL table. This will empty the table when run.
    Note: this is only needed if you are rebuilding the data each time. Otherwise, if just appending yesterday’s data all you need is an append query.
  7. Edit the query created in step 1 to be an “append” query and select the linked MySQL table. Remove additional constraints or limits added when building the MySQL table.


    Pass-through and append queries in Microsoft Access

  8. Create a macro to update the MySQL table by first truncating it then updating it using the two queries.

Importance of monitoring

One day we noticed our Internet just wasn’t what we were used to. Although no-one was complaining we in the IT department were feeling it whenever we downloaded a large file like a Microsoft ISO. Fortunately, we had setup Cacti — a MRTG/RRD monitoring solution. A quick look at Cacti showed we were only getting about 3Mbs of Internet:

Cacti graph of our Internet circuit

Our Internet provider supplies us with a portal in which we can see our usage. Comparing our graph with their graph confirmed a problem existed:

Vendor’s utilization graph matching ours

Now, we just had to determine where the problem lie. First, we checked our Internet using on the inside of the firewall. The result was about 3Mbs – just what we expected. Then we ran the same test on the outside of the firewall. The result was 20Mbs — what we should be getting. This meant the problem was in the firewall.

Turns out a port had recently been mis-configured to use half-duplex causing collisions on the connection. Within just a few minutes of discovery our problem had been resolved. If it had not been for the visual graph provided by Cacti we would have been going through logs to determine what and where the problem was easily using up time better spent elsewhere.

How to copy path AND filename in Windows 7

In order to share a file using UNC names you have to join together the file’s name and the file’s location or path. In Windows XP this meant clicking on the file as if to rename it and copy the name then click in the Address bar and paste the name at the end of the path. It is a small inconvenience but, an inconvenience none the less. At first glance it appears this shortcoming was carried over in Windows 7.

Hold down the Shift key and then right-click on the file. A new option in the context menu is available named “Copy as path”. This will copy the path and file name adding quotes around the address. You can then paste the address anywhere you need it.

Context menu in Windows 7

Import GAL photo using Powershell

Powershell commands to import contact photo into Exchange Global Address list.

# Import GAL Contact photo - put photo on NAS share
$s = New-PSSession -Name T01 -ConfigurationName Microsoft.Exchange -ConnectionUri http://dellr710/PowerShell/ -Authentication Kerberos
Import-PSSession $s

$alias = "mickey"
$photo = "\\files1\IT\Miscellaneous\Employees\GAL Photos\mickey.jpg" 
Import-RecipientDataProperty -Identity $alias -Picture -FileData ([Byte[]]$(Get-Content -Path $photo -Encoding Byte -ReadCount 0))

$alias = "minnie"
$photo = "\\files1\IT\Miscellaneous\Employees\GAL Photos\minnie.jpg" 
Import-RecipientDataProperty -Identity $alias -Picture -FileData ([Byte[]]$(Get-Content -Path $photo -Encoding Byte -ReadCount 0))

$alias = "donald"
$photo = "\\files1\IT\Miscellaneous\Employees\GAL Photos\donald.jpg" 
Import-RecipientDataProperty -Identity $alias -Picture -FileData ([Byte[]]$(Get-Content -Path $photo -Encoding Byte -ReadCount 0))
Update-OfflineAddressBook "Default Offline Address Book"

Exchange PowerShell can import pictures up to 10KB while the AD attribute supports a max size of 100 KB. Recommended thumbnail photo size is 96×96 pixels

Resources: — READ THIS ONE

How to permanently disable Shadow in Windows 7

Out of the box Windows 7 adds a Shadow around all windows whether active or not. In most cases this enhances the display and makes it easier to focus on the active window. However, in some cases it can be distracting or you just don’t like it and want to remove it.

The first thing you need to do (and probably tried) is to change the Visual Effects under Performance Options like so: go into System Properties and click the Settings… button under Advanced:

Then uncheck the option Show shadows under windows and click OK:

After unchecking the option and closing the window the display immediately changes and all is good. Until you restart Windows. After restarting Windows the shadow most likely returned. If it didn’t then you are probably using Windows with administrative privileges which you should not do!

The problem appears to have surfaced way back in 2009 with Vista. It appears the registry setting to make the change permanent is being applied to the account entered when prompted by UAC. You would think 2 years later this would be fixed.

Then change the option and make the effect permanent you don't even need elevated privileges so, the UAC prompt should not even be called (at least not until you make a change that does require elevated privileges). Fortunately, the fix is quite easy:

  1. Press Windows Key + R to open the Run dialog
  2. Copy and paste the text SystemPropertiesPerformance into Run
  3. Make the change and click OK

Now, when the computer is restarted the effect will remain as set.


How to edit client permissions in Exchange 2010

Exchange Management Powershell window

Aside from the GUI Exchange 2010 gives you two ways to assign client permissions — the permissions that dictate what end-users or clients can do — to Public Folders. One is a Powershell command that will apply permissions to a single folder. The other is a Powershell script that will apply permissions to a single folder and all subfolders.

Command to add client permission to single folder:

Add-PublicFolderClientPermission -User ‘mydomain\jchaven’ -AccessRights ‘Reviewer’ -Identity ‘\Management\Former Employee Mailboxes\John Doe\Calendar’ -Server ‘servername.mydomain.local’

Powershell script to add client permissions to folder and below:

AddUsersToPFRecursive.ps1 -TopPublicFolder “\Management\Former Employee Mailboxes\John Doe” -User “jchaven” -Permission Reviewer

Note: The Shell doesn’t load scripts automatically. You must precede all scripts with .\ (a period, followed by a backslash). For example, to run the AggregatePFData.ps1 script, type .\AggregatePFData.ps1.

The collection of Shell scripts described in this topic is installed, by default, at <Exchange Installation Path>\v14\Server\Scripts.

See TechNet for more information

NOTE: You may need to change path to location of scripts in Powershell. When I tried adding location of scripts to PATH variable in a command prompt it did not work. Click on image to see what I mean.


Regular paragraph using font-family “Georgia, serif;”:

Cortado, whipped cream single shot latte con panna shop, beans chicory sit doppio shop. Caramelization, so sweet pumpkin spice strong redeye café au lait acerbic. Single origin crema id instant, milk rich, whipped robust froth crema cream. Aroma kopi-luwak half and half, roast dark viennese flavour trifecta.

Text representing an error:


Text representing CMD prompt:


Text representing Powershell:


Image hosted on Dropbox:

Image hosted on Google Drive:

Google keeps breaking this ability. Fuck Google. And I refuse to use a 3rd-party like

Image hosted on OneDrive:

# Generates passphrases similar to password generator on intranet
# inspired by:

# requires CSV file in same directory as script
$rand = new-object System.Random

# read-in very large file creating smaller list of random words
$words = Get-Content "words.csv" | Sort-Object {Get-Random} -unique | select -first 100

Function Create-Password
  # query the smaller list of words for single entry (2 times)
  $word1 = $words | Sort-Object {Get-Random} -unique | select -first 1  
  $word2 = $words | Sort-Object {Get-Random} -unique | select -first 1  

  # create random digits
  $number1 = Get-Random -Minimum 1000 -Maximum 9999
  # concatenante and return new random password
  return (Get-Culture).TextInfo.ToTitleCase($word1) + (Get-Culture).TextInfo.ToTitleCase($word2) + $number1


# generate 20 passwords
for($i=1; $i -le 20; $i++){

Regular paragraph using font-family “Special Elite, cursive;”:

Cortado, whipped cream single shot latte con panna shop, beans chicory sit doppio shop. Caramelization, so sweet pumpkin spice strong redeye café au lait acerbic. Single origin crema id instant, milk rich, whipped robust froth crema cream. Aroma kopi-luwak half and half, roast dark viennese flavour trifecta.