Victor Vogelpoel

Excellence is in the details


Leave a comment

PowerShell: Measure-ScriptCode (calculating script code metrics)

In my current project for a client, me and my team are building an hefty framework in PowerShell 3. I was wondering how many lines of code and other metrics the framework script code would span. I asked Dutch PowerShell MVP Jeff Wouters (http://jeffwouters.nl) if he knew a tool for calculating PowerShell code metrics, but he didn’t know any. Well, I spent a little time in my Christmas holiday to come up with a tool of my own: Measure-ScriptCode. It was surprisingly easy to calculate metrics.

Continue reading

Advertisements


Leave a comment

PowerShell: Resolve-FQDNHostName

My current project involves scripting an installation and and configuration of several Microsoft products onto a myriad of servers. I found it very useful to resolve the fully qualified hostname (FQDN), for a server hostname, hence the function Resolve-FQDNHostname.

The function will use the active directory to resolve a hostname to a fully qualified hostname

function Resolve-FQDNHostName
{
  [CmdletBinding()]
  param
  (
    [Parameter(Mandatory=$false, position=0, ValueFromPipeLine=$true, ValueFromPipeLineByPropertyName=$true, HelpMessage="TODO")]
    [Alias('CN','__SERVER', 'Server', 'Hostname')]
    [String[]]$ComputerName = "localhost"
  )

  process
  {
    foreach ($comp in $ComputerName)
    {
      if ($comp -eq ".") { $comp = "localhost" }

      Write-Output ([System.Net.Dns]::GetHostByName($comp).HostName)
    }
  }
}

Examples of use:

  • Resolve-FQDNHostname
    without any arguments will return the FQDNHostname for the current server
  • Resolve-FQDNHostname -computerName server1
    will return the FQDNHostname for “server1”: “server1.domain.local”
  • Resolve-FQDNHostname -computerName server1,server2,server3
    will return the FQDNHostnames for each specified server
  • If the server cannot be resolved, the function will throw an exception: Resolve-FQDNHostName : Exception calling “GetHostByName” with “1” argument(s): “No such host is known”


Leave a comment

SharePoint (2007) deployments controleren met PowerShell test framework

Dit artikel is 3 oktober 2013 ook verschenen op de site van de Nederlandse SharePoint community SPCNL.nl.

De volgende technieken zijn ook heel goed bruikbaar bij de recentere SharePoint versies; de tests en scripts hieronder zijn oorspronkelijk geschreven voor SharePoint 2007.

De scripts uit dit artikel kun je vinden in het bijgesloten ZIP 20130923Test-PortalDeployment.zip.

De afgelopen jaren is elke drie jaar een nieuwe versie van SharePoint verschenen, maar overstappen naar een nieuwere versie is helemaal niet zo vanzelfsprekend. Soms blijft een klant nog even hangen bij die versie die het op dat moment goed genoeg doet. En met SharePoint 2007 krijg je meteen een uitdaging om deployment van componenten robuust te regelen, zeker als er sprake is van twee ontwikkelstraten met tussen de 1 en 5 servers in elke omgeving.

Omdat er veel herhaalde handelingen zitten in een deployment, is het scripten van deze handelingen echt een noodzaak. Niet alleen omdat je menselijke uitvoeringsfouten uitsluit, maar ook voor volledig geautomatiseerde uitrol. Een nachtelijke build moet de volgende ochtend klaar staan op een ‘development integration’ omgeving voor intake door de testers, waarbij de vorige build eerst netjes wordt verwijderd en vervolgens de verse build wordt geïnstalleerd. Na wat initieel gepeuter met CMD/BAT files en STSADM kwam ik in aanraking met PowerShell en ontdekte al snel dat ook SharePoint 2007 heel goed te manipuleren is met deze ‘task automation framework’ van Microsoft, maar ook om een deployment van een SharePoint oplossing goed is te controleren, in combinatie met een testing framework PSaint.

Continue reading


4 Comments

PowerShell: Compare-Directory.ps1 – comparing file contents and directories with Compare-Object and MD5 hash

In a after-site-deployment scenario, I needed to compare site directories and files on front-ends in a load-balanced web server farm to make sure these sites contained identical files and directory structure. When a hotfix was applied by an administrator, once too often files were not deployed properly and behavior of the site was not consistent because of the differences in file or configuration on front-ends. To diagnose these kind of problems more quickly, I developed PowerShell command Compare-Directory to compare a reference directory with one or more difference directories.
Continue reading


Leave a comment

PowerShell: Get-SPCField.ps1 – Getting SharePoint fields using Client Side Object Model

I am currently working on PowerShell scripts to ease SharePoint 2010/2013 configuration deployment in DTAP environments. These scripts started out with SharePoint Object Model (server side) dependencies, but in a discussion with Macaws SharePoint master Bram de Jager, I wondered if similar commands could be crafted with the SharePoint Client Site Object Model functionality as well. Goal is to create a proof of concept Get-SPField that uses SharePoint Client Object Model instead of the server SharePoint object model.

Continue reading