Public/Remove-VSTeamAccount.ps1
function Remove-VSTeamAccount { [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Medium")] param( # Forces the command without confirmation [switch] $Force ) DynamicParam { # Only add this option on Windows Machines if (_isOnWindows) { Write-Verbose 'On a Windows machine' $ParameterName = 'Level' # Create the dictionary $RuntimeParameterDictionary = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary # Create the collection of attributes $AttributeCollection = New-Object System.Collections.ObjectModel.Collection[System.Attribute] # Create and set the parameters' attributes $ParameterAttribute = New-Object System.Management.Automation.ParameterAttribute $ParameterAttribute.Mandatory = $false $ParameterAttribute.HelpMessage = "On Windows machines allows you to store the account information at the process, user or machine level. Not available on other platforms." # Add the attributes to the attributes collection $AttributeCollection.Add($ParameterAttribute) # Generate and set the ValidateSet if (_testAdministrator) { $arrSet = "All", "Process", "User", "Machine" } else { $arrSet = "All", "Process", "User" } $ValidateSetAttribute = New-Object System.Management.Automation.ValidateSetAttribute($arrSet) # Add the ValidateSet to the attributes collection $AttributeCollection.Add($ValidateSetAttribute) # Create and return the dynamic parameter $RuntimeParameter = New-Object System.Management.Automation.RuntimeDefinedParameter($ParameterName, [string], $AttributeCollection) $RuntimeParameterDictionary.Add($ParameterName, $RuntimeParameter) return $RuntimeParameterDictionary } else { Write-Verbose 'Not on a Windows machine' } } process { if (_isOnWindows) { # Bind the parameter to a friendly variable $Level = $PSBoundParameters[$ParameterName] if (-not $Level) { $Level = "Process" } } else { $Level = "Process" } switch ($Level) { "User" { $whatIf = "user level" } "All" { $whatIf = "all levels" } Default { $whatIf = "$Level level" } } if ($Force -or $pscmdlet.ShouldProcess($whatIf, "Remove Team Account")) { switch ($Level) { "Process" { Write-Verbose "Removing from user level." _clearEnvironmentVariables "Process" } "All" { Write-Verbose "Removing from all levels." Write-Verbose "Removing from proces level." _clearEnvironmentVariables "Process" Write-Verbose "Removing from user level." _clearEnvironmentVariables "User" if (_testAdministrator) { Write-Verbose "Removing from machine level." _clearEnvironmentVariables "Machine" } else { Write-Warning "Must run as administrator to clear machine level." } } Default { Write-Verbose "Removing from $Level level." _clearEnvironmentVariables $Level } } Write-Output "Removed default project and team account information" } } } |