Apr 18
Overview of Azure IaaS and setting up TEST SharePoint environment in IaaS
Many small and mid-size companies don't always have a TEST or DEV SharePoint site.  It's too expensive and not used often. It should be used for testing software patches and updates, or perhaps a training area.   Working on the Project Server side of things as well, it's hard to fix issues unless it can be reproduce on a test server.  It's easy to see that a TEST SharePoint Environment is critical for the support and maintenance of a well-run SharePoint farm.  

Playing around in Azure for the past year, I ran across many issues with using SQL server and the Azure environment until I realized that I needed to build SharePoint based on an IaaS model and not PaaS or SaaS.  Once that realization came to me and I was able to build a test SharePoint Farm, I can now share how this can be done.

My blog will be broken down into the following sections

  1. Overview of Azure IaaS
  2. Resource Groups, Storage Accounts and VNETS
  3. Active Directory VM
  4. SQL Server VM
  5. SharePoint Server VM

Cloud Computing Services (Premise, Iaas, PaaS, SaaS)
IaaS-IaaP-SaaS-Premise-Diagram50.png 
On Premise – all the following items are done on site and managed by the IT team.

  1. Hardware on site
  2. Network setup
  3. File Server
  4. Active Directory, DNS and DHCP Server
  5. SQL Server
  6. SharePoint Server

IaaS – Information as a Service – basically the SharePoint site is created in Azure cloud.   The cost saving comes from running the environment when it is need and then turn it off when not used.  Hardware, a/c and floor space is not required.  Scaling up and down is easily done based on workloads.

Once SharePoint environment is setup, users can either access SharePoint farm from Windows 10 VM thru RDP or connect thru the VM servers.   Best practice would be to RDP into a Windows 10 environment and then test or train just like you would do on your local on premise site.

  1. Services in the cloud are Virtual Machines
  2. VNET or virtual network it is a private local network in Azure for your company
  3. Storage Accounts or file servers. VMs and files have to be stored somewhere
  4. Active Directory, DNS and DHCP service running on one or more VMs
  5. SQL Server VM
  6. SharePoint Server VM
  7. Windows 10 VM

PaaS – Information as a Service – This platform cannot be used because SharePoint is not a platform.  Unfortunately, SQL server cannot be used as well because SharePoint doesn't support the use of SQL Azure.

SaaS – Software as a Service – Office 365 contains SharePoint and it is completely managed by Microsoft.  Because of this, the SaaS platform cannot be used to mimic your on premise network.  However, if Microsoft had there you, you would leave on-premises and become part of their subscription service.

In the next blog, we will review setting up Resource Groups, Storage Accounts and VNET (Virtual Network.  Once this is done, the back bone of the IaaS SharePoint Farm is starting to form.​


 

Mar 25
How to change Domain when Migration from PS2010 to PS2013
Migration project server 2010 and 2013 can be challenging, however when changing the domain is part of the migration, then additional unsupported steps must be done.   Basically the enterprise resource pool contains the user profile, along with the active directory account (domain).   There are several SQL tables that need to be updated using a SQL update command to switch the domain reference.  Also, the each enterprise profile has a GUID that points back to the AD GUID and this needs to be update.
The following SQL command will help you get thru that process.   As always, this should be tested in an test environment prior to migrating to production.
​-- UpdateDomainUsers
--
--  Updates the following tables for domain user from OLDdomain to NEWdomain
--  1) PUB.MSP_RESOURCES
--  2) PUB.MSP_EPMRESOURCE
--  3) REPORT.MSP_EPMRESOURCE 
--  
USE ProjectWebApp
--
--  First look at the what the domain name replace looks like
--  Make sure that domain name matches the account used to create PWA
--
SELECT r.WRES_ACCOUNT
                , REPLACE (LTRIM(r.WRES_ACCOUNT), 'OLDdomain ', 'NEWdomain') as WReS2
                , R.WRES_CLAIMS_ACCOUNT
                , REPLACE (LTRIM(R.WRES_CLAIMS_ACCOUNT), 'OLDdomain ', 'NEWdomain') as W2
                , WRES_AD_GUID
FROM pub.MSP_Resources r
Where not r.WRES_ACCOUNT is null
--
--  After a visual inspection, the tables can be updated
--  Also, there may be a few accounts to exclude, such as the farm admin account
--  We are also setting the WRES_AD_GUID to null, because during the resource sync,
--  the GUID will get update to the new DOMAIN
--
UPDATE pub.MSP_Resources
                SET  WRES_ACCOUNT = REPLACE (LTRIM(WRES_ACCOUNT), 'OLDdomain', 'NEWdomain')
                ,  WRES_CLAIMS_ACCOUNT = REPLACE (LTRIM(WRES_CLAIMS_ACCOUNT), 'OLDdomain', 'NEWdomain')
                , WRES_AD_GUID = null
WHERE not WRES_ACCOUNT is null
AND WRES_CLAIMS_ACCOUNT <> 'i:0#.w|OLDdomain\username1'
AND WRES_CLAIMS_ACCOUNT <> 'i:0#.w|OLDdomain\username2'
--
--  There may be a few other accounts that need to have the RES_AD_GUID updated
--
UPDATE pub.MSP_Resources
                SET  WRES_ACCOUNT = REPLACE (LTRIM(WRES_ACCOUNT), 'OLDdomain', 'NEWdomain')
                ,  WRES_CLAIMS_ACCOUNT = REPLACE (LTRIM(WRES_CLAIMS_ACCOUNT), 'OLDdomain', 'NEWdomain')
                , WRES_AD_GUID = null
WHERE WRES_CLAIMS_ACCOUNT = 'i:0#.w|OLDdomain\username'
--
--  Check out accounts records and verify update done correctly
--
select r.WRES_ACCOUNT
                , R.WRES_CLAIMS_ACCOUNT
                , WRES_AD_GUID
FROM pub.MSP_Resources r
Where not r.WRES_ACCOUNT is null
--
--  MSP_EpmResource table needs the same care for updating domains
--
SELECT
                ResourceNTAccount
                , UserClaimsAccount
FROM dbo.MSP_EpmResource R
--
--  After visual inspection, then update the records
--
select
                ResourceNTAccount
                , REPLACE (LTRIM(r.ResourceNTAccount), 'OLDdomain', 'NEWdomain') as WReS2
                , R.UserClaimsAccount
                , REPLACE (LTRIM(R.UserClaimsAccount), ;OLDdomain', 'NEWdomain') as W2
FROM dbo.MSP_EpmResource R
--
-- 
--
UPDATE MSP_EpmResource
                SET  ResourceNTAccount = REPLACE (LTRIM(ResourceNTAccount), 'OLDdomain', 'NEWdomain')
                ,  UserClaimsAccount = REPLACE (LTRIM(UserClaimsAccount), 'OLDdomain', 'NEWdomain')
WHERE not ResourceNTAccount is null
--AND WRES_CLAIMS_ACCOUNT <> 'i:0#.w|OLDdomain\username1'
--AND WRES_CLAIMS_ACCOUNT <> 'i:0#.w|OLDdomain\username2'
--
--
--
SELECT
                ResourceNTAccount
                , UserClaimsAccount
FROM dbo.MSP_EpmResource R
 
-------------------------------------------
--
--  With Project 2010 the reporting database may need updates as well
--
SELECT [ResourceUID]
      ,[ResourceName]

      ,[ResourceType]
      ,[ResourceNTAccount]
      ,[ResourceIsActive]
  FROM [ProjectServer_Reporting].[dbo].[MSP_EpmResource]
  where ResourceNTAccount IS NOT NULL
--
--
--
SELECT
                ResourceNTAccount
                , REPLACE (LTRIM(r.ResourceNTAccount), 'OLDdomain', 'NEWdomain') as WReS2
FROM [ProjectServer_Reporting].[dbo].[MSP_EpmResource] R
 
UPDATE [ProjectServer_Reporting].[dbo].[MSP_EpmResource]
                SET  ResourceNTAccount = REPLACE (LTRIM(ResourceNTAccount), 'OLDdomain', 'NEWdomain')
                WHERE not ResourceNTAccount is null

Mar 05
Rebooting the Project Management Office (PMO)
The PMO much like a computer becomes ineffective and inefficient over time and sometimes requires a reboot.  Rebooting a computer resets the system, clears out cache, releases memory and updates drivers.  Once the computer system is back up and running it runs faster and more efficient. The PMO often needs a reboot as well.   The PMO's process become stall and outdated, executive management have come and gone, people are asking why are we doing it this way and newer software has been release over the years.  And over time the PMO becomes ineffective and needs a reboot as well.

The average lifetime of a PMO is about five and half years.  This sad fact actually makes sense as well.  Think about what has happen in five years after a PMO launches.  Executive management and sponsors have probably been promoted, left the company or perhaps retired, which means someone else has inherited it.  Processes and procedures have become stall and ineffective over time. The PMIS (Project Management Information System) lacks the latest features and hasn't kept up with the latest enhancements. Project managers are incorporating agile into their processes creating chaos and confusion.  The original vision and purpose of the PMO has changed over time.  The PMO role and reach may need to expand and align with human resources or contract management.   It's clearly evident that many events can occur in the past five years and instead of letting the PMO continue to become ineffective, perhaps it just needs a reboot.

What does it mean to reboot the PMO?   It really simple.  It's just a matter of revisiting the vision and purpose of the PMO and ensure that it still aligns up to it business's mission.  Realignment of the PMO may include some of the following steps below:

  1. Verify PMO executive support 
  2. Write a PMO reboot plan and schedule
  3. Review the PMO vision and core values
  4. Review the PMO scope such as portfolios, program and projects
  5. Review the PMO maturity model. 
  6. Review the staffing and resources required for PMO
  7. Review PMO training, mentoring and coaching
  8. Review PMO mythologies and processes
  9. Review PMO reporting meeting management requirements
  10. Review PMO standards for reporting
  11. Review PMO security and access permissions
  12. Review PMO tools, project and PMIS software


The last step is the main point of my blog; the review of PMO tools, project and PMIS software.  Companies often upgrade project server to a more current version without thinking about ​rebooting the PMO.  In many cases the project server upgrades are done without reflecting on what has changed over the years and how the new features can be incorporated into the PMO.

Personally for me, I think Microsoft Project server solution is the right solution for many companies, however, before spending money on upgrade, maybe it's a time to bring in another PMIS solution.  Or perhaps it's the right time to expand the maturity of the PMO and incorporate the other project server features such as timesheets, resource engagements, portfolio management or workflow to name a few.

In summary, every​ five years is a good time to reboot the PMO and make grow the maturity of the PMO.​

Sep 01
Project Server 2016 Provision Menus Are Gone

What happened to the options creating, editing and viewing the PWA in project server 2016?  Below is a screen shot of creating a project web app instance in SharePoint 2013. ManageProjectWebApps.png 
Now look at the options in SharePoint 2016.  Notice they are missing except for manage.  
What this now means is that the easy to use menu driving procedure of creating and managing PWA instances is now history.   PowerShell is the way it is done now.   I really like PowerShell, but really wish Microsoft would keep some of the menu options. Rumor is that everything is going the way of PowerShell.
Here are a few PowerShell scripts that provides the same functions as before.
#######################################################
# Author: Michael Wharton
# Date: 08/30/2016
# Description: Project Server 2016 configuration
#    Create one or multiple PWA sites
#######################################################
 Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Confirm:$false -Verbose
 Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue  -Verbose
#######################################################
#  Update the following metadata that is used consistantly thru the script
#######################################################
<$SqlServerName        = "LAB-2016SP.DOMAIN.LOCAL"
$WebAppURL            = "http://LAB-2016SP.DOMAIN.LOCAL"
$SitePwaURL           = "http://LAB-2016SP.DOMAIN.LOCAL/pwa"
$WebHostHeader        = "LAB-2016SP.DOMAIN.LOCAL"
 
$WebAppURL            = "http://LAB-2016SP"
$SitePwaURL           = "http://LAB-2016SP/pwa"
$SitePwa2URL          = "http://LAB-2016SP/pwa2/PMO"
$SitePwaOOBURL        = "http://LAB-2016SP/pwaoob"
 
$WebAppName           = "Project Server 2016"
$ProjectServiceApp    = "Project Service App"
$ProjectServicePool   = "Project Service Pool"
$WSS_ContentDB        = "LABK_PWA_WSS_Content"
# Create credentials
$ServiceSP            = "DOMAIN\ServiceSP"  
$ServicePass          = "password"
$credServiceSP  = New-Object System.Management.Automation.PSCredential -ArgumentList @($ServiceSP,(ConvertTo-SecureString -String $ServicePass -AsPlainText -Force))
################################################################
# create Managed Account
New-SPManagedAccount -Credential $credServiceSP -Verbose
################################################################
# Create Project Service Pool
New-SPServiceApplicationPool -Name $ProjectServiceApp  -Account $ServiceSP -Verbose
################################################################
#  Create Project Server Service and Enable Project Key
$ProjectServiceID = New-SPProjectServiceApplication -Name $ProjectServiceApp -Proxy -ApplicationPool (Get-SPServiceApplicationPool $ProjectServicePool)
Enable-projectserverlicense -Key "23CB6-N4X8Q-WWD7M-6FHCW-9TPVP"
#################################################################
# Create Web Application on root that contains project server collection
#################################################################
$AP = New-SPAuthenticationProvider -Verbose
New-SPWebApplication -Name $WebAppName -port 80 -URL $WebAppURL -DatabaseName $WSS_ContentDB  -ApplicationPool $ProjectServicePool   -ApplicationPoolAccount (Get-SPManagedAccount $ServiceSP) -AuthenticationProvider $AP -Verbose -Confirm:$false
# Create PWA on Root
New-SPSite -Url $WebAppURL -Template "PWA#0" -Name "Project Web App" -OwnerAlias "DOMAIN\mawharton" -Verbose
Enable-SPFeature PWASITE -Url $WebAppURL -Verbose
Set-SPProjectPermissionMode -Url $WebAppURL -Mode ProjectServer -Verbose
# Add a few resources and make basic configuration updates such as publish sites
Start $WebAppURL
###################################################
#  Create multiple PWA sites
$SitePwaURL           = "http://LAB-2016SP/pwa"
$SitePwa2URL          = "http://LAB-2016SP/pwa2"
$SitePwaOOBURL        = "http://LAB-2016SP/pwaoob"
###################################################
# Create Root
New-SPSite -Url $WebAppURL -Template "STS#0" -Name "Root" -OwnerAlias "DOMAIN\mawharton" -Verbose
# Create PWA Site as managed path
New-SPManagedPath "PWA" -WebApplication $WebAppURL -Explicit
# remove-spmanagedpath "PWA"  -WebApplication $WebAppURL
New-SPSite -Url $SitePwaURL -Template "PWA#0" -Name "Project Web App" -OwnerAlias "DOMAIN\mawharton" -Verbose
Enable-SPFeature PWASITE -Url $SitePwaURL -Verbose
Set-SPProjectPermissionMode -Url $SitePwaURL -Mode ProjectServer -Verbose
Start $SitePwaURL
# Create PWA2 as second site
New-SPManagedPath "PWA2" -WebApplication $WebAppURL -Explicit
New-SPSite -Url $SitePWA2URL -Template "PWA#0" -Name "Project Web App2" -OwnerAlias "DOMAIN\mawharton" -Verbose
Enable-SPFeature PWASITE -Url $SitePWA2URL -Verbose
Set-SPProjectPermissionMode -Url $SitePWA2URL -Mode ProjectServer -Verbose
Start $SitePWA2URL
# Create PWAOOB as second site (Out-Of-Box)
New-SPManagedPath "PWAOOB" -WebApplication $WebAppURL -Explicit
New-SPSite -Url $SitePwaOOBURL -Template "PWA#0" -Name "Project Web App OOB" -OwnerAlias "DOMAIN\mawharton" -Verbose
Enable-SPFeature PWASITE -Url $SitePwaOOBURL -Verbose
Set-SPProjectPermissionMode -Url $SitePwaOOBURL -Mode ProjectServer -Verbose
Start $SitePwaOOBURL
# Create PWA2 as second site
New-SPManagedPath "PWA2" -WebApplication $WebAppURL
New-SPSite -Url $SitePWA2URL -Template "PWA#0" -Name "Project Web App2" -OwnerAlias "DOMAIN\mawharton" -Verbose
Enable-SPFeature PWASITE -Url $SitePWA2URL -Verbose
Set-SPProjectPermissionMode -Url $SitePWA2URL -Mode ProjectServer -Verbose
Start $SitePWA2URL
#################################################
#  List Web Application
#################################################
Get-SPProjectWebInstance | Select URL , adminAccount, ProvisioningResult, Online | Sort-Object URL
#################################################
#  Delete PWA Site
#################################################
Remove-SPSite -Identity $SitePwaURL  -Confirm:$false -verbose     # Removes PWA site
Remove-SPSite -Identity $SitePwa2URL -Confirm:$false -verbose     # Removes PWA2 site
Remove-SPSite -Identity $SitePwaOOB  -Confirm:$false -verbose     # Removes PWAOOB site


May 22
Installing Project Server using AutoSPInstaller

Wow!  For years I have been building PowerShell scripts to install and configure SharePoint and Project server.  It has worked well and have learned a lot about PowerShell in doing so.   However, I recently discovered a tool in CodePlex called AutoSPInstaller.   http://autospinstaller.codeplex.com/

My first reaction to this tool was the same as using SharePoint Products Configuration Wizard.  It couldn't be that good and all being executed behind code.   When I finally looked at AutoSPInstaller and discovered that it was all based on PowerShell.  This perk my interested.

My first few attempts using AutoSPInstaller failed for me and my reaction was not very good.  However, I kept hearing about how others were using it and so I decided to give it another chance only this time, I took a little time in reading the documentation.  After examining the PowerShell code and using the "Build Farm" tool found at https://autospinstaller.com/ and with a successful installation of SharePoint and a configuration of SharePoint Farm; I WAS SOLD.

This is one of the best tools I have seen for building a SharePoint farm and documenting the farm.  And it also configures other useful items to make your farm more robust such as setting up SQL alias and disabling the loop check.  And it works for SharePoint and Project server 2010, 2013 and 2016.  I am consistently build different SharePoint scenarios in my lab and AutoSPInstaller automates the process of setting it up.

One other item, I should mention about AutoSPInstaller. If you want to learn more about PowerShell and see good examples of modules and well written code, then dig deep into the code.  I really like PowerShell and learning PowerShell techniques.  AutoSPInstaller is full of many PowerShell tricks.

Building the SharePoint Farm XML is done by jumping to the https://autospinstaller.com/ site and then clicking "Build a Farm".   The following screen shot are for building a SharePoint farm that configures Project Server on a single server.  My configuration is for the very basics services that project server typically uses such as Excel Services, Secure Store, PerformancePoint Service and of course project server service.  I should point out project server service doesn't always work after the installation and at times I have needed to de-provision and re-provision the project service to get it working.

SPAutoInstaller-Servers.png 

Servers Page.  Its purpose is to define the servers in the SharePoint farm. If only one server is being setup for the farm, then leave servers list blank.  It requires either no servers or a minimum of two servers for the Share Point farm.

SPAutoInstaller-2-Options.png 

Installation Options page.  The highlighted options are important to me.

SPAutoInstaller-3-Main.png\

Farm – Configure the Main Farm Options

General settings for the SharePoint configuration.  I don't like putting real password in the build farm tool, so I put in bogus passwords and replace them once I create the XML file.

I really like the database preview option.   It allows you to have all the SharePoint farm databases prefixed and makes it much easier for the DBA to organize the databases.

The create alias option is a nice feature for setting this up as well.  Makes it much easier to move SharePoint to another SQL server in the future.

I specify only a few managed accounts for project server deployment.  If setting up for SharePoint deployment, I would add all the account in this page.  It validates the username and passwords.

SPAutoInstaller-4-FarmServices.png 

Farm Services is really depends on your requirements.  I will leave it at that.

 

 

Farm Logging screen.  Take the default and change it later.  I had some issues, so now keep it as the default.

 

 SPAutoInstaller-6-RootWeb.png

Root Web Application.  I change this up a little by just setting up a root.

 SPAutoInstaller-7-stateService.png

 

For project server, I typically setup State Service, Secure Store, Excel Services and PerformancePoint Services.  Under the Other option are special settings for project server.

 SPAutoInstaller-8-SecureStore.png

 

 

SPAutoInstaller-10-PerformancePoint.pngSPAutoInstaller-9-ExcelService.png 

 SPAutoInstaller-11-Miscelanous.png

Miscellaneous Components.   Setting up the PDF content type has never been so easy.

 

SPAutoInstaller-12-ProjectService.png 

Here is the final screen.  Word of caution is that the configuring project server doesn't work for me.  I am going to look into the PowerShell and see what the problem is.  In the meanwhile, I would just letting it configure project server. Once it is complete, test to see if it works.  If project server doesn't work properly then do the following

  1. De-provision PWA
  2. Delete the web application
  3. Reboot the server
  4. Create a new Project Server 2013 web application
  5. Provision PWA

Finally, I would like to thank Ivan Josipovic and Brian Lalancette for building and maintaining AutoSPInstaller on CodePlex. You can find out more about these guys at https://autospinstaller.com/Contact

 

Apr 21
2013 Migration error messages of Out-of-box version of Project Server 2010

Migration from Project Server 2010 to Project Server 2013 can be a daunting experience.  The one thing that puzzled me the most was the results from the PowerShell TEST verbs.   There are four test verbs that are used during the migration

  1. Test-SPContentDatabase
  2. Test-SPSite
  3. Test-SPProjectDatabase
  4. Test-SPProjectWebInstance

These are very useful tools that can help you be successful with a migration, but my biggest question was; are these normal messages.   Finally, I decided to find out.  My assumption is that if I built a brand new project server 2010 with service pack 2 and add a couple of projects and resources, then when I migrated to project server 2013, there would be no message.    The following PowerShell test verbs were executed on a plain out-of-box version of project server and though I expected that all the tests would come clean.  They didn't. 

The following examples show the output from PoweShell test commands on a out-of-box version of project server 2010 that is being migrated to 2013.   Project server 2010 was using the classic authentication.

PS> Test-SPContentDatabase -Name $PS2010ContentDBname -WebApplication $URL

Category        : MissingSetupFile 
Error           : True 
UpgradeBlocking : False 
Message         : File [Features\ReportServer\ReportViewer.dwp] is referenced [1] times in the database [SP2010V6_WSS_Content], but is not installed on the current farm. Please install any feature/solution which contains this file.​ 
Remedy          : One or more setup files are referenced in the database [SP2010V6_WSS_Content], but are not installed on the current farm. Please install any feature or solution which contains these files.

Locations       :

Category        : MissingSetupFile
Error           : True
UpgradeBlocking : False
Message         : File [Features\ReportServer\ReportViewer.dwp] is referenced [1] times in the database [SP2010V6_WSS_Content], but is not installed on the current farm. Please install any feature/solution which contains this file.
Remedy          : One or more setup files are referenced in the database [SP2010V6_WSS_Content], but are not installed on the current farm. Please install any feature or solution which contains these files.
Locations       :

Category        : MissingSetupFile
Error           : True
UpgradeBlocking : False
Message         : File [SiteTemplates\BICENTERSITE\mossbisample.aspx] is referenced [1] times in the database [SP2010V6_WSS_Content], but exists only under Microsoft SharePoint Foundation 2010 setup folder. Consider upgrading the feature/solution which contains this file to the latest version.
Remedy          : One or more setup files are referenced in the database [SP2010V6_WSS_Content], but are not installed on the current farm. Please install any feature or solution which contains these files.
Locations       :

Category        : MissingSetupFile
Error           : True
UpgradeBlocking : False
Message         : File [SiteTemplates\BICENTERSITE\ppssample.aspx] is referenced [1] times in the database [SP2010V6_WSS_Content], but exists only under Microsoft SharePoint Foundation 2010 setup folder. Consider upgrading the feature/solution which contains this file to the latest version.
Remedy          : One or more setup files are referenced in the database [SP2010V6_WSS_Content], but are not installed on the current farm. Please install any feature or solution which contains these files.
Locations       :

PS > Test-SPSite -Identity $PWA

​Site               : SPSite Url=http://sp2013v6a/PWA

Results            : {

                     SPSiteHealthResult Status=Passed RuleName="Conflicting Content Types" RuleId=befe203b-a8c0-48c2-b5f0-27c10f9e1622,

                     SPSiteHealthResult Status=FailedWarning RuleName="Customized Files" RuleId=cd839b0d-9707-4950-8fac-f306cb920f6c,

                     SPSiteHealthResult Status=Passed RuleName="Missing Galleries" RuleId=ee967197-ccbe-4c00-88e4-e6fab81145e1,

                     SPSiteHealthResult Status=Passed RuleName="Missing Parent Content Types" RuleId=a9a6769f-7289-4b9f-ae7f-5db4b997d284...}

PassedCount        : 6

FailedWarningCount : 1

FailedErrorCount   : 0

 

PS > Test-SPProjectDatabase -Name $ProjectServiceDBname  -DatabaseServer $SqlServer

Category        : Upgrade
Error           : False
UpgradeBlocking : False
Message         : Upgrader version 15.0.4569.1000 matches stored version 15.0.45691000.0
Remedy          :
Locations       :
Category        : Security
Error           : False
UpgradeBlocking : False
Message         : Permissions for all existing roles are correct
Remedy          :
Locations       :
 
Category        : Security
Error           : False
UpgradeBlocking : False
Message         : All SQL database roles are present
Remedy          :
Locations       :

​PS> Test-SPProjectWebInstance -Identity $PWA

RuleName  : ProjectBICenterExistenceHealthRule
TimeStamp : 4/22/2016 2:33:01 AM
Message   :
            The following ProjectBICenters have missing lists: (/PWA/ProjectBICenter, Reports).
Status    : FailedWarning
Results   :
RuleName  : ProjectWorkspacesExistenceHealthRule
TimeStamp : 4/22/2016 2:33:01 AM
Message   : All projects have workspace webs.
Status    : Passed
Results   :

RuleName  : SiteQueueServicedStatus
TimeStamp : 4/22/2016 2:33:01 AM
Message   : Service status of Queue: (771b2ec1-944b-4c45-b9ea-25598d3865a7, True).
Status    : Passed
Results   :
 
RuleName  : QueueJobs
TimeStamp : 4/22/2016 2:33:02 AM
Message   :
Status    : Passed
Results   : {SP2013V6A, SP2013V6A, SP2013V6A}​

RuleName  : QueueMissingTriggers
TimeStamp : 4/22/2016 2:33:02 AM
Message   : Number of unprocessed jobs in Queue: 0.
Status    : Passed
Results   :

RuleName  : QueueStaleServerGroups
TimeStamp : 4/22/2016 2:33:02 AM
Message   : All Queue Groups OK.
Status    : Passed
Results   : ​

In summary, this is only a list of message that seem normal to me.  I have done many migrations and have ignore the messages and the migration appear to work without any issues.   If you google the messages, there are fixes for most of the messages.

 

Jan 02
Project Server 2016 Migration for 2016 Preview Beta 2 using PowerShell

The following PowerShell script provides guideance for migrating Project Server 2013 to Project Server 2016 Technical Preview Beta

​#######################################################
# Author: Michael Wharton
# Date: 01/01/2016
# Description: Project Server 2016 Migration for 2016 Preview Beta 2
#
# Link to Project Server Migration notes
# Start "https://technet.microsoft.com/EN-US/library/gg502590(v=office.16).aspx"
#######################################################
 Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Confirm:$false -Verbose
 Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue  -Verbose
#######################################################
#  Before attempting a migration from Project Server 2013 to 2016
#  Verify that the following are enabled
#  1) SharePoint Farm is configurated and working
#  2) SharePoint Sites and site collections can be created
#  3) Restore SharePoint 2013 Content and ProjectWebApp databases
#######################################################
$SqlServerName        = "ServerName"              #-->  replace with SQL Server name
$WebAppURL            = "http://ServerName"       #-->  replace with SharePoint Server name
$SitePwaURL           = "http://serverName/pwa"   #-->  replace with SharePoint Server name
$WebAppName           = "Project Server 2016"
$ProjectServiceApp    = "Project Service App"
$ProjectServicePool   = "Project Service Pool"
$WSS_ContentDB        = "Temp_WSS_Content"
$ServiceSP            = "domain\ServiceSP"  #-->  replace with service account name
$ServicePass          = "password"          #-->  replace with service account password
$WSS_Content2013      = "2013WSS_Content"   #--> replace name with migrated SharePoint 2013 Content database
$ProjectWebApp2013    = "2013ProjectWebApp" #--> replace name with migrated ProjectWebApp database
################################################################
# Create credentials
$credServiceSP  = New-Object System.Management.Automation.PSCredential -ArgumentList @($ServiceSP,(ConvertTo-SecureString -String $ServicePass -AsPlainText -Force))
################################################################
# create Managed Account
New-SPManagedAccount -Credential $credServiceSP -Verbose
################################################################
# Create Project Service Pool
 New-SPServiceApplicationPool -Name $ProjectServicePool -Account $ServiceSP -Verbose
################################################################
#  Create Project Server Service and Enable Project Key
$ProjectServiceID = New-SPProjectServiceApplication -Name "Project Service App" -Proxy -ApplicationPool (Get-SPServiceApplicationPool $ProjectServicePool)
Enable-projectserverlicense -Key "Y2WC2-K7NFX-KWCVC-T4Q8P-4RG9W"
################################################################
#  Project and SharePoint content migration starts at this point
#  Restore Project Server 2013 databases on SQL Server
#  1) 2013 WSS_Content
#  2) 2013 ProjectWebApp
################################################################
# Create Web Application that contains project server collection
$AP = New-SPAuthenticationProvider -Verbose
New-SPWebApplication -Name $WebAppName -port 80 -URL $WebAppURL -DatabaseName $WSS_ContentDB -DatabaseServer $SqlServerName -ApplicationPool $ProjectServicePool -ApplicationPoolAccount (Get-SPManagedAccount $ServiceSP) -AuthenticationProvider $AP -Verbose -Confirm:$false
# Mount WSS_Content converts to SharePoint 2016
Mount-SPContentDatabase -Name $WSS_Content2013 -WebApplication $WebAppName -Verbose
# Review issues found with database
# It's possible that some error may block the upgrade or that you wish to be fix some of the issue before moving to production
Test-SPContentDatabase -Name $WSS_Content2013 -WebApplication $WebAppName 
# Enable SharePoint features for PWA and BI
# Enable-SPFeature PWASITE -Url $SitePwaURL -Verbose   # note: PWA feature should already be enable in the migrated database
Enable-spfeature -identity PWABIODataReports -Url $SitePwaURL  -Force
# Migrate ProjectWebApp 2013 to 2016
Migrate-SPProjectDatabase -SiteCollection $SitePwaURL -DatabaseServer $SqlServerName -DatabaseName $ProjectWebApp2013 -Overwrite -Confirm:$false -Verbose
# Migrate Resource Plans
Migrate-SPProjectResourcePlans -URL $SitePwaURl -Verbose
# Test the Project Instance for issues
Get-SPProjectWebInstance
Get-SPProjectWebInstance | Test-SPProjectWebInstance
Test-SPProjectServiceApplication -Identity $ProjectServiceApp
# Start up Project Server App Web site
Start  $SitePwaURL
################################################################
# General Cleanup - optional
# The initial contentdatabase created during the New-SPWebApplication isn't need and can be dismounted
Get-SPContentdatabase -DatabaseName $WSS_ContentDB -DatabaseServer $SqlServerName -ConnectAsUnattachedDatabase:$false | Dismount-SPContentDatabase -Confirm:$false  -Verbose
################################################################

Dec 29
Configuring Project Server 2016 Beta 2 using PowerShell

The following PowerShell scrips provisions SharePoint 2016 Technical Preview Beta 2.

Warning:  There is no error trapping or testing to determine if something is already in place. My intention with this script is to execute line by line and if an error occurs, then determine the cause and skip or fix the issue.

There are a few new things in this script, such as creating the project server services and providing the license key. Also, create PWA with SharePoint sites within this collection.

​#######################################################
# Author: Michael Wharton
# Date: 12/30/2015
# Description: Project Server 2016 Beta V2 Configuration
#   The following must be done prior to provisioning Project Server
#   1. Install Windows Server 20012 R2 and update patches
#   2. Install SQL Server 2014
#   3. Install SharePoint 2016
#   4. Created only the SharePoint Farm as Single Server mini role and do not run wizard
#
#   Start "https://technet.microsoft.com/en-us/library/cc197280(v=office.16).aspx"
#######################################################
 Set-ExecutionPolicy "Unrestricted"
 Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#######################################################
#  Provisioning Project Server 2016
#   1. Create Managed Account as SharePoint Account
#   2. Create Application Pool
#   3. Create Project Server App
#   4. Create Web applications
#   5. Create Root Site collection
#   6. Create Managed Path
#   7. Create PWA Site Collection
################################################################
#  Update the following parameters with your values
################################################################
$SqlServerName        = "Beta2016b"
$SharePointServerName = "Beta2016b"
$WebAppURL            = "http://Beta2016b"
$SiteRootURL           = "http://Beta2016b/"
$SitePwaURL            = "http://Beta2016b/pwa"
$WebAppName           = "Project Server 2016"
$ProjectServiceApp    = "Project Service App"
$ProjectServicePool   = "Project Service Pool"
$ProjectWebAppDB      = "Beta2_ProjectWebApp"
$FarmAdminAcct        = "domain\FarmAdmin"   # FarmAdmin Acct
$SetupAcct            = "domain\mawharton"   # Setup Acct --- Running from this account
$ServiceSP            = "domain\ServiceSP"   # Service Acct
$ServicePass          = "password"
################################################################
# Create credentials
$credServiceSP  = New-Object System.Management.Automation.PSCredential -ArgumentList @($ServiceSP,(ConvertTo-SecureString -String $ServicePass -AsPlainText -Force))
################################################################
# create Managed Account
New-SPManagedAccount -Credential $credServiceSP -Verbose
################################################################
# Create Project Service Pool
New-SPServiceApplicationPool -Name $ProjectServicePool -Account $ServiceSP -Verbose
################################################################
#  Create Project Server Service and Enable Project Key
$ProjectServiceID = New-SPProjectServiceApplication -Name "Project Service App" -Proxy -ApplicationPool (Get-SPServiceApplicationPool $ProjectServicePool)
Enable-projectserverlicense -Key "Y2WC2-K7NFX-KWCVC-T4Q8P-4RG9W"
################################################################
# Create Web Application
$AP = New-SPAuthenticationProvider -Verbose
New-SPWebApplication -Name $WebAppName -port 80 -URL $WebAppURL -DatabaseName $ProjectWebAppDB -DatabaseServer $SqlServerName -ApplicationPool $ProjectServicePool -ApplicationPoolAccount (Get-SPManagedAccount $ServiceSP) -AuthenticationProvider $AP -Verbose
################################################################
# Create Root SiteCollection - optional - not required but just a good SharePoint practice
New-SPSite $SiteRootURL -OwnerAlias $SetupAcct -Name "ROOT" -Template "STS#0" -SecondaryOwnerAlias $FarmAdminAcct -Verbose
START $SiteRootURL
################################################################
# Create managed path PWA
New-SPManagedPath -WebApplication $WebAppName -Explicit "/PWA"
# Create PWA Site collection
New-SPSite $SitePwaURL   -ContentDatabase $ProjectWebAppDB -OwnerAlias $SetupAcct -Name "Project Web App" -Template "pwa#0" -Language 1033 -SecondaryOwnerAlias  $FarmAdminAcct -Verbose
# Enable PWA features
Enable-SPFeature PWASITE -Url $SitePwaURL -Verbose
Enable-spfeature -identity PWABIODataReports -Url $SitePwaURL  -Force
Set-SPProjectPermissionMode -Url $SitePwaURL -Mode ProjectServer -Verbose  # optional
# Start up Project Server App Web site
Start  $SitePwaURL
################################################################


Aug 31
PowerShell commands for setup of Project Server 2016 in the SharePoint 2016 Techncial Preview

The following PowerShell script can get Project Server 2016 up and running with the new SharePoint 2016 Preview.  My environment is running a VM on a Windows 10 workstation.  The lab environment is a Windows 2012 R2 OS, SQL Server 2014 and SharePoint 2016 Preview.

Set IE to be in compatibility mode and make the site a trusted local site. I used the SharePoint 2016 Products configuration wizard to setup the SharePoint farm and I didn't have SharePoint configure any of the services. Yuk if you do.

There is no error handling in script.  My suggestion is to execute one line at a time and make sure it is succesful.  It a line give you an error, that may be ok. For instance, you may be creating a new managed account and the account already exist, so the can be skipped.


#######################################################
# Author: Michael Wharton
# Date: 08/31/2015
# Description: Provision Project Server 2016 Beta
#   the following must be done prior to provisioning Project Server
#   1. Install Windows Server 2012 R2 and update patches
#   2. Install SQL Server 2014
#   3. Install SharePoint 2016
#   4. SharePoint 2016 Products Configuration Wizard
#######################################################
 Set-ExecutionPolicy "Unrestricted"
 Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
#######################################################
#  Provisioning Project Server 2016
#######################################################
#   1. Create Managed Account as SharePoint Account
#   2. Create Application Pool
#   3. Create web applications
#   4. Create Root Site collection
#   5. Create another database for PWA (Beta_ProjectWebApp)
#   6. Create PWA Site using Beta_ProjectWebApp
#   7. Provision Project Server App by enabling the PWA feature
################################################################
$SqlServerName        = "Beta2016B.LAB.LOCAL"
$SharePointServerName = "Beta2016B.LAB.LOCAL"
$WebAppURL    = "http://beta2016b.LAB.local"
$SiteRootURL  = "http://beta2016b.LAB.local/"
$SitePwaURL   = "http://beta2016b.LAB.local/sites/pwa"
$WebAppName         = "Project Server 2016"
$ProjectServiceApp  = "Project Service App"
$ProjectServicePool = "Project Service Pool"
$WebContentDB       = "Beta_PWA_WSS_CONTENT"
$ProjectWebAppDB    = "Beta_ProjectWebApp"
$setupAdmin  = "LAB\mawharton"
$setupPass   = "Password#1"
$ServiceSP   = "LAB\ServiceSP"
$ServicePass = "Password#1"
################################################################
# Create credentials
$credSetupAdmin = New-Object System.Management.Automation.PSCredential -ArgumentList @($SetupAdmin,(ConvertTo-SecureString -String $SetupPass   -AsPlainText -Force))
$credServiceSP  = New-Object System.Management.Automation.PSCredential -ArgumentList @($ServiceSP ,(ConvertTo-SecureString -String $ServicePass -AsPlainText -Force))
################################################################
# Create Managed Account
New-SPManagedAccount -Credential $credServiceSP -Verbose
################################################################
# Create App Pool
New-SPServiceApplicationPool -Name $ProjectServicePool -Account $ServiceSP -Verbose
################################################################
# Create Web Application
$AP = New-SPAuthenticationProvider -Verbose
New-SPWebApplication -Name $WebAppName -port 80 -URL $WebAppURL -DatabaseName $WebContentDB -DatabaseServer $SqlServerName -ApplicationPool $ProjectServicePool -ApplicationPoolAccount (Get-SPManagedAccount $ServiceSP) -AuthenticationProvider $AP -Verbose
################################################################
# Create Root SiteCollection
New-SPSite $SiteRootURL -OwnerAlias $SetupAdmin  -Name "ROOT" -Template "STS#0" –Verbose
# Check that the Root site collection opens
START $SiteRootURL
################################################################
# Create managed path PWA
New-SPContentDatabase -Name $ProjectWebAppDB -DatabaseServer $sqlservername  -WebApplication $webAppname
# Create PWA Site collection
New-SPSite $SitePWAURL -ContentDatabase $ProjectWebAppDB -OwnerAlias $setupAdmin  -Name "Project Web App" -Template "pwa#0"
################################################################
# Create Project Service App ---  Service must be created before PWA feature can be enabled
New-SPProjectServiceApplication –Name $ProjectServiceApp  –ApplicationPool $ProjectServicePool –Proxy -Verbose
################################################################
# Enable the Project Service feature
Enable-SPFeature pwasite -Url $SitePWAURL
################################################################
# Set Project Permission mode to Project server
Set-SPProjectPermissionMode -Url $SitePWAURL -Mode ProjectServer
################################################################
# Start up PWA
START $SitePWAURL
 
Jul 28
Ten Reasons to run Project Server 2013 on AZURE instead of On Premise or Project Online

When thinking about using Microsoft Project Server for your PMO, your first thought may be to run using Project Server on premise.  As you think of other option, the idea of using Project Online may be effective as well.  You then start asking questions and find hosting companies like BemoPro and Project Host can manage project server.  But there is another option for running project server and that is running project serve in AZURE.

Ouch my head starts to hurt. Another option to weight into the mix of project server solutions.  And so, I started my list of why it may be good to run from project server on AZURE versus running on premise.  At first I didn't think it was a good option, but as I understand more about the platform and its abilities, I realized that it's a really good solution.

My list of why I like running project server 2013 on Azure.

  1. Purchasing of hardware is not required.  Selecting only the VM size that is required keeps the cost down and can easily be increase as usage increases.
  2. Setup is real easy.  Azure provides a SharePoint Farm Installation wizard that basically sets up everything you need to install and run SharePoint and Project Server.  The wizard setups three virtual machines; domain controller, SQL Server and a SharePoint virtual machine. With a simple click of the mouse and about 60 minutes, SharePoint is up and running.  The next step is to download and install project server to complete the setup and then project sever is ready for your company to use. 
  3. Migrating databases to Azure project server is both possible and much easier.  Azure provides methods for exporting and importing files into Azure.  Once databases can be more to the cloud, then SharePoint content and project server databases can be configured into SharePoint.   If later, you don't like the AZURE solution, the databases can be moved back down to premise.  Migrating to Project online requires the use of third party tools or manual importing of single projects.
  4. Testing and other staging databases can be setup using Azure VMs as well.  Cost saving here to because hardware is not purchase, use smaller VM to keep costs down and shutdown the VMs when they are not used.  Storage costs are still accruing because data is saved but CPU and other miscellaneous costs are not occurring when the CPU is shut down.
  5. SharePoint and Project Server 2013 is stable and doesn't get new features and updates.  While it's a good marketing plug for Project Online to get the most recent upgrades and features. The fact is many organizations like stable platforms and don't like changes on the fly.
  6. SharePoint and Project Server 2010 can run in Azure VMs.  This option takes more work than running the Azure SharePoint Farm wizard as mention above, but the VMs can be setup and configure to run SharePoint and Project Server 2010.
  7. Writing project server reports is going to be easier because you still have full access to the SQL server database and will be able to access data that is not possible when using project online. Report writers can also use 3rd party reporting tools, because they can be installed on the VMs.
  8. SQL Server tools such as SSRS (SQL Server Reporting Services), SSIS (SQL Server Integration Services), SSAS (SQL Server Analysis Services) are available and developers are familiar with using them.
  9. Feels like you have more control of project server because you have access to SharePoint Central in the Azure VM giving you more features to enable or disable.  Also, you have access to restore and backup project schedules and other functions that you don't have when using Project Online.
  10. Running project server on Azure is a lot more fun.  This is mostly fun for me because it's a new way to look at project server.

So now we have another option for PMOs to think about when deciding where to run their project server.  It's just something to think about.  Call me if you have any questions.

1 - 10Next

 ‭(Hidden)‬ MyProjectExpert Blog

 About this blog

MVP-Landscape.gif 

MichaelWharton.jpg 

Welcome to My Project Expert site.   This site is dedicated to the implementation and deployment of Microsoft Project Server and the governance required for a successful PMO.

It's mostly my field notes as I find new tips and tricks or perhaps clear up some information that I find confusing.

Michael Wharton, MVP, MBA, PMP, MCT, MCST, MCDBA, MCSD, MCSE+I, MCC2011 and 2012