I have spent some time creating PowerShell scripts to solve all my installation and upgrade tasks. I am now able to install Dynamics NAV on both local and remote computers. I can install databases, services, clickonce distribution and web clients. And my final task last week was to be able to install knowledge base package in a few minutes that upgrades services, client, webclient and clickonce. Likely to create a blog about that later.
As a part of this process I have created several PowerShell scripts and functions. I will find a time to share this with you over the next weeks.
For now I would like to share one function.
When you install a NAV Service Instance from the DVD the service startup is set to “Automatic (Delayed Start)”.
There is a reason for this. I have seen servers unable to finish the startup process if the service startup type is set to “Automatic” only. There is a period of time needed before the service can start after the computer startup.
The problem I am facing with my scripts is that the command New-NAVServerInstance will leave the service in “Automatic” startup mode. I wanted to change this so I created a function.
[code lang=”powershell”]# Set Service Startup Mode to Automatic (delayed)
function Set-ServiceStartupModeRemotely
{
[CmdletBinding()]
param (
[parameter(Mandatory=$true)]
[string] $ServiceInstance,
[parameter(Mandatory=$true)]
[System.Management.Automation.Runspaces.PSSession] $Session
)
PROCESS {
Invoke-Command -Session $Session -ScriptBlock {
param([string] $ServiceInstance, [string] $verbosePreference)
$VerbosePreference = $verbosePreference
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
$Service = ‘MicrosoftDynamicsNavServer$’ + $ServiceInstance
$Computer = ‘LOCALHOST’
$command = ‘sc.exe \\$Computer config "$Service" start= delayed-auto’
$Output = Invoke-Expression -Command $Command -ErrorAction Stop
if($LASTEXITCODE -ne 0){
Write-Host "$Computer : Failed to set $Service to delayed start.
More details: $Output" -foregroundcolor red
} else {
Write-Host "$Computer : Successfully changed $Service service
to delayed start" -foregroundcolor green
}
} -ArgumentList `
$ServiceInstance, `
$VerbosePreference
return $ManifestList
}
}
Export-ModuleMember -Function Set-ServiceStartupModeRemotely[/code]
I added this function to my New-Instance script and call the function after the service has started.
WARNING: Waiting for service ‘Microsoft Dynamics NAV Server [NAV71_KAPPI] (MicrosoftDynamicsNavServer$NAV71_KAPPI)’ to start…
LOCALHOST : Successfully changed MicrosoftDynamicsNavServer$NAV71_KAPPI service to delayed start