Skip to main content

Powershell procedures/cmdlets - MS Project client/Project Server

Powershell is becoming part of any IT-Administrator inventory. If you worked with Project Server 2013 or SharePoint 2013 you are properly avare of many of the many cmdlets available.


Project Server - Powershell cmdlets

For a list of the Project Server cmdlets see this Technet article: http://technet.microsoft.com/en-us/library/ee890097(v=office.15).aspx


MS Project - Powershell cmdlets

Untill recently I was not aware you can access the MS Project client though Powershell. There is actally quite a big API available as you are simply attaching into the VBA/VSTO API.
To connect to the MS Project client simply start up the Powershell ISE and use the following command.
 $Project = New-Object -ComObject msproject.application  

After you are connected the commands are very similar to the VBA counterpart, if you for example want to find the name of all the tasks.
 $Project.Visible = $True  
 $tsks = $Project.ActiveProject.Tasks  
 Foreach ($tsk in $tsks)  
 {  
   Write-Host $tsk.Name  
 }  

Or if you want to open and edit the enterprise calendar.
 $cal_guid = [GUID]"32E5163F-8F5C-472E-9497-F905B3A81E2D"  
 $Project.EditEnterpriseCalendar($cal_guid)  

Basically any VBA call can be migrated into Powershell, see this site for great VBA axamples.

General Powershell Problems

If you get the following error:
 file.ps1 cannot be loaded because the execution of scripts is disabled on this system  
Use the following command to allow the execution policy:
 set-executionpolicy unrestricted  
Note: the above command migth result in the following error:
 set-executionpolicy : Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied. To chang  
 e the execution policy for the default (LocalMachine) scope, start Windows PowerShell with the "Run as administrator" option. To change the execution p  
 olicy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".  
 At line:1 char:1  
 + set-executionpolicy unrestricted  
 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
   + CategoryInfo     : PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccessException  
   + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand  
In this case it can be resolved by adding you account to the permission in a regestry key.
- Click start and run: regedt32
- Navigate to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell
- Right-Click the key and select Permissions 
- Select, and add your account, 
- Grant it "Full Control" privileges


Comments

Popular posts from this blog

Azure DevOps - Gantt Chart

It's been a while since my last post - in the past couple of weeks I have played around with some videos of topics I find interesting. One of these topics are a very cool way of displaying a Gantt Chart upon your Azure DevOps board's. Check it out here!

How to integrate MS Planner in MS Roadmap (Gantt chart)

Hi, It is no secret i am exited about the new Roadmap service from Microsoft. Even though only limited features have been released I beleive Roadmap and the new Project home have great potential. Anyway, check out my video on how to connect Planner into Roadmap with Microsoft Flow.

Project Server - Change field name on PDP for standard fields (like the Owner field)

Project Server - Change owner field name on PDP The field names on the PDPs (Project Detail Pages) has been preselected on the standard fields for a project. If you want to change the Owner to something else it is quite difficult. In the following i will explain how we can change this field through the Content Editor webpart. To change the owner field add a Content Editor webpart to the PDP page where the field is inserted. Select the webpart and from the ribbon select HTML->Edit HTML Source. Copy/Paste the following code into the Content Editor webpart. < script type ="text/javascript">     var old_name = "Owner" ;     var new_name = "Ansvarlig" ;     var ttnA = document.getElementsByTagName( "div" );     for ( var j = 0; j < ttnA.length; j++) {         var orig = ttnA[j].innerHTML;      ...