Public/Remove-AtwsModuleConfiguration.ps1
<# .COPYRIGHT Copyright (c) Hugo Klemmestad. All rights reserved. Licensed under the MIT license. See https://github.com/ecitsolutions/Autotask/blob/master/LICENSE.md for license information. #> Function Remove-AtwsModuleConfiguration { <# .SYNOPSIS This function deletes from disk a named configuration object that stores all module options. .DESCRIPTION This function loads from disk the current list of configuration objects that have been saved. Any configuration with the name given will be deleted. .INPUTS Nothing. .OUTPUTS Nothing .EXAMPLE Remove-AtwsModuleConfiguration -Name Sandbox .EXAMPLE Remove-AtwsModuleConfiguration -Name Default -Path AtwsConfig.clixml .NOTES NAME: Remove-AtwsModuleConfiguration Related commands: Get-AtwsModuleConfiguration Set-AtwsModuleConfiguration New-AtwsModuleConfiguration Save-AtwsModuleConfiguration #> [cmdletbinding( ConfirmImpact = 'High', SupportsShouldProcess = $True )] [Alias('Remove-AtwsProfile')] Param ( [Parameter(Position = 1)] [ArgumentCompleter( { param($Cmd, $Param, $Word, $Ast, $FakeBound) $(Get-ChildItem -Path $Global:AtwsModuleConfigurationPath -Filter "*.clixml").FullName })] [ValidateScript( { Test-Path $_ })] [IO.FileInfo] $Path = $(Join-Path -Path $Global:AtwsModuleConfigurationPath -ChildPath AtwsConfig.clixml), [Parameter(Position = 0)] [ArgumentCompleter( { param($Cmd, $Param, $Word, $Ast, $FakeBound) if ($FakeBound.Path) { [IO.FileInfo]$filepath = $FakeBound.Path } else { [IO.FileInfo]$filepath = $(Join-Path -Path $Global:AtwsModuleConfigurationPath -ChildPath AtwsConfig.clixml) } $tempsettings = Import-Clixml -Path $filepath.Fullname if ($tempsettings -is [hashtable]) { foreach ($item in ($tempsettings.keys | Sort-Object)) { "'{0}'" -F $($item -replace "'", "''") } } })] [ValidateNotNullOrEmpty()] [String] $Name = 'Default' ) begin { # Enable modern -Debug behavior if ($PSCmdlet.MyInvocation.BoundParameters['Debug'].IsPresent) { $DebugPreference = 'Continue' } Write-Debug ('{0}: Begin of function' -F $MyInvocation.MyCommand.Name) } process { # Read existing configuration from disk if (Test-Path $Path) { Try { # Try to save to the path $settings = Import-Clixml -Path $Path.Fullname } catch { $message = "{0}`nStacktrace:`n{1}" -f $_, $_.ScriptStackTrace throw (New-Object System.Configuration.Provider.ProviderException $message) return } } # Create an empty setting table if (-not ($settings -is [hashtable])) { $settings = @{} } if ($settings.ContainsKey($Name)) { $caption = $MyInvocation.MyCommand.Name $verboseDescription = '{0}: Deleting configuration with profile name {1} from configuration file {2} as requested.' -F $caption, $Name, $Path.FullName $verboseWarning = '{0}: About to delete configuration with profile name {1} from configuration file {2}. Do you want to continue?' -F $caption, $Name, $Path.FullName if ($PSCmdlet.ShouldProcess($verboseDescription, $verboseWarning, $caption)) { $settings.Remove($Name) try { # Try to save to the path Export-Clixml -InputObject $settings -Path $Path.Fullname } catch { $message = "{0}`nStacktrace:`n{1}" -f $_, $_.ScriptStackTrace throw (New-Object System.Configuration.Provider.ProviderException $message) return } } } else { $message = "{0}: Missing configuration profile: No configuration profile with name {1} was found in configuration file {2}" -f $MyInvocation.MyCommand.Name, $Name, $Path.FullName throw (New-Object System.Configuration.Provider.ProviderException $message) } } end { Write-Debug ('{0}: End of function' -F $MyInvocation.MyCommand.Name) } } |