Commands/AffiliateApplication/AffiliateApplication.ps1
#region Copyright & License # Copyright © 2012 - 2022 François Chabot # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. #endregion Set-StrictMode -Version Latest <# .SYNOPSIS Gets the affiliate applications defined in the Enterprise Single Sign-On (SSO) server database. .DESCRIPTION Gets the affiliate applications defined in the Enterprise Single Sign-On (SSO) server database. If no name is given, then this command gets the SSO affiliate applications that have been created thanks to BizTalk.Factory's Settings API, i.e. Be.Stateless.BizTalk.Settings.Sso.AffiliateApplication class contained in the Be.Stateless.BizTalk.Settings assembly. If the '*' wildcard is given, then this command returns all the SSO affiliate applications defined in the Enterprise Single Sign-On (SSO) server database, regardless of whether the affiliate application has been defined thanks to BizTalk.Factory API. .PARAMETER AffiliateApplicationName The optional name of the affiliate application to return. The wildcard '*' can be passed to return all the affiliate applications defined in the Enterprise Single Sign-On (SSO) server database. .OUTPUTS The created affiliate applications. .EXAMPLE PS> Get-AffiliateApplication Returns all the affiliate applications that have been created by the BizTalk.Factory's Settings API. .EXAMPLE PS> Get-AffiliateApplication -Name * Returns all the affiliate applications regardless of whether they have been created by the BizTalk.Factory's Settings API. .EXAMPLE PS> Get-AffiliateApplication -Name BizTalk.Factory, BizTalk.Factory.Batching Returns the affiliate applications that have the given names, regardless of whether they have been created by the BizTalk.Factory's Settings API. .LINK https://www.stateless.be/PowerShell/Module/BizTalk/Deployment/AffiliateApplicationCommands.html .NOTES © 2022 be.stateless. #> function Get-AffiliateApplication { [CmdletBinding()] [OutputType([AffiliateApplication[]])] param( [Alias('Name')] [Parameter(Position = 0, Mandatory = $false)] [ValidateNotNullOrEmpty()] [string[]] $AffiliateApplicationName ) Resolve-ActionPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState if ([string]::IsNullOrEmpty($AffiliateApplicationName)) { [AffiliateApplication]::FindByContact() } elseif ($AffiliateApplicationName -eq [AffiliateApplication]::ANY_CONTACT_INFO) { [AffiliateApplication]::FindByContact([AffiliateApplication]::ANY_CONTACT_INFO) } else { [AffiliateApplication]::FindByName($AffiliateApplicationName) } } <# .SYNOPSIS Gets the config stores associated to an affiliate application from the Enterprise Single Sign-On (SSO) server database. .DESCRIPTION Gets either the default or any config stores associated to an affiliate application from the Enterprise Single Sign-On (SSO) server database. .PARAMETER AffiliateApplicationName The name of the affiliate application. .PARAMETER Any Whether to return any config store associated to an affiliate application; only the default one otherwise. .OUTPUTS The config store associated to an affiliate application. .EXAMPLE PS> Get-AffiliateApplicationStore -Name 'BizTalk.Factory' .EXAMPLE PS> Get-AffiliateApplicationStore -Name 'BizTalk.Factory' -Any .EXAMPLE PS> New-AffiliateApplication -Name Test PS> $s = Get-AffiliateApplicationStore -Name Test PS> $s.Properties['Name'] = 'Value' PS> $s.Save() .LINK https://www.stateless.be/PowerShell/Module/BizTalk/Deployment/AffiliateApplicationCommands.html .NOTES © 2022 be.stateless. #> function Get-AffiliateApplicationStore { [CmdletBinding()] [OutputType([ConfigStore[]])] param( [Alias('Name')] [Parameter(Position = 0, Mandatory = $true)] [ValidateNotNullOrEmpty()] [string[]] $AffiliateApplicationName, [Parameter(Mandatory = $false)] [switch] $Any ) Resolve-ActionPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState Get-AffiliateApplication -AffiliateApplicationName $AffiliateApplicationName | ForEach-Object -Process { if ($Any) { $_.ConfigStores } else { $_.ConfigStores.Default } } } <# .SYNOPSIS Creates a new affiliate application in the Enterprise Single Sign-On (SSO) server database. .DESCRIPTION Creates a new affiliate application in the Enterprise Single Sign-On (SSO) server database and configure its administrator and user privileges. .PARAMETER AffiliateApplicationName The name of the affiliate application to create. The name cannot contain any space. .PARAMETER AdministratorGroup The optional name of the group that has administrator privilege on the affiliate application. It defaults to the local group 'BizTalk Server Administrators'. .PARAMETER UserGroup The optional name of the group that has user privilege on the affiliate application. It defaults to the local groups 'BizTalk Application Users' and 'BizTalk Isolated Host Users'. .OUTPUTS The newly created affiliate application. .EXAMPLE PS> New-AffiliateApplication -Name 'BizTalk.Factory' .EXAMPLE PS> New-AffiliateApplication -Name 'BizTalk.Factory' -AdministratorGroup 'BizTalk Server Administrators' -UserGroup 'BizTalk Application Users', 'BizTalk Isolated Host Users' .LINK https://www.stateless.be/PowerShell/Module/BizTalk/Deployment/AffiliateApplicationCommands.html .NOTES © 2022 be.stateless. #> function New-AffiliateApplication { [CmdletBinding()] [OutputType([AffiliateApplication])] param( [Alias('Name')] [Parameter(Position = 0, Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $AffiliateApplicationName, [Parameter(Position = 1, Mandatory = $false)] [ValidateNotNullOrEmpty()] [string[]] $AdministratorGroup, [Parameter(Position = 1, Mandatory = $false)] [ValidateNotNullOrEmpty()] [string[]] $UserGroup ) Resolve-ActionPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState $affiliateApplication = [AffiliateApplication]::FindByName($AffiliateApplicationName) if ($null -eq $affiliateApplication) { $affiliateApplication = [AffiliateApplication]::Create($AffiliateApplicationName, $AdministratorGroup, $UserGroup) } else { Write-Warning "SSO Affiliate Application $AffiliateApplicationName already exists." } $affiliateApplication } <# .SYNOPSIS Deletes an affiliate application from the Enterprise Single Sign-On (SSO) server database. .DESCRIPTION Deletes an affiliate application from the Enterprise Single Sign-On (SSO) server database. .PARAMETER AffiliateApplicationName The name of the affiliate application to delete. .EXAMPLE PS> Remove-AffiliateApplication -Name 'BizTalk.Factory' .LINK https://www.stateless.be/PowerShell/Module/BizTalk/Deployment/AffiliateApplicationCommands.html .NOTES © 2022 be.stateless. #> function Remove-AffiliateApplication { [CmdletBinding()] [OutputType([void])] param( [Alias('Name')] [Parameter(Position = 0, Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $AffiliateApplicationName ) Resolve-ActionPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState $affiliateApplication = [AffiliateApplication]::FindByName($AffiliateApplicationName) if ($null -eq $affiliateApplication) { Write-Warning "SSO Affiliate Application $AffiliateApplicationName does not exist." } else { $affiliateApplication.Delete() } } <# .SYNOPSIS Updates the properties and their values stored in the default config store of an affiliate application from the Enterprise Single Sign-On (SSO) server database. .DESCRIPTION Updates the properties and values with the [SsoSetting] attribute qualified properties and values that are defined by the IEnvironmentSettings-derived type contained in the .NET assembly located at EnvironmentSettingsAssemblyFilePath for a given TargetEnvironment. The primary intended use of this command is by the deployment tasks coming with the BizTalk.Deployment module. .PARAMETER AffiliateApplicationName The name of the affiliate application. .PARAMETER AssemblyProbingFolderPath Optional list of folders where to look into for .NET assemblies required to load the .NET assembly containing the Code-First Microsoft BizTalk Server Application Bindings. .PARAMETER EnvironmentSettingsAssemblyFilePath The path to the .NET assembly containing the IEnvironmentSettings-derived type that defines the properties and their values to update the default config store of the affiliate application with. .PARAMETER EnvironmentSettingOverridesTypeName Optional full name of the type overriding the default settings upon which the application binding assembly depends. .PARAMETER Isolated Whether to load the .NET assembly containing the IEnvironmentSettings-derived type in a separate process so as not to lock it. .PARAMETER TargetEnvironment The target environment for which to produce the XML BizTalk Application Bindings. Other values than the ones suggested in accordance to BizTalk.Factory Conventions are accepted. .OUTPUTS The config store that has been updated. .EXAMPLE PS> Update-AffiliateApplicationStore -Name 'BizTalk.Factory' .EXAMPLE PS> Update-AffiliateApplicationStore -Name 'BizTalk.Factory' -EnvironmentSettingsAssemblyFilePath .\Be.Stateless.BizTalk.Factory.Application.Deployment\Be.Stateless.BizTalk.Factory.Settings.dll -TargetEnvironment ACC .LINK https://www.stateless.be/PowerShell/Module/BizTalk/Deployment/AffiliateApplicationCommands.html .NOTES © 2022 be.stateless. #> function Update-AffiliateApplicationStore { [CmdletBinding()] [OutputType([ConfigStore])] param( [Alias('Name')] [Parameter(Position = 0, Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $AffiliateApplicationName, [Alias('ProbingPath')] [Parameter(Mandatory = $false)] [ValidateNotNullOrEmpty()] [ValidateScript({ $_ | Test-Path -PathType Container })] [string[]] $AssemblyProbingFolderPath, [Alias('Path')] [Parameter(Position = 1, Mandatory = $true)] [ValidateNotNullOrEmpty()] [ValidateScript( { Test-Path -Path $_ -PathType Leaf } )] [string] $EnvironmentSettingsAssemblyFilePath, [Alias('SettingsTypeName')] [Parameter(Mandatory = $false)] [ValidateNotNullOrEmpty()] [string] $EnvironmentSettingOverridesTypeName, [Parameter(Mandatory = $false)] [switch] $Isolated, [Alias('Environment')] [Parameter(Position = 2, Mandatory = $true)] [ValidateNotNullOrEmpty()] [string] $TargetEnvironment ) Resolve-ActionPreference -Cmdlet $PSCmdlet -SessionState $ExecutionContext.SessionState $arguments = Get-CoreCommandArguments $PSBoundParameters if ($Isolated) { Write-Information "Dispatching Update of SSO AffiliateApplication '$AffiliateApplicationName''s ConfigStore to Isolated Process..." Invoke-Command -ComputerName $env:COMPUTERNAME -UseSSL -ScriptBlock { Import-Module $using:coreModulePath Update-CoreAffiliateApplicationStore @using:arguments } } else { Update-CoreAffiliateApplicationStore @arguments } } <# # Argument Completers #> Register-ArgumentCompleter -CommandName Get-AffiliateApplication, Get-AffiliateApplicationStore -ParameterName AffiliateApplicationName -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) @('*') + $([AffiliateApplication]::FindByContact('*').Name) | Where-Object -FilterScript { $_ -match $wordToComplete } | ForEach-Object -Process { "'$_'" } } Register-ArgumentCompleter -CommandName Remove-AffiliateApplication, Update-AffiliateApplicationStore -ParameterName AffiliateApplicationName -ScriptBlock { param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) # forbid to remove or update all AffiliateApplication, so don't return '*' as an argument candidate; # forbid to remove or update an AffiliateApplication that has not been created by Be.Stateless.BizTalk.Settings, so call FindByContact() # which uses the DEFAULT_CONTACT_INFO (i.e. "icraftsoftware@stateless.be") and do not call FindByContact('*') $([AffiliateApplication]::FindByContact().Name) | Where-Object -FilterScript { $_ -match $wordToComplete } | ForEach-Object -Process { "'$_'" } } <# # Type Accelerators #> $Accelerators = [PSObject].Assembly.GetType('System.Management.Automation.TypeAccelerators') $Accelerators::Add('AffiliateApplication', 'Be.Stateless.BizTalk.Settings.Sso.AffiliateApplication') $Accelerators::Add('ConfigStore', 'Be.Stateless.BizTalk.Settings.Sso.AffiliateApplication') # SIG # Begin signature block # MIII0QYJKoZIhvcNAQcCoIIIwjCCCL4CAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR # AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUK/xjfztAmqnjxmGacgqw7ng0 # 3TygggVMMIIFSDCCAzCgAwIBAgIJAJkr3mJdTBkUMA0GCSqGSIb3DQEBCwUAMEEx # PzA9BgNVBAMeNgBpAGMAcgBhAGYAdABzAG8AZgB0AHcAYQByAGUAQABzAHQAYQB0 # AGUAbABlAHMAcwAuAGIAZTAeFw0yMTA2MjUxNDEyMjNaFw00MTA2MjAxNDEyMjNa # MEExPzA9BgNVBAMeNgBpAGMAcgBhAGYAdABzAG8AZgB0AHcAYQByAGUAQABzAHQA # YQB0AGUAbABlAHMAcwAuAGIAZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC # ggIBAOeqdUHBv7sxSeX3aj6yPKj7PAvs8izpVXjyEBl5aR8mQneVcXuF53AH7EW1 # 6E5p4+Az5pJPGUD5c3tXhiGMF7vgLhQjO6hlaVBRIqiIYHikNLwMNy6YBMc/QQYM # rPhqHEFsZ53dkBIIj3M8e3kFcTFA09n25yDtTPDab4nd9yUhc9Qc8+nfpIzfYsoP # 1pZ3nCzhw6hN2/44v1dkQrG3dRYwt+px65p6NPNZWEJpt4VCJjIFh+lBYJdxm9d4 # X/rAnlHIkbv7liOavWDzgHVabS3hdAWtcDmynm+7+FcZDFqPWNCl3e4SS7xe4s/R # CKFKA0IsfKkSk9YJlLgeSQIEXUOOWXJAGaLqnRD8xWLZsc4Oi9GZg7XV1mv/S88c # oztXnwtAN3OOlRKBh2QbomMgxeMO0GvsLE/cq5Q/YKAoz+KGr/7LcZq9jzQ8IPus # ZvWLeDXmxPiwJjpZc1koLgfGIEX2NStQTT3QmacWr9thrWcKvI+4uBmI4exS9B4a # R3nV91w5EY+2RoYsHqej9LWwNamO96+jMX9pxprTX+EkLUuMAikw/po8sBC9MUUn # 5pMWmUv7DCtQOLGGBDDMMMkn4ZcjpCEEdPGHRKfqNnD27ssGtDjiNzfQrsm67toU # bBwUF+gyJq/YckWquYJhA9ZOFWEADuIwGnsOzsoRvuQyY+p9AgMBAAGjQzBBMA4G # A1UdDwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDAzAXBgNVHREEEDAO # ggxzdGF0ZWxlc3MuYmUwDQYJKoZIhvcNAQELBQADggIBACithYM3qckZRc9+Xbfu # a6gWr3HwjrW+FHKgjfrcOm8ZnLVapb9xFqsqrRQqd3RXWQDINEGrtI2rSfrzyfoK # UiTgldIfQNP1ZcGY229d++90t3hdo2mlt05hjYlbMENloJHpsEP0vQZmwOcEimCT # ex1pymYM+P9pj3j8UD1PT1eIZot6or8fBRl63UybyDSrM7L4UOkkAOniKxWy5pW6 # 6duS8SR+SZpr3Bv44NyXPj0Nv+MIpLmsLrd7XPBFmnGxzY01ZO9vzi9KEhM2wT5i # jPqHDNOvfPiADtAa+EyUBzdJiqy9heCz/TMZQgMWGwtfqJNxWZmsHcha2anW4Qt+ # mzrLO4GojWoVog9uVSAq+l0a+YQsd1u1kUmm4vgZCFyUA+lEp4LkI7ca2VBHkLPD # w+u2DoDMRiqFPZjO7BCKjGc0jj9B/qGR3JVt+tqDdB621xXf2YGF2oFvxZQ/keGt # 0ujfJ+JwN3nCulDAA4773q6KUnfykyrvAgITNbRJL6TngeRKtw9VIJBPxzqMzLpV # 5ggXNituwLaD1CCBJ1oo9DZHpL9gplXp1wGrelJOTiJhh+pdNsPtRH7CrranWa5h # LFLuigqin0eewQ5giJ1VaiBVEseOmiZog+27UpFIv40aDzgGL3YxB/Mu0ojwrQtp # WLmqJCmWnR5qxOm0yK+zNWe0MYIC7zCCAusCAQEwTjBBMT8wPQYDVQQDHjYAaQBj # AHIAYQBmAHQAcwBvAGYAdAB3AGEAcgBlAEAAcwB0AGEAdABlAGwAZQBzAHMALgBi # AGUCCQCZK95iXUwZFDAJBgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIBDDEKMAigAoAA # oQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4w # DAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUPR2UAs9x7egsjXasbnv6ux3V # ybwwDQYJKoZIhvcNAQEBBQAEggIAMNJ0JgSRwy/vR6q7R4abbu8kJol7dQ4u683Z # ZNZcdHJyjJaz7/Rd3MIVVozpquXZIZyAq0+IbrCcWr52e7M6Li47u6xmQ+Fn25h4 # 9uTRUyHdgxs7Rz3t1BcM1v0VEBTXxKJt7RGIjD/HpfjBZPi/FjCYSEcZMzAdlCQW # XI9CiO3Xk4DtK4AzCsLdzbxp1eA0ER+UHZUmez+ZztLnwP+5qumxGag34Cwt4wJB # F0vECYXfIsc5EpliO1Pmeec87yPCj/yAn4huRycc92Q6T7WtFvVil9QOiS5p/Sj0 # mPsnuCHsLjtaGKX/4R6LmdTWxQopNU5v8pFqZ5lBGx+9IANcQNMQ9AXvhzuLY6Ry # kFiOJenYAoM306AWbAB+GZS5x5Vh1PvV7FwO2EOBxSE78Is1C8/OrH5duNtr7PgZ # DIhSOl2oSWxGp+kbmfXHiHnCfRwKZbBS/fnKKIySTsodGxHJwG7hL1Gpu9NiA0kS # Q7KkNORrYyelyn334rGRkGJroRw+doxghAgPaq3eS5uQh22ICeSZADwuEGmeD+wl # fROHF+httdUCsfUR1JnfaAOk7QaROVJk97sEUtPWUt3pLWF/nEqODFQKO2+FTSDD # Tqeh8vLgPvYkkqT7f9or/eT+mdq+4syx8VmmFoSIbT7ZgxYStm6YFgpaKTu8zSd0 # 7/NPxrY= # SIG # End signature block |