ExportedFunctions/Set-AnsibleUser.ps1

Function Set-AnsibleUser
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage('PSAvoidUsingUserNameAndPassWordParams', '')]
    [System.Diagnostics.CodeAnalysis.SuppressMessage('PSAvoidUsingPlainTextForPassword', '')]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidGlobalVars", "Global:DefaultAnsibleTower")]
    [CmdletBinding(SupportsShouldProcess=$true)]
    Param (
        [Parameter(ValueFromPipelineByPropertyName=$true,Mandatory=$true,ParameterSetName="ById")]
        [int32]$Id,

        [Parameter(ValueFromPipeline=$true,Mandatory=$true,ParameterSetName="ByObject")]
        [AnsibleTower.User]$User,

        $UserName,

        $FirstName,

        $LastName,

        $Email,

        [bool]$SuperUser,

        $Password,

        [Parameter(ParameterSetName="ById")]
        $AnsibleTower = $Global:DefaultAnsibleTower
    )
    process {
        if($Id) {
            $ThisUser = Get-AnsibleUser -Id $Id -AnsibleTower $AnsibleTower
        } else {
            $AnsibleTower = $User.AnsibleTower
            # Get a new instance to avoid modifing the passed in user object
            $ThisUser = Get-AnsibleUser -Id $User.Id -AnsibleTower $AnsibleTower
        }

        if ($UserName) {$ThisUser.username = $UserName}
        if ($FirstName) {$ThisUser.first_name = $FirstName}
        if ($LastName) {$ThisUser.last_name = $LastName}
        if ($Email) {$ThisUser.email = $Email}
        if ($SuperUser) {$ThisUser.is_superuser = $SuperUser}
        if ($Password) {$ThisUser.password = $Password}

        if($PSCmdlet.ShouldProcess($AnsibleTower, "Update user $($ThisUser.Username)")) {
            $result = Invoke-PutAnsibleInternalJsonResult -ItemType "users" -InputObject $ThisUser
            if ($result)
            {
                $JsonString = $Result | ConvertTo-Json
                $AnsibleObject = $JsonParsers.ParseToUser($JsonString)
                $AnsibleObject.AnsibleTower = $AnsibleTower
                Write-Output $AnsibleObject
            }
        }
    }
}