Functions/Accounts/New-PASAccountObject.ps1
# .ExternalHelp psPAS-help.xml Function New-PASAccountObject { [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'remoteMachinesAccess', Justification = "False Positive")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseDeclaredVarsMoreThanAssignments', 'secretManagement', Justification = "False Positive")] [CmdletBinding(SupportsShouldProcess, DefaultParameterSetName = "AccountObject")] param( [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = "AccountObject" )] [int]$uploadIndex, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = "AccountObject" )] [string]$userName, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = "AccountObject" )] [string]$name, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = "AccountObject" )] [string]$address, [parameter( Mandatory = $true, ValueFromPipelinebyPropertyName = $true, ParameterSetName = "AccountObject" )] [Alias("PolicyID")] [string]$platformID, [parameter( Mandatory = $true, ValueFromPipelinebyPropertyName = $true, ParameterSetName = "AccountObject" )] [ValidateNotNullOrEmpty()] [Alias("safe")] [string]$SafeName, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = "AccountObject" )] [ValidateSet("Password", "Key")] [string]$secretType, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = "AccountObject" )] [securestring]$secret, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = "AccountObject" )] [hashtable]$platformAccountProperties, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = "AccountObject" )] [boolean]$automaticManagementEnabled, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = "AccountObject" )] [string]$manualManagementReason, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = "AccountObject" )] [string]$remoteMachines, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = "AccountObject" )] [boolean]$accessRestrictedToRemoteMachines, [parameter( Mandatory = $false, ValueFromPipelinebyPropertyName = $true, ParameterSetName = "AccountObject" )] [string]$groupName ) Begin { #V10 parameters are nested under JSON object properties $remoteMachine = [Collections.Generic.List[String]]@("remoteMachines", "accessRestrictedToRemoteMachines") $SecretMgmt = [Collections.Generic.List[String]]@("automaticManagementEnabled", "manualManagementReason") } Process { #Get all parameters that will be sent in the request $boundParameters = $PSBoundParameters | Get-PASParameter switch ($PSCmdlet.ParameterSetName) { "AccountObject" { #deal with "secret" SecureString If ($PSBoundParameters.ContainsKey("secret")) { #Include decoded password in request $boundParameters["secret"] = $(ConvertTo-InsecureString -SecureString $secret) } $boundParameters.keys | Where-Object { $remoteMachine -contains $PSItem } | ForEach-Object { $remoteMachinesAccess = @{ } } { #add key=value to hashtable $remoteMachinesAccess[$PSItem] = $boundParameters[$PSItem] } { $boundParameters["remoteMachinesAccess"] = $remoteMachinesAccess } $boundParameters.keys | Where-Object { $SecretMgmt -contains $PSItem } | ForEach-Object { $secretManagement = @{ } } { #add key=value to hashtable $secretManagement[$PSItem] = $boundParameters[$PSItem] } { $boundParameters["secretManagement"] = $secretManagement } if ($PSCmdlet.ShouldProcess($userName, "Create Account Object Definition")) { $boundParameters | Get-PASParameter -ParametersToRemove @($remoteMachine + $SecretMgmt) } break } } } End {} } |