WSS v3 upgrade testing

I am attempting to model the upgrade of our existing WSS 2.0 site to 3.0 using the current “beta 2” release. Fun so far:

  • The installer for WSS 3 refuses to run claiming that I need Workflow Foundation v2.2 installed and ASP.NET 2.0 enabled on my site. Workflow foundation can be downloaded from www.microsoft.com/downloads. The ASP.NET issue was a bit more puzzling, since I throught I already had .NET 2.0 installed on the test server. A quick investigation revealed that it was installed, but not configured for or activated in IIS. I just ran the .NET framework installer again and now the installer runs.
  • all of the pre-release documentation and the current “readme” file are available at http://www.microsoft.com/downloads. Irritating that they did not come with the beta 2 download… I had to hunt them down.
  • After install, configuration failed. I had to run the “prescan” tool manually. The report that was generated showed that two sites were “broken”. Interestingly, I could not find any evidence that these sites actially exist when using either “stsadm -o enumsites” or the “Sharepoint Explorer” utility. Some googling revealed the concept of “site oprhans”:
    http://blogs.msdn.com/krichie/archive/2005/10/25/484889.aspx
    It is claimed that there is a tool available to fix this:
    http://support.microsoft.com/kb/918743/
    But as luck would have it our MS Essential Support has lapsed and Procuremetn has not processed the service renewal request. Dang! I will just fix the problem manually on the test server, but we will need that hotfix for Prod! Manual fix entails removing the content database from the virtual server, then adding it back in. This forces the Config database to remove all current entries, then recreate them.
  • next problem is vexing… I get this error during the upgrade process:
    An exception of type System.Runtime.InteropServices.COMException was thrown. Additional exception information: The Indexer property in the MSSConfiguration table is not set to the name of this machine.
    System.Runtime.InteropServices.COMException (0xC0041229): The Indexer property in the MSSConfiguration table is not set to the name of this machine.
    I just can’t figure this one yet. Google is worthless.

WinPE2 with BDD 3.0 beta

MS has released new builds of the Vista deployment tools with the “Business Desktop Deployment Solutions Accelerator 3.0 Beta” (AKA BDD 3.0 beta. This pack includes the “Windows AIK” that we have looked at previously. Good! The last version needed a lot of improvement.

Here are the steps that I have followed to build a new ISO, usable in VMWare Server Beta and VMWare Workstation 5.5…

  1. Install the BDD 3.0 pack
  2. from c:\program files\bdd vista\waik, install the WAIK using “startcd.exe”.
  3. Using the included CHM files, follow the “Walkthough: Create a bootable Windows PE RAM Disk on CD-ROM”:
    1. from c:\program files\windows aik\tools\petools, run:
      copype x86 c:\winpe_x86
    2. step 2 in this procedure claims that you can copy EXE files (such as ImageX.exe) to c:\winpe_x86\iso, and they will then be included in the image…
      NOTE: These files show up on the “D:” drive after booting into WinPE. The reason for putting additional tools here is to reduce the memory footprint of WinPE. Everything in the X: drive is loaded into RAM at boot time!
    3. before actually making the iso, apply some customizations:
      1. Mount the WinPE WIM file:
        imagex /apply c:\winpe_x86\winpe.wim 1 c:\winpe_x86\mount
      2. Install drivers:
        peimg /inf=c:\drivers\vmware\vmxnet\win2k\vmware-nic.inf c:\winpe_x86\mount\Windows
        C:\winpe_x86_2>peimg /inf=c:\drivers\vmware\vmxnet\win2k\vmxnet.inf c:\winpe_x86\mount\Windows
      3. Install optional components
        peimg /install=*srt* c:\winpe_x86\mount\windows
        peimg /list c:\winpe_x86\mount\windows
        (shows currently installed optional packages
      4. If you want ImageX (or any other utilities) in the RAM disk, put them there now:
        Copy files from c:\program files\windows aik\tools\x86 to c:\winpe_x86\mount\windows\system32
        (This includes the imagex.exe utility. I suppose these really should go in the “programs” directory, to separate them from the actual OS files, but this way they are in the path so the idiot end user does not have to know where the ImageX utility is, just how to use it).
      5. Prep the PE image (don’t ask me why, it is in the directions!):
        peimg /prep c:\winpe_x86\mount\Windows
      6. capture the mounted PE instace to a WIM:
        imagex /append c:\winpe_x86\mount c:\winpe_x86\winpe.wim "MyWinPE" /verify
        (Actually appends this instance to an existing WIM)
      7. Export the appended image to a bootable WIM file:
        imagex /boot /export c:\winpe_x86\winpe.wim 2 c:\winpe_x86\ISO\sources\boot.wim
        (NOTE: the instructions on “custom images” fails to mention that you must use the “/boot” flag here!)
      8. Create the ISO:
        oscdimg -n –bc:\winpe_x86\etfsboot.com c:\winpe_x86\ISO c:\winpe_x86\winpe_x86.iso

Live from TechEd 2006

Ha!

Anyway, here we are at the TechEd conference 2006… my first major geek convention. Free backpacks, giveaways, freebies, and MS TechEd 2006 water bottles. Actually, I am pretty excited.

I am waiting for the “Scripting for IT Pros who can’t write code” class to begin. Speaker is Corey J. Hynes of HynesITe, Inc.

First interesting thing… the PPT slides on the screen were loaded from a desktop that was labeled “PPT Server”. Is there such a thing? Perhaps that is something we should look into for Professors and Execs. If nothing else, we could easily sell Sharepoint as a PPT server as an initial justification.

Note: It was a link to a Sharepoint Document Library, duh. I guess it had not occured to me how convenient Sharepoint would be from a presenter’s perspective.

Script – cleaning up inactive computer objects

Here is another weenie script that I put together to clean up expired computer objects in our AD domain.  Afer some experimantiation, I settled on using the "oldcmp.exe" tool from the excellent www.joeware.com site, rather than a combination of "dequery" "dsrm" and "dsmod" commands.  The reason for going third-party here is that I could not find a particularly elegant way of handling error codes from dsmod and dsrm.  If my "dsquery" returned no results, then "dsmod" gets upset and returns a non-zero error code.  I then need so fancy "IF" statements to handle all possible error codes of interest.  Oldcmp is just cleaner in this regard, and makes more useful output to boot.

Anyway, here is the code: 

REM Inactive Computer Object Cleanup Script
REM v1.0
REM JGM, 2006-06-05

:start
@ECHO off
ECHO Inactive Computer Object Cleanup Script Report > .\logs\inactive_cmp_cleanup.rpt
ECHO= >> .\logs\inactive_cmp_cleanup.rpt

REM Each of the next six IF commands will exit the script to a line-specific error report script section.  The condition for determining that an error has occured is if the %errorlevel% variable returned by a command does not equal zero.
REM Disables inactive computers using the following criteria:
REM Default "Workstation" OU: Inactive for 26 weeks (1/2 year), "RIS-Workstations" OU: Inactive for 4 weeks (~1 months), all objects in "Resources" OU: Inactive for 26 weeks (3/4 year)
oldcmp -disable -unsafe -forreal -age 183 -format csv -delim TAB -llts -nolc -b ou=workstations,dc=campus,dc=ad,dc=uvm,dc=edu -file .\logs\wksDisRpt.tsv > .\logs\inactive_cmp_cleanup.log
IF %ERRORLEVEL% NEQ 0 THEN goto wksDisEr
oldcmp -disable -unsafe -forreal -age 30 -format csv -delim TAB -llts -nolc -b ou=ris-workstations,ou=cit,dc=campus,dc=ad,dc=uvm,dc=edu -file .\logs\risDisRpt.tsv >> .\logs\inactive_cmp_cleanup.log
IF %ERRORLEVEL% NEQ 0 THEN goto risDisEr
oldcmp -disable -unsafe -forreal -age 183 -format csv -delim TAB -llts -nolc -b ou=resources,dc=campus,dc=ad,dc=uvm,dc=edu -file .\logs\resDisRpt.tsv >> .\logs\inactive_cmp_cleanup.log
IF %ERRORLEVEL% NEQ 0 THEN goto resDisEr

REM Removes inactive computers using the following criteria:
REM Default "Workstation" OU: Inactive for 39 weeks (3/4 year), "RIS-Workstations" OU: Inactive for 13 weeks (~3 months), all objects in "Resources" OU: Inactive for 39 weeks (3/4 year)
oldcmp -delete -unsafe -forreal -age 274 -format csv -delim TAB -llts -nolc -b ou=workstations,dc=campus,dc=ad,dc=uvm,dc=edu -file .\logs\wksDelRpt.tsv >> .\logs\inactive_cmp_cleanup.log
IF %ERRORLEVEL% NEQ 0 THEN goto wksDelEr
oldcmp -delete -unsafe -forreal -age 90 -format csv -delim TAB -llts -nolc -b ou=ris-workstations,ou=cit,dc=campus,dc=ad,dc=uvm,dc=edu -file .\logs\risDelRpt.tsv >> .\logs\inactive_cmp_cleanup.log
IF %ERRORLEVEL% NEQ 0 THEN goto risDelEr
oldcmp -delete -unsafe -forreal -age 274 -format csv -delim TAB -llts -nolc -b ou=resources,dc=campus,dc=ad,dc=uvm,dc=edu -file .\logs\resDelRpt.tsv >> .\logs\inactive_cmp_cleanup.log
IF %ERRORLEVEL% NEQ 0 THEN goto resDelEr

goto noErr

REM Following six sections will append a section-specific error message to the report file, then exit to the "errRpt" section of the script.
:wksDisEr
ECHO Something went terribly wrong in the workstation OU disable process >> .\logs\inactive_cmp_cleanup.rpt
goto errRpt
:risDisEr
ECHO Something went terribly wrong in the RIS-Workstations OU disable process >> .\logs\inactive_cmp_cleanup.rpt
goto errRpt
:resDisEr
ECHO Something went terribly wrong in the Resources OU disable process >> .\logs\inactive_cmp_cleanup.rpt
goto errRpt
:wksDelEr
ECHO Something went terribly wrong in the workstation OU deletion process >> .\logs\inactive_cmp_cleanup.rpt
goto errRpt
:risDelEr
ECHO Something went terribly wrong in the RIS OU deletion process >> .\logs\inactive_cmp_cleanup.rpt
goto errRpt
:resDelEr
ECHO Something went terribly wrong in the Resources OU deletion process >> .\logs\inactive_cmp_cleanup.rpt
goto errRpt

:errRpt
REM Append the script log to the error report, set status of the script to "FAILED"
ECHO Errors were reported.  Analyze the logs below for clues. >> .\logs\inactive_cmp_cleanup.rpt
SET ScriptStat=FAILED
goto mailRpt

:noErr
REM Append a 'no error' message to the report file, set script status to "SUCCESS"
ECHO No errors were reported in the process.  Activity report follows: >> .\logs\inactive_cmp_cleanup.rpt
SET ScriptStat=SUCCESS
goto mailRpt

:mailRpt
REM Append the reports from each "oldcmp" run into the consolidated report:
type .\logs\inactive_cmp_cleanup.log >> .\logs\inactive_cmp_cleanup.rpt
REM use external "blat" tool to mail the generated report file to concerned parties:
blat .\logs\inactive_cmp_cleanup.rpt -to jgm@uvm.edu,gcd@uvm.edu,pjp@uvm.edu -subject "%ScriptStat% - Inactive Computer Account Cleanup Script"

:end
ECHO All done!

Sharepoint Services v3

In addition to looking at Project Server 2007 (which looks overly complicated… and still required IE for full-featured web access… bleagh!), I have been eyeballing STS3, the next version of Sharepoint.

Very Cool!

Here are some first impressions/highlights:

  • Default template for Blogs and Wikis
  • The Wiki resembles MediaWiki (it uses the same [[link]] syntax.  The Blog looks much like any other Blog, but with the in-line posting and editing features that make Sharepoint so easy to use.  The addition of Single sign-on and Directory Services integration make the service even easier to manage.
  • Directory lookup tool for groups and users (you no longer need to know the NetID or department group name)
  • Incoming mail support (errgh… this is going to get ugly… people will want this feature and it does not appear to work without Exchange!)