Public/Remove-LoggedOnUsers.ps1

function Remove-LoggedOnUsers
{
    <#
        .EXTERNALHELP HelperFunctions.psm1-Help.xml
    #>


    [CmdletBinding(DefaultParameterSetName = 'ComputerParameterSet',
                ConfirmImpact = 'Medium',
                SupportsShouldProcess = $true)]
    param
    (
        [Parameter(ParameterSetName = 'ComputerParameterSet',
                 Mandatory = $true,
                 HelpMessage = 'Type the fully qualified domain name of the computer.')]
        [Alias('CN', 'Computer', 'ServerName', 'Server', 'IP')]
        [string[]]$ComputerName,
        [Parameter(ParameterSetName = 'ComputerParameterSet',
                 Mandatory = $true,
                 HelpMessage = 'Add the credential object or use (Get-Credential)')]
        [pscredential]$Credential,
        [Parameter(ParameterSetName = 'SessionParameterSet',
                 Mandatory = $true,
                 HelpMessage = 'Include PSSession variable.')]
        [System.Management.Automation.Runspaces.PSSession]$RemoteSession
    )

    switch ($PSCmdlet.ParameterSetName)
    {
        "ComputerParameterSet" {
            if ($PSBoundParameters.ContainsKey('ComputerName') -and ($null -ne $PSBoundParameters["ComputerName"]) -and ($PSBoundParameters["ComputerName"].Count -gt 1))
            {
                $ComputerName = $ComputerName -split (",")
            }
            elseif ($PSBoundParameters.ContainsKey('ComputerName') -and ($null -ne $PSBoundParameters["ComputerName"]) -and ($PSBoundParameters["ComputerName"].Count -eq 1))
            {
                $ComputerName = $PSBoundParameters["ComputerName"]
            }
            else
            {
                $ComputerName = [System.Net.Dns]::GetHostByName("LocalHost").HostName
            }

            foreach ($Computer in $ComputerName)
            {
                if ($pscmdlet.ShouldProcess($Computer))
                {
                    $userinit = Invoke-Command -ComputerName $Computer -Credential $Credential -ScriptBlock { ((quser /server $using:Computer) -replace '\s{2,}', ',' | ConvertFrom-Csv) }
                    $loggedonusers = @()
                    foreach ($session in $userinit)
                    {
                        $loggedonusers += $Session.UserName
                        $ID = $session.ID
                        if ($loggedonusers.Count -ge 1)
                        {
                            $loggedonusers.foreach({
                                $user = $_
                                Invoke-Command -ComputerName $Computer -Credential $Credential -ScriptBlock {
                                    logoff.exe $using:ID /server $using:Computer $using:user /V
                                }
                            })
                        }
                    }
                }
            }
        }
        "SessionParameterSet" {
            if ($pscmdlet.ShouldProcess($RemoteSession))
            {
                $Server = $RemoteSession.ComputerName
                $userinit = Invoke-Command -Session $RemoteSession -ScriptBlock {((quser /server $using:Server) -replace '\s{2,}', ',' | ConvertFrom-Csv) }

                $loggedonusers = @()
                foreach ($session in $userinit)
                {
                    $loggedonusers += $Session.UserName
                    $ID = $session.ID
                    if ($loggedonusers.Count -ge 1)
                    {
                        $loggedonusers.foreach({
                                $user = $_
                                Invoke-Command -Session $RemoteSession -ScriptBlock {
                                    logoff.exe $using:ID /server $using:Server $using:user /V
                                }
                            })
                    }
                }
            }
        }
    }
} #end Remove-LoggedOnUsers