VaporShell.IAM.Classes.ps1

using namespace System
using namespace System.Collections
using namespace System.Collections.Generic
using namespace System.IO
using namespace System.Management.Automation
[CmdletBinding()]
Param()

Write-Verbose "Importing class 'IAMRolePolicy'"

class IAMRolePolicy : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSIAMRolePolicy'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html'

    hidden [VSJson] $_policyDocument
    hidden [object] $_policyName

    [VSJson] $PolicyDocument
    [string] $PolicyName

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name PolicyDocument -Value {
            $this._policyDocument
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this._policyDocument = [VSJson]::Transform($value)
            Write-Debug $this._policyDocument
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PolicyName -Value {
            $this._policyName
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._policyName = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    IAMRolePolicy() : base() {}
    IAMRolePolicy([IDictionary] $props) : base($props) {}
    IAMRolePolicy([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMUserLoginProfile'"

class IAMUserLoginProfile : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSIAMUserLoginProfile'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user-loginprofile.html'

    hidden [object] $_password
    hidden [object] $_passwordResetRequired

    [string] $Password
    [bool] $PasswordResetRequired

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name Password -Value {
            $this._password
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._password = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PasswordResetRequired -Value {
            $this._passwordResetRequired
        } -SecondValue {
            param([ValidateType(([bool], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._passwordResetRequired = $value
        }
    }

    IAMUserLoginProfile() : base() {}
    IAMUserLoginProfile([IDictionary] $props) : base($props) {}
    IAMUserLoginProfile([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMUserPolicy'"

class IAMUserPolicy : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSIAMUserPolicy'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html'

    hidden [VSJson] $_policyDocument
    hidden [object] $_policyName

    [VSJson] $PolicyDocument
    [string] $PolicyName

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name PolicyDocument -Value {
            $this._policyDocument
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this._policyDocument = [VSJson]::Transform($value)
            Write-Debug $this._policyDocument
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PolicyName -Value {
            $this._policyName
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._policyName = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    IAMUserPolicy() : base() {}
    IAMUserPolicy([IDictionary] $props) : base($props) {}
    IAMUserPolicy([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMGroupPolicy'"

class IAMGroupPolicy : VSResourceProperty {
    hidden [string] $_vsFunctionName = 'Add-VSIAMGroupPolicy'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-policy.html'

    hidden [VSJson] $_policyDocument
    hidden [object] $_policyName

    [VSJson] $PolicyDocument
    [string] $PolicyName

    hidden [void] _addAccessors() {
        $this | Add-Member -Force -MemberType ScriptProperty -Name PolicyDocument -Value {
            $this._policyDocument
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this._policyDocument = [VSJson]::Transform($value)
            Write-Debug $this._policyDocument
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PolicyName -Value {
            $this._policyName
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this._policyName = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
    }

    IAMGroupPolicy() : base() {}
    IAMGroupPolicy([IDictionary] $props) : base($props) {}
    IAMGroupPolicy([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMGroup'"

class IAMGroup : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSIAMGroup'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html'

    hidden [string[]] $_attributes = @('Arn')
    hidden [object] $_condition

    [string] $Type = 'AWS::IAM::Group'
    [string] $GroupName
    [string[]] $ManagedPolicyArns
    [string] $Path
    [IAMGroupPolicy[]] $Policies
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name GroupName -Value {
            $this.Properties['GroupName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['GroupName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ManagedPolicyArns -Value {
            $this.Properties['ManagedPolicyArns']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['ManagedPolicyArns'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Path -Value {
            $this.Properties['Path']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Path'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Policies -Value {
            $this.Properties['Policies']
        } -SecondValue {
            param([ValidateType(([IAMGroupPolicy], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Policies'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    IAMGroup() : base() {}
    IAMGroup([IDictionary] $props) : base($props) {}
    IAMGroup([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMPolicy'"

class IAMPolicy : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSIAMPolicy'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html'

    hidden [object] $_condition

    [string] $Type = 'AWS::IAM::Policy'
    [string[]] $Groups
    [VSJson] $PolicyDocument
    [string] $PolicyName
    [string[]] $Roles
    [string[]] $Users
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name Groups -Value {
            $this.Properties['Groups']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Groups'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PolicyDocument -Value {
            $this.Properties['PolicyDocument']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['PolicyDocument'] = [VSJson]::Transform($value)
            Write-Debug $this.Properties['PolicyDocument']
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PolicyName -Value {
            $this.Properties['PolicyName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['PolicyName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Roles -Value {
            $this.Properties['Roles']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Roles'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Users -Value {
            $this.Properties['Users']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Users'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    IAMPolicy() : base() {}
    IAMPolicy([IDictionary] $props) : base($props) {}
    IAMPolicy([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMServiceLinkedRole'"

class IAMServiceLinkedRole : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSIAMServiceLinkedRole'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-servicelinkedrole.html'

    hidden [object] $_condition

    [string] $Type = 'AWS::IAM::ServiceLinkedRole'
    [string] $CustomSuffix
    [string] $Description
    [string] $AWSServiceName
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name CustomSuffix -Value {
            $this.Properties['CustomSuffix']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CustomSuffix'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Description -Value {
            $this.Properties['Description']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Description'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name AWSServiceName -Value {
            $this.Properties['AWSServiceName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['AWSServiceName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    IAMServiceLinkedRole() : base() {}
    IAMServiceLinkedRole([IDictionary] $props) : base($props) {}
    IAMServiceLinkedRole([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMAccessKey'"

class IAMAccessKey : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSIAMAccessKey'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-accesskey.html'

    hidden [string[]] $_attributes = @('SecretAccessKey')
    hidden [object] $_condition

    [string] $Type = 'AWS::IAM::AccessKey'
    [int] $Serial
    [string] $Status
    [string] $UserName
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name Serial -Value {
            $this.Properties['Serial']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Serial'] = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Status -Value {
            $this.Properties['Status']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Status'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name UserName -Value {
            $this.Properties['UserName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['UserName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    IAMAccessKey() : base() {}
    IAMAccessKey([IDictionary] $props) : base($props) {}
    IAMAccessKey([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMUser'"

class IAMUser : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSIAMUser'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-user.html'

    hidden [string[]] $_attributes = @('Arn')
    hidden [object] $_condition

    [string] $Type = 'AWS::IAM::User'
    [string[]] $Groups
    [IAMUserLoginProfile] $LoginProfile
    [string[]] $ManagedPolicyArns
    [string] $Path
    [string] $PermissionsBoundary
    [IAMUserPolicy[]] $Policies
    [VSTag[]] $Tags
    [string] $UserName
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name Groups -Value {
            $this.Properties['Groups']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Groups'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name LoginProfile -Value {
            $this.Properties['LoginProfile']
        } -SecondValue {
            param([ValidateType(([IAMUserLoginProfile], [string], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['LoginProfile'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ManagedPolicyArns -Value {
            $this.Properties['ManagedPolicyArns']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['ManagedPolicyArns'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Path -Value {
            $this.Properties['Path']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Path'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PermissionsBoundary -Value {
            $this.Properties['PermissionsBoundary']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['PermissionsBoundary'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Policies -Value {
            $this.Properties['Policies']
        } -SecondValue {
            param([ValidateType(([IAMUserPolicy], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Policies'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name UserName -Value {
            $this.Properties['UserName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['UserName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    IAMUser() : base() {}
    IAMUser([IDictionary] $props) : base($props) {}
    IAMUser([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMOIDCProvider'"

class IAMOIDCProvider : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSIAMOIDCProvider'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-oidcprovider.html'

    hidden [string[]] $_attributes = @('Arn')
    hidden [object] $_condition

    [string] $Type = 'AWS::IAM::OIDCProvider'
    [string[]] $ClientIdList
    [string] $Url
    [string[]] $ThumbprintList
    [VSTag[]] $Tags
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name ClientIdList -Value {
            $this.Properties['ClientIdList']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['ClientIdList'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Url -Value {
            $this.Properties['Url']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Url'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ThumbprintList -Value {
            $this.Properties['ThumbprintList']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['ThumbprintList'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    IAMOIDCProvider() : base() {}
    IAMOIDCProvider([IDictionary] $props) : base($props) {}
    IAMOIDCProvider([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMVirtualMFADevice'"

class IAMVirtualMFADevice : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSIAMVirtualMFADevice'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-virtualmfadevice.html'

    hidden [string[]] $_attributes = @('SerialNumber')
    hidden [object] $_condition

    [string] $Type = 'AWS::IAM::VirtualMFADevice'
    [string] $VirtualMfaDeviceName
    [string] $Path
    [string[]] $Users
    [VSTag[]] $Tags
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name VirtualMfaDeviceName -Value {
            $this.Properties['VirtualMfaDeviceName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['VirtualMfaDeviceName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Path -Value {
            $this.Properties['Path']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Path'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Users -Value {
            $this.Properties['Users']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Users'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    IAMVirtualMFADevice() : base() {}
    IAMVirtualMFADevice([IDictionary] $props) : base($props) {}
    IAMVirtualMFADevice([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMRole'"

class IAMRole : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSIAMRole'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html'

    hidden [string[]] $_attributes = @('Arn','RoleId')
    hidden [object] $_condition

    [string] $Type = 'AWS::IAM::Role'
    [VSJson] $AssumeRolePolicyDocument
    [string] $Description
    [string[]] $ManagedPolicyArns
    [int] $MaxSessionDuration
    [string] $Path
    [string] $PermissionsBoundary
    [IAMRolePolicy[]] $Policies
    [string] $RoleName
    [VSTag[]] $Tags
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name AssumeRolePolicyDocument -Value {
            $this.Properties['AssumeRolePolicyDocument']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['AssumeRolePolicyDocument'] = [VSJson]::Transform($value)
            Write-Debug $this.Properties['AssumeRolePolicyDocument']
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Description -Value {
            $this.Properties['Description']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Description'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ManagedPolicyArns -Value {
            $this.Properties['ManagedPolicyArns']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['ManagedPolicyArns'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name MaxSessionDuration -Value {
            $this.Properties['MaxSessionDuration']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['MaxSessionDuration'] = if ($cast = $value -as [int]) {
                $cast
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Path -Value {
            $this.Properties['Path']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Path'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PermissionsBoundary -Value {
            $this.Properties['PermissionsBoundary']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['PermissionsBoundary'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Policies -Value {
            $this.Properties['Policies']
        } -SecondValue {
            param([ValidateType(([IAMRolePolicy], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Policies'] = $value
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name RoleName -Value {
            $this.Properties['RoleName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['RoleName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    IAMRole() : base() {}
    IAMRole([IDictionary] $props) : base($props) {}
    IAMRole([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMSAMLProvider'"

class IAMSAMLProvider : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSIAMSAMLProvider'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-samlprovider.html'

    hidden [string[]] $_attributes = @('Arn')
    hidden [object] $_condition

    [string] $Type = 'AWS::IAM::SAMLProvider'
    [string] $Name
    [string] $SamlMetadataDocument
    [VSTag[]] $Tags
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name Name -Value {
            $this.Properties['Name']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Name'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name SamlMetadataDocument -Value {
            $this.Properties['SamlMetadataDocument']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['SamlMetadataDocument'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    IAMSAMLProvider() : base() {}
    IAMSAMLProvider([IDictionary] $props) : base($props) {}
    IAMSAMLProvider([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMUserToGroupAddition'"

class IAMUserToGroupAddition : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSIAMUserToGroupAddition'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-addusertogroup.html'

    hidden [object] $_condition

    [string] $Type = 'AWS::IAM::UserToGroupAddition'
    [string] $GroupName
    [string[]] $Users
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name GroupName -Value {
            $this.Properties['GroupName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['GroupName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Users -Value {
            $this.Properties['Users']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Users'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    IAMUserToGroupAddition() : base() {}
    IAMUserToGroupAddition([IDictionary] $props) : base($props) {}
    IAMUserToGroupAddition([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMInstanceProfile'"

class IAMInstanceProfile : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSIAMInstanceProfile'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html'

    hidden [string[]] $_attributes = @('Arn')
    hidden [object] $_condition

    [string] $Type = 'AWS::IAM::InstanceProfile'
    [string] $InstanceProfileName
    [string] $Path
    [string[]] $Roles
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name InstanceProfileName -Value {
            $this.Properties['InstanceProfileName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['InstanceProfileName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Path -Value {
            $this.Properties['Path']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Path'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Roles -Value {
            $this.Properties['Roles']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Roles'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    IAMInstanceProfile() : base() {}
    IAMInstanceProfile([IDictionary] $props) : base($props) {}
    IAMInstanceProfile([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMManagedPolicy'"

class IAMManagedPolicy : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSIAMManagedPolicy'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-managedpolicy.html'

    hidden [object] $_condition

    [string] $Type = 'AWS::IAM::ManagedPolicy'
    [string] $Description
    [string[]] $Groups
    [string] $ManagedPolicyName
    [string] $Path
    [VSJson] $PolicyDocument
    [string[]] $Roles
    [string[]] $Users
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name Description -Value {
            $this.Properties['Description']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Description'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Groups -Value {
            $this.Properties['Groups']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Groups'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ManagedPolicyName -Value {
            $this.Properties['ManagedPolicyName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['ManagedPolicyName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Path -Value {
            $this.Properties['Path']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Path'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PolicyDocument -Value {
            $this.Properties['PolicyDocument']
        } -SecondValue {
            param([ValidateType(([string], [VSJson], [VSYaml], [psobject], [IDictionary]))][object] $value)
            $this.Properties['PolicyDocument'] = [VSJson]::Transform($value)
            Write-Debug $this.Properties['PolicyDocument']
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Roles -Value {
            $this.Properties['Roles']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Roles'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Users -Value {
            $this.Properties['Users']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object[]] $value)
            $this.Properties['Users'] = @($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    IAMManagedPolicy() : base() {}
    IAMManagedPolicy([IDictionary] $props) : base($props) {}
    IAMManagedPolicy([psobject] $props) : base($props) {}
}

Write-Verbose "Importing class 'IAMServerCertificate'"

class IAMServerCertificate : VSResource {
    hidden [string] $_vsFunctionName = 'New-VSIAMServerCertificate'
    hidden [string] $_awsDocumentation = 'http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-servercertificate.html'

    hidden [string[]] $_attributes = @('Arn')
    hidden [object] $_condition

    [string] $Type = 'AWS::IAM::ServerCertificate'
    [string] $CertificateBody
    [string] $CertificateChain
    [string] $ServerCertificateName
    [string] $Path
    [string] $PrivateKey
    [VSTag[]] $Tags
    [VSJson] $Metadata
    [UpdatePolicy] $UpdatePolicy
    [string] $Condition

    hidden [void] _addAccessors() {
        $this._addBaseAccessors()
        $this | Add-Member -Force -MemberType ScriptProperty -Name CertificateBody -Value {
            $this.Properties['CertificateBody']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CertificateBody'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name CertificateChain -Value {
            $this.Properties['CertificateChain']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['CertificateChain'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name ServerCertificateName -Value {
            $this.Properties['ServerCertificateName']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['ServerCertificateName'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Path -Value {
            $this.Properties['Path']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['Path'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name PrivateKey -Value {
            $this.Properties['PrivateKey']
        } -SecondValue {
            param([ValidateType(([string], [int], [IntrinsicFunction], [ConditionFunction]))] [object] $value)
            $this.Properties['PrivateKey'] = if ($value -is [int]) {
                $value.ToString()
            }
            else {
                $value
            }
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Tags -Value {
            $this.Properties['Tags']
        } -SecondValue {
            param([TransformTag()] [ValidateType(([IDictionary], [psobject], [VSTag]))] [object] $value)
            $this.Properties['Tags'] = [VSTag]::TransformTag($value)
        }
        $this | Add-Member -Force -MemberType ScriptProperty -Name Condition -Value {
            $this._condition
        } -SecondValue {
            param(
                [ValidateType(([string], [IntrinsicFunction], [ConditionFunction]))] [object]
                $value
            )
            $this._condition = $value
        }
    }

    IAMServerCertificate() : base() {}
    IAMServerCertificate([IDictionary] $props) : base($props) {}
    IAMServerCertificate([psobject] $props) : base($props) {}
}