Commerce Server 2007 PUP Check.
So as you all know I am a Non-MVP for Commerce Server 2007 however I have worked tirelessly with this server. I know a ton of the in’s and outs of the architecture and have written a good number of scripts and modified others scripts to work.
Recently I have had the pleasure of making Commerce Server 2007 run (play nice) with Windows Server 2008r2. This was interesting in many many ways to which I will document down the road.
For this post I wanted to share a great little script that helps with your own or the default “PUP” install.
As those of us that have installed Commerce Server 2007 on multiple machines architectures and what not know when installing the “PUP” it is important to keep the “default” web site intact. Also if you can help it, Not to have any other sites running or created in IIS6 - IIS7.5. However you may have some installed and the APP ID’s all randomized (default behavior for IIS (all versions)). The “PUP” installer may have issues with “other” web sites running in IIS.
So to check what may be causing these issues try running my happy little script.
Put the following code into a vbs and run.
'The code below simulates Commerce Server Site Packager checking IIS health.
'This IIS checking happens when you click the "next" button at the first dialog of the Site Unpacking
'This code helps you to find out where the checking failsset oNet=CreateObject("WScript.Network")
sLocalMachine = oNet.ComputerName
Set webServer = GetObject("IIS://" & sLocalMachine & "/w3svc")
msgbox "Web Server "+ sLocalMachine +" has the following Web Sites:"
For Each webSite In webServer
If IsNumeric(webSite.Name) ThensName = webSite.Name
msgbox "Web Instance Number: "+sNamesComment = webSite.ServerComment
msgbox "Web Site Name: "+sCommentFoo = webSite.ServerBindings
msgbox "Port "+Foo(0)Set vroot = webSite.GetObject("IIsWebVirtualDir", "Root")
msgbox "Root: "+vroot.path
End If
Nextset onet=nothing
set webserver=nothing
set webSite=nothing
set vroot=nothing
Enjoy! Let me know how it goes.
Commerce Server 2007: Determine the Service Pack (Lookup Script)
To those whom love Commerce Server 2007 as much as I do. Here is a little script to help you determine the Service Pack level of each database.
use MSCS_Admin select s_PropertyName, s_Value From dbo.resourceProps
This will return multiple values. This is helpful in knowing if you have Commerce Server 2007 installed correctly as well as helping you to identify the correct service pack upgrade number per database.
SP1
Transaction Database = 7.0
Transaction Config Database = 7.0
Product Catalog Database = 7.2
Inventory Database = 7.1
Direct Mailer Database = 6.0
SP2
Transaction Database = 7.1
Transaction Config Database = 7.1
Product Catalog Database = 7.3
Inventory Database = 7.2
Direct Mailer Database = 6.0
Enjoy!
Commerce Server 2007 Scripts to make your Commerce Server 2007 Life easier
Before I start I have to give a huge hat tip to Wade Wegner for these scripts as they are not mine. I am simply just helping to make them more accessible.
Truth be known these scripts should be included in every install of Commerce Server 2007.
Create CS 2007 Local Users VB Script:
' Set the local computer name strComputer = "." ' Run the Load method Load ' Encapsulates the processing of this script Sub Load() ' Create the CS 2007 users CreateUser "CatalogWebSvc","Pa$$w0rd","Account for running the Catalog Web service" CreateUser "CSDNSvc","Pa$$w0rd","Account for running the Commerce Server Direct mailer service" CreateUser "CSHealthMonitorSvc","Pa$$w0rd","Account for running the Commerce Server health Monitoring service" CreateUser "CSLOB","Pa$$w0rd","Account for running the Commerce Server adapters" CreateUser "CSStageSvc","Pa$$w0rd","Account for running the Commerce Server Staging service" CreateUser "MarketingWebSvc","Pa$$w0rd","Account for running the Marketing Web service" CreateUser "OrdersWebSvc","Pa$$w0rd","Account for running the Orders Web service" CreateUser "ProfilesWebSvc","Pa$$w0rd","Account for running the Profiles Web service" CreateUser "RunTimeUser","Pa$$w0rd","IIS account for accessing a Commerce Server site or application" MsgBox "Complete!" End Sub ' Create the local user Sub CreateUser(userName, password, description) ' Check to see if the user exists; if so, then skip If NOT CheckIfUserExists(userName) Then Set objComputer = GetObject("WinNT://" & strComputer & "") Set objUser = objComputer.Create("user", userName) objUser.SetPassword password objUser.FullName = userName objUser.Description = description objUser.Put "UserFlags", 65600 ' Sets Password Never Expires to TRUE ' and sets User Can't Change Password to TRUE objUser.SetInfo Else MsgBox userName & " already exists!" End If End Sub ' Check to see if user exists Function CheckIfUserExists(userName) Set objComputer = GetObject("WinNT://" & strComputer & "") objComputer.Filter = Array("user") intFound = 0 For Each User In objComputer If lcase(User.Name) = lcase(userName) Then intFound = 1 End If Next If intFound = 1 Then CheckIfUserExists = True Else CheckIfUserExists = False End If End Function
Create CS Logins and Assign Roles SQL Script:
Note:
I would recommend opening this in Notepad (or your favorite editor) and replace all the CSharpSite with your Website name.
As well as CS2007 with your Server HOST Name.
USE [master] GO CREATE LOGIN [CS2007\ASPNET] FROM WINDOWS WITH DEFAULT_DATABASE=[master] GO CREATE LOGIN [CS2007\CatalogWebSvc] FROM WINDOWS WITH DEFAULT_DATABASE=[master] GO CREATE LOGIN [CS2007\CSDMSvc] FROM WINDOWS WITH DEFAULT_DATABASE=[master] GO CREATE LOGIN [CS2007\CSHealthMonitorSvc] FROM WINDOWS WITH DEFAULT_DATABASE=[master] GO CREATE LOGIN [CS2007\CSStageSvc] FROM WINDOWS WITH DEFAULT_DATABASE=[master] GO CREATE LOGIN [CS2007\MarketingWebSvc] FROM WINDOWS WITH DEFAULT_DATABASE=[master] GO CREATE LOGIN [CS2007\OrdersWebSvc] FROM WINDOWS WITH DEFAULT_DATABASE=[master] GO CREATE LOGIN [CS2007\ProfilesWebSvc] FROM WINDOWS WITH DEFAULT_DATABASE=[master] GO CREATE LOGIN [CS2007\RunTimeUser] FROM WINDOWS WITH DEFAULT_DATABASE=[master] GO ---------------------------------------------------------------- -- Assign database accounts to database roles in SQL Server 2005 ---------------------------------------------------------------- -- ASPNET USE [MSCS_Admin] GO CREATE USER [CS2007\ASPNET] FOR LOGIN [CS2007\ASPNET] GO USE [MSCS_Admin] GO EXEC sp_addrolemember N'db_datareader', N'CS2007\ASPNET' GO --CatalogWebSvc USE [CSharpSite_productcatalog] GO CREATE USER [CS2007\CatalogWebSvc] FOR LOGIN [CS2007\CatalogWebSvc] GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'ctlg_CatalogWriterRole', N'CS2007\CatalogWebSvc' GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'db_datareader', N'CS2007\CatalogWebSvc' GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'db_datawriter', N'CS2007\CatalogWebSvc' GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'db_ddladmin', N'CS2007\CatalogWebSvc' GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'db_securityadmin', N'CS2007\CatalogWebSvc' GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'Inventory_ReaderRole', N'CS2007\CatalogWebSvc' GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'Inventory_WriterRole', N'CS2007\CatalogWebSvc' GO USE [MSCS_Admin] GO CREATE USER [CS2007\CatalogWebSvc] FOR LOGIN [CS2007\CatalogWebSvc] GO USE [MSCS_Admin] GO EXEC sp_addrolemember N'admin_reader_role', N'CS2007\CatalogWebSvc' GO USE [MSCS_CatalogScratch] GO CREATE USER [CS2007\CatalogWebSvc] FOR LOGIN [CS2007\CatalogWebSvc] GO USE [MSCS_CatalogScratch] GO EXEC sp_addrolemember N'db_datareader', N'CS2007\CatalogWebSvc' GO USE [MSCS_CatalogScratch] GO EXEC sp_addrolemember N'db_datawriter', N'CS2007\CatalogWebSvc' GO USE [MSCS_CatalogScratch] GO EXEC sp_addrolemember N'db_ddladmin', N'CS2007\CatalogWebSvc' GO -- MarketingWebSvc USE [CSharpSite_marketing] GO CREATE USER [CS2007\MarketingWebSvc] FOR LOGIN [CS2007\MarketingWebSvc] GO USE [CSharpSite_marketing] GO EXEC sp_addrolemember N'mktg_marketingService_role', N'CS2007\MarketingWebSvc' GO USE [CSharpSite_marketing] GO EXEC sp_addrolemember N'mktg_promoCodeGenerator_role', N'CS2007\MarketingWebSvc' GO USE [CSharpSite_marketing_lists] GO CREATE USER [CS2007\MarketingWebSvc] FOR LOGIN [CS2007\MarketingWebSvc] GO USE [CSharpSite_marketing_lists] GO EXEC sp_addrolemember N'db_owner', N'CS2007\MarketingWebSvc' GO USE [CSharpSite_productcatalog] GO CREATE USER [CS2007\MarketingWebSvc] FOR LOGIN [CS2007\MarketingWebSvc] GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'ctlg_CatalogReaderRole', N'CS2007\MarketingWebSvc' GO USE [CSharpSite_profiles] GO CREATE USER [CS2007\MarketingWebSvc] FOR LOGIN [CS2007\MarketingWebSvc] GO USE [CSharpSite_profiles] GO EXEC sp_addrolemember N'Profile_Reader', N'CS2007\MarketingWebSvc' GO USE [CSharpSite_profiles] GO EXEC sp_addrolemember N'Profile_Schema_Reader', N'CS2007\MarketingWebSvc' GO USE [MSCS_Admin] GO CREATE USER [CS2007\MarketingWebSvc] FOR LOGIN [CS2007\MarketingWebSvc] GO USE [MSCS_Admin] GO EXEC sp_addrolemember N'admin_reader_role', N'CS2007\MarketingWebSvc' GO -- OrdersWebSvc USE [CSharpSite_marketing] GO CREATE USER [CS2007\OrdersWebSvc] FOR LOGIN [CS2007\OrdersWebSvc] GO USE [CSharpSite_marketing] GO EXEC sp_addrolemember N'db_ddladmin', N'CS2007\OrdersWebSvc' GO USE [CSharpSite_marketing] GO EXEC sp_addrolemember N'mktg_runtime_role', N'CS2007\OrdersWebSvc' GO USE [CSharpSite_productcatalog] GO CREATE USER [CS2007\OrdersWebSvc] FOR LOGIN [CS2007\OrdersWebSvc] GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'ctlg_CatalogReaderRole', N'CS2007\OrdersWebSvc' GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'Inventory_ReaderRole', N'CS2007\OrdersWebSvc' GO USE [CSharpSite_profiles] GO CREATE USER [CS2007\OrdersWebSvc] FOR LOGIN [CS2007\OrdersWebSvc] GO USE [CSharpSite_profiles] GO EXEC sp_addrolemember N'Profile_Reader', N'CS2007\OrdersWebSvc' GO USE [CSharpSite_profiles] GO EXEC sp_addrolemember N'Profile_Schema_Reader', N'CS2007\OrdersWebSvc' GO USE [CSharpSite_transactionconfig] GO CREATE USER [CS2007\OrdersWebSvc] FOR LOGIN [CS2007\OrdersWebSvc] GO USE [CSharpSite_transactionconfig] GO EXEC sp_addrolemember N'Orders_Management', N'CS2007\OrdersWebSvc' GO USE [CSharpSite_transactions] GO CREATE USER [CS2007\OrdersWebSvc] FOR LOGIN [CS2007\OrdersWebSvc] GO USE [CSharpSite_transactions] GO EXEC sp_addrolemember N'Orders_Management', N'CS2007\OrdersWebSvc' GO USE [CSharpSite_transactions] GO EXEC sp_addrolemember N'Orders_Runtime', N'CS2007\OrdersWebSvc' GO USE [MSCS_Admin] GO CREATE USER [CS2007\OrdersWebSvc] FOR LOGIN [CS2007\OrdersWebSvc] GO USE [MSCS_Admin] GO EXEC sp_addrolemember N'admin_reader_role', N'CS2007\OrdersWebSvc' GO USE [MSCS_CatalogScratch] GO CREATE USER [CS2007\OrdersWebSvc] FOR LOGIN [CS2007\OrdersWebSvc] GO USE [MSCS_CatalogScratch] GO EXEC sp_addrolemember N'db_datareader', N'CS2007\OrdersWebSvc' GO USE [MSCS_CatalogScratch] GO EXEC sp_addrolemember N'db_datawriter', N'CS2007\OrdersWebSvc' GO USE [MSCS_CatalogScratch] GO EXEC sp_addrolemember N'db_ddladmin', N'CS2007\OrdersWebSvc' GO -- ProfilesWebSvc USE [CSharpSite_profiles] GO CREATE USER [CS2007\ProfilesWebSvc] FOR LOGIN [CS2007\ProfilesWebSvc] GO USE [CSharpSite_profiles] GO EXEC sp_addrolemember N'Profile_Runtime', N'CS2007\ProfilesWebSvc' GO USE [CSharpSite_profiles] GO EXEC sp_addrolemember N'Profile_Schema_Manager', N'CS2007\ProfilesWebSvc' GO USE [MSCS_Admin] GO CREATE USER [CS2007\ProfilesWebSvc] FOR LOGIN [CS2007\ProfilesWebSvc] GO USE [MSCS_Admin] GO EXEC sp_addrolemember N'admin_reader_role', N'CS2007\ProfilesWebSvc' GO -- RunTimeUser USE [CSharpSite_marketing] GO CREATE USER [CS2007\RunTimeUser] FOR LOGIN [CS2007\RunTimeUser] GO USE [CSharpSite_marketing] GO EXEC sp_addrolemember N'db_ddladmin', N'CS2007\RunTimeUser' GO USE [CSharpSite_marketing] GO EXEC sp_addrolemember N'mktg_runtime_role', N'CS2007\RunTimeUser' GO USE [CSharpSite_marketing_lists] GO CREATE USER [CS2007\RunTimeUser] FOR LOGIN [CS2007\RunTimeUser] GO USE [CSharpSite_marketing_lists] GO EXEC sp_addrolemember N'db_datareader', N'CS2007\RunTimeUser' GO USE [CSharpSite_productcatalog] GO CREATE USER [CS2007\RunTimeUser] FOR LOGIN [CS2007\RunTimeUser] GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'ctlg_CatalogReaderRole', N'CS2007\RunTimeUser' GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'Inventory_RuntimeRole', N'CS2007\RunTimeUser' GO USE [CSharpSite_profiles] GO CREATE USER [CS2007\RunTimeUser] FOR LOGIN [CS2007\RunTimeUser] GO USE [CSharpSite_profiles] GO EXEC sp_addrolemember N'Profile_Runtime', N'CS2007\RunTimeUser' GO USE [CSharpSite_profiles] GO EXEC sp_addrolemember N'Profile_Schema_Reader', N'CS2007\RunTimeUser' GO USE [CSharpSite_transactionconfig] GO CREATE USER [CS2007\RunTimeUser] FOR LOGIN [CS2007\RunTimeUser] GO USE [CSharpSite_transactionconfig] GO EXEC sp_addrolemember N'Orders_Runtime', N'CS2007\RunTimeUser' GO USE [CSharpSite_transactions] GO CREATE USER [CS2007\RunTimeUser] FOR LOGIN [CS2007\RunTimeUser] GO USE [CSharpSite_transactions] GO EXEC sp_addrolemember N'Orders_Runtime', N'CS2007\RunTimeUser' GO USE [MSCS_Admin] GO CREATE USER [CS2007\RunTimeUser] FOR LOGIN [CS2007\RunTimeUser] GO USE [MSCS_Admin] GO EXEC sp_addrolemember N'admin_reader_role', N'CS2007\RunTimeUser' GO USE [MSCS_CatalogScratch] GO CREATE USER [CS2007\RunTimeUser] FOR LOGIN [CS2007\RunTimeUser] GO USE [MSCS_CatalogScratch] GO EXEC sp_addrolemember N'db_datareader', N'CS2007\RunTimeUser' GO USE [MSCS_CatalogScratch] GO EXEC sp_addrolemember N'db_datawriter', N'CS2007\RunTimeUser' GO USE [MSCS_CatalogScratch] GO EXEC sp_addrolemember N'db_ddladmin', N'CS2007\RunTimeUser' GO -- CSDMSvc USE [CSharpSite_marketing] GO CREATE USER [CS2007\CSDMSvc] FOR LOGIN [CS2007\CSDMSvc] GO USE [CSharpSite_marketing] GO EXEC sp_addrolemember N'mktg_directmailer_role', N'CS2007\CSDMSvc' GO USE [CSharpSite_marketing_lists] GO CREATE USER [CS2007\CSDMSvc] FOR LOGIN [CS2007\CSDMSvc] GO USE [CSharpSite_marketing_lists] GO EXEC sp_addrolemember N'db_owner', N'CS2007\CSDMSvc' GO USE [CSharpSite_profiles] GO CREATE USER [CS2007\CSDMSvc] FOR LOGIN [CS2007\CSDMSvc] GO USE [CSharpSite_profiles] GO EXEC sp_addrolemember N'Profile_Reader', N'CS2007\CSDMSvc' GO USE [CSharpSite_profiles] GO EXEC sp_addrolemember N'Profile_Schema_Reader', N'CS2007\CSDMSvc' GO USE [DirectMailer] GO CREATE USER [CS2007\CSDMSvc] FOR LOGIN [CS2007\CSDMSvc] GO USE [DirectMailer] GO EXEC sp_addrolemember N'db_owner', N'CS2007\CSDMSvc' GO USE [MSCS_Admin] GO CREATE USER [CS2007\CSDMSvc] FOR LOGIN [CS2007\CSDMSvc] GO USE [MSCS_Admin] GO EXEC sp_addrolemember N'admin_reader_role', N'CS2007\CSDMSvc' GO -- CSHealthMonitorSvc USE [MSCS_Admin] GO CREATE USER [CS2007\CSHealthMonitorSvc] FOR LOGIN [CS2007\CSHealthMonitorSvc] GO USE [MSCS_Admin] GO EXEC sp_addrolemember N'admin_reader_role', N'CS2007\CSHealthMonitorSvc' GO -- USE [CSharpSite_marketing] GO CREATE USER [CS2007\CSStageSvc] FOR LOGIN [CS2007\CSStageSvc] GO USE [CSharpSite_marketing] GO EXEC sp_addrolemember N'db_ddladmin', N'CS2007\CSStageSvc' GO USE [CSharpSite_marketing] GO EXEC sp_addrolemember N'mktg_staging_role', N'CS2007\CSStageSvc' GO USE [CSharpSite_marketing_lists] GO CREATE USER [CS2007\CSStageSvc] FOR LOGIN [CS2007\CSStageSvc] GO USE [CSharpSite_marketing_lists] GO EXEC sp_addrolemember N'db_datareader', N'CS2007\CSStageSvc' GO USE [CSharpSite_productcatalog] GO CREATE USER [CS2007\CSStageSvc] FOR LOGIN [CS2007\CSStageSvc] GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'ctlg_CatalogWriterRole', N'CS2007\CSStageSvc' GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'db_datareader', N'CS2007\CSStageSvc' GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'db_datawriter', N'CS2007\CSStageSvc' GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'db_ddladmin', N'CS2007\CSStageSvc' GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'db_securityadmin', N'CS2007\CSStageSvc' GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'Inventory_ReaderRole', N'CS2007\CSStageSvc' GO USE [CSharpSite_productcatalog] GO EXEC sp_addrolemember N'Inventory_WriterRole', N'CS2007\CSStageSvc' GO USE [CSharpSite_profiles] GO CREATE USER [CS2007\CSStageSvc] FOR LOGIN [CS2007\CSStageSvc] GO USE [CSharpSite_profiles] GO EXEC sp_addrolemember N'Profile_Schema_Manager', N'CS2007\CSStageSvc' GO USE [CSharpSite_transactionconfig] GO CREATE USER [CS2007\CSStageSvc] FOR LOGIN [CS2007\CSStageSvc] GO USE [CSharpSite_transactionconfig] GO EXEC sp_addrolemember N'Orders_Management', N'CS2007\CSStageSvc' GO USE [MSCS_Admin] GO CREATE USER [CS2007\CSStageSvc] FOR LOGIN [CS2007\CSStageSvc] GO USE [MSCS_Admin] GO EXEC sp_addrolemember N'admin_reader_role', N'CS2007\CSStageSvc' GO USE [MSCS_CatalogScratch] GO CREATE USER [CS2007\CSStageSvc] FOR LOGIN [CS2007\CSStageSvc] GO USE [MSCS_CatalogScratch] GO EXEC sp_addrolemember N'db_datareader', N'CS2007\CSStageSvc' GO USE [MSCS_CatalogScratch] GO EXEC sp_addrolemember N'db_datawriter', N'CS2007\CSStageSvc' GO USE [MSCS_CatalogScratch] GO EXEC sp_addrolemember N'db_ddladmin', N'CS2007\CSStageSvc' GO
Make sure to have the xcalcs_installer.exe installed before going on.
Assign CS Permissions VB Script:
' Declare the users Dim users(4) users(0) = "RunTimeUser" users(1) = "CatalogWebSvc" users(2) = "MarketingWebSvc" users(3) = "OrdersWebSvc" users(4) = "ProfilesWebSvc" ' Run the Load method Load Sub Load() ' Write permissions to the catalog auth role strObject = "C:\Inetpub\wwwroot\CatalogWebService\CatalogAuthorizationStore.xml" UpdatePermissions strObject, users(1) ' Write permissions to temporary ASP.NET folder strObject = "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files" For Each user IN users UpdatePermissions strObject, user Next ' Write permissions to the Windows temporary folder strObject = "C:\WINDOWS\Temp" For Each user IN users UpdatePermissions strObject, user Next End Sub ' Update the permissions of the folder/file Sub UpdatePermissions(strLocation, strUser) Set objShell = CreateObject("Wscript.Shell") ' Make sure to have the xcacls.vbs file available. Download from: ' http://download.microsoft.com/download/f/7/8/f786aaf3-a37b-45ab-b0a2-8c8c18bbf483/xcacls_installer.exe objShell.Run "xcacls.vbs """ + strLocation + """ /G " + strUser + ":XW /E", 2, True End Sub
These Scripts should make life a little easier when installing Commerce Server 2007. Enjoy!
Hat Tip Wade Wegner



