Private/Write-LocalUsers.ps1

function Write-LocalUsers {
    param (
        [parameter(Mandatory)][ValidateNotNullOrEmpty()][string] $Filename,
        [parameter(Mandatory)][ValidateNotNullOrEmpty()][string] $TableName,
        [parameter(Mandatory)][string] $SiteCode,
        [parameter(Mandatory)][ValidateNotNullOrEmpty()][string] $ServerName,
        [parameter()][string] $LogFile,
        [parameter()][bool] $ContinueOnError
    )
    Write-Log -Message "(Write-LocalGroups)" -LogFile $logfile
    Write-Log -Message "filename... $filename" -LogFile $LogFile
    Write-Log -Message "server..... $ServerName" -LogFile $LogFile
    $ServerShortName = ($ServerName -split '\.')[0]
    try {
        $users = @(Get-CimInstance -ClassName "Win32_UserAccount" -ComputerName $ServerName -Filter "Domain='$ServerShortName'" -ErrorAction Stop | 
            Select-Object Name,FullName,Description,AccountType,AccountExpires,PasswordChangeable,PasswordRequired,SID,LockOut |
                Sort-Object Name)
    } catch {
        Write-Log -Category 'Error' -Message 'cannot connect to $ServerName to enumerate local security groups'
        return
    }
    if ($null -eq $users) { return }
    $Fields = @('Name','FullName','Description','AccountType','AccountExpires','PasswordChangeable','PasswordRequired','SID','LockOut')
    $userDetails = New-CmDataTable -TableName $tableName -Fields $Fields
    foreach ($user in $users) {
        $row = $userDetails.NewRow()
        $row.Name        = $user.Name
        $row.FullName    = $user.FullName
        $row.Description = $user.Description
        $row.AccountType = $user.AccountType
        $row.AccountExpires = $user.AccountExpires
        $row.PasswordChangeable = $user.PasswordChangeable
        $row.PasswordRequired   = $user.PasswordRequired
        $row.SID = $user.SID
        $row.LockOut = $user.LockOut
        $userDetails.Rows.Add($row)
    }
    Write-Log -Message "enumerated $($users.Count) users" -LogFile $LogFile
    , $userDetails | Export-CliXml -Path ($filename)
}