forked from dsccommunity/CommonTasks
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added new configuration 'OfficeOnlineServer'
- Loading branch information
Showing
4 changed files
with
401 additions
and
0 deletions.
There are no files selected for viewing
15 changes: 15 additions & 0 deletions
15
CommonTasks/DscResources/OfficeOnlineServer/OfficeOnlineServer.psd1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
@{ | ||
RootModule = 'OfficeOnlineServer.schema.psm1' | ||
|
||
ModuleVersion = '0.0.1' | ||
|
||
GUID = '9cf9b3a6-e1ee-4287-a0d1-64f4f0d7f342' | ||
|
||
Author = 'NA' | ||
|
||
CompanyName = 'NA' | ||
|
||
Copyright = 'NA' | ||
|
||
DscResourcesToExport = @('OfficeOnlineServer') | ||
} |
374 changes: 374 additions & 0 deletions
374
CommonTasks/DscResources/OfficeOnlineServer/OfficeOnlineServer.schema.psm1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,374 @@ | ||
configuration OfficeOnlineServer | ||
{ | ||
param ( | ||
[Parameter()] | ||
[uri]$ExternalUrl, | ||
|
||
[Parameter()] | ||
[uri]$InternalUrl, | ||
|
||
[Parameter()] | ||
[string]$CertificateName, | ||
|
||
[Parameter()] | ||
[switch]$AllowHttp, | ||
|
||
[Parameter()] | ||
[bool]$EditingEnabled, | ||
|
||
[Parameter()] | ||
[bool]$AllowCEIP, | ||
|
||
[Parameter()] | ||
[bool]$AllowHttpSecureStoreConnections, | ||
|
||
[Parameter()] | ||
[string]$CacheLocation, | ||
|
||
[Parameter()] | ||
[int]$CacheSizeInGB, | ||
|
||
[Parameter()] | ||
[string]$RenderingLocalCacheLocation, | ||
|
||
[Parameter()] | ||
[string]$LogLocation, | ||
|
||
[Parameter()] | ||
[int]$MaxMemoryCacheSizeInMB, | ||
|
||
[Parameter()] | ||
[bool]$ClipartEnabled, | ||
|
||
[Parameter()] | ||
[ValidateSet('VerboseEX', 'Verbose', 'Medium', 'High', 'Monitorable', 'Unexpected', 'None')] | ||
$LogVerbosity = 'Medium', | ||
|
||
[Parameter()] | ||
[string]$MicrosoftIdentityExtensionsPath, | ||
|
||
[Parameter()] | ||
[string]$DotNet48FrameworkPath, | ||
|
||
[Parameter()] | ||
[string]$VcRedistributable2013Path, | ||
|
||
[Parameter()] | ||
[string]$VcRedistributable2013ProductId, | ||
|
||
[Parameter()] | ||
[string]$VcRedistributable20152019Path, | ||
|
||
[Parameter()] | ||
[string]$VcRedistributable20152019ProductId, | ||
|
||
[Parameter()] | ||
[hashtable[]]$LanguagePacks, | ||
|
||
[Parameter(Mandatory)] | ||
[string]$Path, | ||
|
||
[Parameter(Mandatory)] | ||
[string]$MasterServer | ||
) | ||
function Sync-Parameter | ||
{ | ||
[Cmdletbinding()] | ||
param ( | ||
[Parameter(Mandatory = $true)] | ||
[ValidateScript( { | ||
$_ -is [System.Management.Automation.FunctionInfo] -or | ||
$_ -is [System.Management.Automation.CmdletInfo] -or | ||
$_ -is [System.Management.Automation.ExternalScriptInfo] -or | ||
$_.GetType().FullName -eq 'Microsoft.PowerShell.DesiredStateConfiguration.DscResourceInfo' -or | ||
$_.psobject.TypeNames[0] -eq 'Deserialized.Selected.Microsoft.PowerShell.DesiredStateConfiguration.DscResourceInfo' | ||
})] | ||
[object]$Command, | ||
|
||
[hashtable]$Parameters, | ||
|
||
[switch]$ConvertValue | ||
) | ||
|
||
if (-not $PSBoundParameters.ContainsKey('Parameters')) | ||
{ | ||
$Parameters = ([hashtable]$ALBoundParameters).Clone() | ||
} | ||
else | ||
{ | ||
$Parameters = ([hashtable]$Parameters).Clone() | ||
} | ||
|
||
$commonParameters = [System.Management.Automation.Internal.CommonParameters].GetProperties().Name | ||
$commandParameterKeys = if ($Command.GetType().FullName -eq 'Microsoft.PowerShell.DesiredStateConfiguration.DscResourceInfo' -or | ||
$Command.psobject.TypeNames[0] -eq 'Deserialized.Selected.Microsoft.PowerShell.DesiredStateConfiguration.DscResourceInfo') | ||
{ | ||
$Command.Properties.Name | ||
} | ||
else | ||
{ | ||
$Command.Parameters.Keys.GetEnumerator() | ForEach-Object { $_ } | ||
} | ||
|
||
$parameterKeys = $Parameters.Keys.GetEnumerator() | ForEach-Object { $_ } | ||
|
||
$keysToRemove = Compare-Object -ReferenceObject $commandParameterKeys -DifferenceObject $parameterKeys | | ||
Select-Object -ExpandProperty InputObject | ||
|
||
$keysToRemove = $keysToRemove + $commonParameters | Select-Object -Unique #remove the common parameters | ||
|
||
foreach ($key in $keysToRemove) | ||
{ | ||
$Parameters.Remove($key) | ||
} | ||
|
||
if ($ConvertValue.IsPresent) | ||
{ | ||
$keysToUpdate = @{} | ||
foreach ($kvp in $Parameters.GetEnumerator()) | ||
{ | ||
if (-not $kvp.Value) # $null or empty string will not trip up conversion | ||
{ | ||
continue | ||
} | ||
|
||
$targetType = $Command.Parameters[$kvp.Key].ParameterType | ||
$sourceType = $kvp.Value.GetType() | ||
$targetValue = $kvp.Value -as $targetType | ||
|
||
if (-not $targetValue -and $targetType.ImplementedInterfaces -contains [Collections.IList]) | ||
{ | ||
$targetValue = $targetType::new() | ||
foreach ($v in $kvp.Value) | ||
{ | ||
$targetValue.Add($v) | ||
} | ||
} | ||
|
||
if (-not $targetValue -and $targetType.ImplementedInterfaces -contains [Collections.IDictionary] ) | ||
{ | ||
$targetValue = $targetType::new() | ||
foreach ($k in $kvp.Value.GetEnumerator()) | ||
{ | ||
$targetValue.Add($k.Key, $k.Value) | ||
} | ||
} | ||
|
||
if (-not $targetValue -and ($sourceType.ImplementedInterfaces -contains [Collections.IList] -and $targetType.ImplementedInterfaces -notcontains [Collections.IList])) | ||
{ | ||
Write-Verbose -Message "Value of source parameter $($kvp.Key) is a collection, but target parameter is not. Selecting first object" | ||
$targetValue = $kvp.Value | Select-Object -First 1 | ||
} | ||
|
||
if (-not $targetValue) | ||
{ | ||
Write-Error -Message "Conversion of source parameter $($kvp.Key) (Type: $($sourceType.FullName)) to type $($targetType.FullName) was impossible" | ||
return | ||
} | ||
|
||
$keysToUpdate[$kvp.Key] = $targetValue | ||
} | ||
} | ||
|
||
if ($keysToUpdate) | ||
{ | ||
foreach ($kvp in $keysToUpdate.GetEnumerator()) | ||
{ | ||
$Parameters[$kvp.Key] = $kvp.Value | ||
} | ||
} | ||
|
||
if ($PSBoundParameters.ContainsKey('Parameters')) | ||
{ | ||
$Parameters | ||
} | ||
else | ||
{ | ||
$global:ALBoundParameters = $Parameters | ||
} | ||
} | ||
|
||
Import-DscResource -ModuleName PSDesiredStateConfiguration | ||
Import-DscResource -ModuleName OfficeOnlineServerDsc | ||
Import-DscResource -ModuleName xPSDesiredStateConfiguration | ||
|
||
if (-not $ExternalUrl -and -not $InternalUrl) | ||
{ | ||
Write-Error 'Either "$ExternalUrl" or "$InternalUrl" must be defined' | ||
return | ||
} | ||
|
||
if ($LogLocation) | ||
{ | ||
File LogFolder | ||
{ | ||
Ensure = 'Present' | ||
DestinationPath = $LogLocation | ||
Type = 'Directory' | ||
} | ||
} | ||
|
||
xWindowsFeatureSet OfficeOnlineServer | ||
{ | ||
Ensure = 'Present' | ||
Name = @( | ||
'Web-Server', | ||
'Web-Mgmt-Tools', | ||
'Web-Mgmt-Console', | ||
'Web-WebServer', | ||
'Web-Common-Http', | ||
'Web-Default-Doc', | ||
'Web-Static-Content', | ||
'Web-Performance', | ||
'Web-Stat-Compression', | ||
'Web-Dyn-Compression', | ||
'Web-Security', | ||
'Web-Filtering', | ||
'Web-Windows-Auth', | ||
'Web-App-Dev', | ||
'Web-Net-Ext45', | ||
'Web-Asp-Net45', | ||
'Web-ISAPI-Ext', | ||
'Web-ISAPI-Filter', | ||
'Web-Includes', | ||
'NET-Framework-Features', | ||
'NET-Framework-Core', | ||
'NET-HTTP-Activation', | ||
'NET-Non-HTTP-Activ', | ||
'NET-WCF-HTTP-Activation45', | ||
'Server-Media-Foundation', | ||
'Windows-Identity-Foundation' | ||
) | ||
} | ||
|
||
xService WMIPerformanceAdapter | ||
{ | ||
DependsOn = '[xWindowsFeatureSet]OfficeOnlineServer' | ||
Name = 'wmiApSrv' | ||
State = 'Running' | ||
StartupType = 'Automatic' | ||
} | ||
|
||
$softwareDependsOn = @('[xWindowsFeatureSet]OfficeOnlineServer') | ||
if ($MicrosoftIdentityExtensionsPath) | ||
{ | ||
$softwareDependsOn += '[xPackage]Microsoft.IdentityModel.Extention.dll' | ||
xPackage 'Microsoft.IdentityModel.Extention.dll' | ||
{ | ||
Ensure = 'Present' | ||
Name = 'Microsoft Identity Extensions' | ||
Path = $MicrosoftIdentityExtensionsPath | ||
ProductId = 'F99F24BF-0B90-463E-9658-3FD2EFC3C991' | ||
} | ||
} | ||
|
||
if ($DotNet48FrameworkPath) | ||
{ | ||
$softwareDependsOn += '[xPackage]DotNetFramework48' | ||
xPackage DotNetFramework48 | ||
{ | ||
Ensure = 'Present' | ||
Name = 'Microsoft .NET Framework 4.8' | ||
Path = $DotNet48FrameworkPath | ||
ProductId = '' | ||
Arguments = '/q /norestart' | ||
InstalledCheckRegHive = 'LocalMachine' | ||
InstalledCheckRegKey = 'SOFTWARE\DscInstallations\' | ||
InstalledCheckRegValueName = 'DotNet48' | ||
InstalledCheckRegValueData = '4.8.03761' | ||
CreateCheckRegValue = $true | ||
} | ||
} | ||
|
||
if ($VcRedistributable20152019Path) | ||
{ | ||
$softwareDependsOn += '[xPackage]vcredist2015-2019' | ||
xPackage vcredist2015-2019 | ||
{ | ||
Ensure = 'Present' | ||
Name = 'Microsoft Visual C++ 2015-2019 Redistributable (x64)' | ||
Path = $VcRedistributable20152019Path | ||
ProductId = $VcRedistributable20152019ProductId | ||
Arguments = '/install /quiet /norestart' | ||
} | ||
} | ||
|
||
if ($VcRedistributable2013Path) | ||
{ | ||
$softwareDependsOn += '[xPackage]vcredist2013' | ||
xPackage vcredist2013 | ||
{ | ||
Ensure = 'Present' | ||
Name = 'Microsoft Visual C++ 2013 Redistributable (x64)' | ||
Path = $VcRedistributable2013Path | ||
ProductId = $VcRedistributable2013ProductId | ||
Arguments = '/install /quiet /norestart' | ||
} | ||
} | ||
|
||
OfficeOnlineServerInstall InstallBinaries | ||
{ | ||
Ensure = "Present" | ||
Path = $Path | ||
DependsOn = $softwareDependsOn | ||
} | ||
|
||
$dependsOnInstallAndLanguagePack = @() | ||
foreach ($languagePack in $LanguagePacks) | ||
{ | ||
$dependsOnInstallAndLanguagePack += "[OfficeOnlineServerInstallLanguagePack]$($languagePack.Language)" | ||
OfficeOnlineServerInstallLanguagePack $languagePack.Language | ||
{ | ||
Ensure = 'Present' | ||
BinaryDir = $languagePack.BinaryDir | ||
Language = $languagePack.Language | ||
DependsOn = '[OfficeOnlineServerInstall]InstallBinaries' | ||
} | ||
} | ||
$dependsOnInstallAndLanguagePack += '[OfficeOnlineServerInstall]InstallBinaries' | ||
|
||
if ($MasterServer -eq $node.NodeName) | ||
{ | ||
#Get-DscResource cannot be called inside a configuration, hence the background job | ||
$resource = Start-Job -ScriptBlock { Get-DscResource -Name OfficeOnlineServerFarm | Select-Object -Property Name, Properties } | Receive-Job -AutoRemoveJob -Wait | ||
$param = Sync-Parameter -Parameters $PSBoundParameters -Command $resource | ||
$param.Add('DependsOn', $dependsOnInstallAndLanguagePack) | ||
|
||
(Get-DscSplattedResource -ResourceName OfficeOnlineServerFarm -ExecutionName CreateFarm -Properties $param -NoInvoke).Invoke($param) | ||
|
||
xService OfficeOnline | ||
{ | ||
DependsOn = '[OfficeOnlineServerFarm]CreateFarm' | ||
Name = 'WACSM' | ||
State = 'Running' | ||
Dependencies = 'wmiApSrv' | ||
} | ||
} | ||
else | ||
{ | ||
WaitForAll MasterServer | ||
{ | ||
DependsOn = $dependsOnInstallAndLanguagePack | ||
NodeName = $MasterServer | ||
ResourceName = '[OfficeOnlineServerFarm]CreateFarm' | ||
RetryIntervalSec = 30 | ||
RetryCount = 30 | ||
} | ||
|
||
OfficeOnlineServerMachine JoinFarm | ||
{ | ||
Ensure = 'Present' | ||
Roles = 'All' | ||
MachineToJoin = $node.NodeName | ||
DependsOn = '[WaitForAll]MasterServer' | ||
} | ||
|
||
Service OfficeOnline | ||
{ | ||
DependsOn = '[OfficeOnlineServerMachine]JoinFarm' | ||
Name = 'WACSM' | ||
State = 'Running' | ||
Dependencies = 'wmiApSrv' | ||
} | ||
} | ||
} |
Oops, something went wrong.