Deslogear varios usuarios con powershell


Si necesitamos deslogear a todos los usuarios de una máquina remota, ya sea por inactividad, ya sea para aplicar cambios en sus perfiles o para instalar nuevo software, podemos ejecutar el siguiente script:


<#PSScriptInfo .VERSION 1.0 .GUID 947c787b-1e06-4937-8022-1d3d39f267b0 .AUTHOR Adam Bertram .COMPANYNAME Adam the Automator, LLC .COPYRIGHT  .TAGS  .LICENSEURI  .PROJECTURI  .ICONURI  .EXTERNALMODULEDEPENDENCIES  .REQUIREDSCRIPTS  .EXTERNALSCRIPTDEPENDENCIES  .RELEASENOTES .PRIVATEDATA  #>

<#  .DESCRIPTION   A simple script to remotely log off users from one or more remote computers.  #>

[OutputType(‘void’)]
[CmdletBinding(SupportsShouldProcess)]
param
(
[Parameter()]
[ValidateNotNullOrEmpty()]
[string[]]$ComputerName,

[Parameter()]
[ValidateNotNullOrEmpty()]
[string]$UserName
)

$ErrorActionPreference = ‘Stop’

if (-not $PSBoundParameters.ContainsKey(‘ComputerName’)) {
$ComputerName = ‘localhost’
}

foreach ($c in $ComputerName) {
## Find the user’s session ID
$compArgs = $null
if ($PSBoundParameters.ContainsKey(‘ComputerName’)) {
$compArgs = “/server:$c”
}
$whereFilter = { ‘*’ }
if ($PSBoundParameters.ContainsKey(‘UserName’)) {
$whereFilter = [scriptblock]::Create(“`$_ -match ‘$UserName'”)
}
if ($sessions = ((quser $compArgs | Where-Object $whereFilter))) {
$sessionIds = ($sessions -split ‘ +’)[2]
if ($PSCmdlet.ShouldProcess(“UserName: $UserName”, ‘Logoff’)) {
$sessionIds | ForEach-Object {
logoff $_ $compArgs
}
}
} else {
Write-Verbose -Message ‘No users found matching criteria found.’
}
}

 

Que guardaremos como “Invoke-UserLogoff.ps1” , y en la ubicación recomendada “C:\Program Files\WindowsPowerShell\Scripts\Invoke-UserLogoff.ps1”

Para ejecutarlo en varias máquinas simultáneamente :


Invoke-UserLogoff.ps1 -ComputerName ip_cliente1, ip_cliente2, ip_cliente3, ip_cliente4

Si tenemos las direcciones ip de los equipos en un fichero :

$computers = Get-Content -Path C:\ip_clientes.txt

C:\Invoke-UserLogoff.ps1 -ComputerName $computers

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*