Skip to content

Instantly share code, notes, and snippets.

@mziyabo
Created September 27, 2016 15:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mziyabo/6c7acb4c80e94d86257b5011311e7957 to your computer and use it in GitHub Desktop.
Save mziyabo/6c7acb4c80e94d86257b5011311e7957 to your computer and use it in GitHub Desktop.
PowerShell module to help do a silent CRM installation
function New-SetupConfiguration
{
[PSCustomObject]$PSLogin=@{
Login=""
Password=""
};
@{
Configuration=@{
PatchLocation="";
UpdateInstall=$true;
LicenseKey="";
SqlServer="";
CreateDatabase=$true;
ReportingUrl="http://"+({HOSTNAME.EXE}).Invoke()+"/reportserver";
OrganizationCollation="Latin1_General_CI_AI";
basecurrency=[PSCustomObject]@{
isocurrencycode="";
currencyname="";
currencysymbol="";
currencyprecision=2
};
Organization="";
OrganizationUniqueName="";
OU="OU=value, DC=subdomain, DC=subdomain, DC=com";
WebsitePort=5555
CreateWebsiteUrl=$true;
WebsiteUrl="";
InstallDir=({if(Test-Path ($idir="C:\Program Files\Microsoft Dynamics CRM")){$idir}}).Invoke();
CrmServiceAccount=$PSLogin
;
SandboxServiceAccount=$PSLogin
;
DeploymentServiceAccount=$PSLogin
;
AsyncServiceAccount=$PSLogin
;
VSSWriterServiceAccount=$PSLogin
;
MonitoringServiceAccount=$PSLogin
;
SQMoptin=$true;
muoptin=$true;
Enableifd=$false
ifdsettings=[PSCustomObject]@{
internalnetworkaddress="";
rootdomainscheme="";
sdkrootdomain="";
webapplicationrootdomain="";
discoveryrootdomain="";
};
IncomingExchangeServer="";
}
}
}
function Export-ToFile() {
param(
[Parameter]
[string]$OutputFileName,
[Parameter(Mandatory=$true)]
[hashtable]$Configuration
)
$template='<CRMSetup><Server><Patch update='+$Configuration.UpdateInstall+'>'+$Configuration.PatchLocation+'</Patch><LicenseKey>'+$Configuration.LicenseKey+'</LicenseKey><SqlServer></SqlServer><Database create="'+$Configuration.CreateDatabase+'"/><Reporting URL="'+$Configuration.ReportingUrl+'"/><OrganizationCollation></OrganizationCollation><basecurrency isocurrencycode="'+$Configuration.basecurrency.isocurrencycode+'" currencyname="'+$Configuration.basecurrency.currencyname+'" currencysymbol="'+$Configuration.basecurrency.currencysymbol+'" currencyprecision="'+$Configuration.basecurrency.currencyprecision+'"/><Organization>'+$Configuration.Organization+'</Organization><OrganizationUniqueName>'+$Configuration.OrganizationUniqueName+'</OrganizationUniqueName><OU>'+$Configuration.OU+'</OU><WebsiteUrl create="'+$Configuration.CreateWebsiteUrl+'" port="'+$Configuration.WebsitePort+'"></WebsiteUrl><InstallDir>'+$Configuration.InstallDir+'</InstallDir><CrmServiceAccount type="DomainUser"><ServiceAccountLogin>'+$Configuration.CrmServiceAccount.Login+'</ServiceAccountLogin><ServiceAccountPassword>'+$Configuration.CrmServiceAccount.Password+'</ServiceAccountPassword></CrmServiceAccount><SandboxServiceAccount type="DomainUser"><ServiceAccountLogin>'+$Configuration.SandboxServiceAccount.Login+'</ServiceAccountLogin><ServiceAccountPassword>'+$Configuration.SandboxServiceAccount.Password+'</ServiceAccountPassword></SandboxServiceAccount><DeploymentServiceAccount type="DomainUser"><ServiceAccountLogin>'+$Configuration.DeploymentServiceAccount.Login+'</ServiceAccountLogin><ServiceAccountPassword>'+$Configuration.DeploymentServiceAccount.Password+'</ServiceAccountPassword></DeploymentServiceAccount><AsyncServiceAccount type="DomainUser"><ServiceAccountLogin></ServiceAccountLogin>'+$Configuration.AsyncServiceAccount.Login+'<ServiceAccountPassword>'+$Configuration.AsyncServiceAccount.Password+'</ServiceAccountPassword></AsyncServiceAccount><VSSWriterServiceAccount type="DomainUser"><ServiceAccountLogin>'+$Configuration.VSSWriterServiceAccount.Login+'</ServiceAccountLogin><ServiceAccountPassword>'+$Configuration.VSSWriterServiceAccount.Password+'</ServiceAccountPassword></VSSWriterServiceAccount><MonitoringServiceAccount type="DomainUser"><ServiceAccountLogin>'+$Configuration.MonitoringServiceAccount.Login+'</ServiceAccountLogin><ServiceAccountPassword>'+$Configuration.MonitoringServiceAccount.Password+'</ServiceAccountPassword></MonitoringServiceAccount><SQM optin="'+$Configuration.SQMoptin+'"/><muoptin optin="'+$Configuration.muoptin+'"/><ifdsettings enabled="'+$Configuration.Enableifd+'"><internalnetworkaddress>'+$Configuration.internalnetworkaddress+'</internalnetworkaddress><rootdomainscheme>'+$Configuration.rootdomainscheme+'</rootdomainscheme><sdkrootdomain>'+$Configuration.sdkrootdomain+'</sdkrootdomain><webapplicationrootdomain>'+$Configuration.webapplicationrootdomain+'</webapplicationrootdomain><discoveryrootdomain>'+$Configuration.discoveryrootdomain+'</discoveryrootdomain></ifdsettings><Email><IncomingExchangeServer name="'+$Configuration.IncomingExchangeServer+'"/></Email></Server></CRMSetup'
if([string]::IsNullOrEmpty($OutputFile)) {
$template > "config.xml"
}
else {
$template > ($OutputFileName+".xml")
}
}
function Install-CRM(){
param(
[Parameter(Mandatory=$true)]
[string]$CRMSetupFolder,
[Parameter()]
[string]$ConfigFilePath
)
$setup = Join-Path $CRMSetupFolder -ChildPath "SetupServer.exe"
if (Test-Path $setup) {
Start-Process $setup -ArgumentList ("/Q /config " + $ConfigFilePath)
}
else {
throw "Path to CRM Setup Folder is invalid."
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment