jueves, 3 de diciembre de 2015

Como cerrar sesiones windows en equipo remotos

Hace algunos días tuve el requerimiento de cerrar sesiones de usuario en algunos equipos Windows de la empresa. Por supuesto como buen administrador no hiba a ir equipo por equipo a cerrarlas asi que hice uso de unos cuantos comandos para realizar esta tarea de manera remota haciendo uso psexec incluida en la suite de pstools.  https://technet.microsoft.com/en-us/sysinternals/pstools.aspx


Procedimiento


1.- Ver las sesiones en el equipo remoto 

C:\PSTools>psexec \\user-pc c:\windows\system32\quser.exe

Mostrara algo como lo siguiente:




2.- Utilizando psexec abrimos un cmd en el eqipo remoto

C:\PSTools>psexec \\user-pc c:\windows\system32\cmd.exe


3.- Cerrar la sesion


C:\Windows\system32>logoff /SERVER:user-pc 1 /v

1 representa el valor sessionid






Donde

sessionname                   The name of the session.
sessionid                   The ID of the session.
/SERVER:servername  Specifies the Terminal server containing the user session to log off (default                                           is current).
/V                                     Displays information about the actions performed.

miércoles, 2 de diciembre de 2015

Listar los perfiles de usuario existentes en un equipo Windows usando Power Shell

En la siguiente entrada veremos el uso de un script para obtener la lista de los perfiles de usuario existentes en un equipo Windows.

El siguiente código lo encontré en la web https://4sysops.com/archives/remotely-query-user-profile-information-with-powershell/  a quien doy el crédito pues me fue de gran ayuda para la obtención de los resultados que en el momento de su uso necesitaba.

Usted necesita guardar el siguiente código como un archivo .ps1



[cmdletbinding()]
param (
[parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
[string[]]$ComputerName = $env:computername
)
foreach ($Computer in $ComputerName) {
 $Profiles = Get-WmiObject -Class Win32_UserProfile -Computer $Computer -ea 0
 foreach ($profile in $profiles) {
  try {
 $objSID = New-Object System.Security.Principal.SecurityIdentifier($profile.sid)
 $objuser = $objsid.Translate([System.Security.Principal.NTAccount])
 $objusername = $objuser.value
  } catch {
$objusername = $profile.sid
  }
  switch($profile.status){
   1 { $profileType="Temporary" }
   2 { $profileType="Roaming" }
   4 { $profileType="Mandatory" }
   8 { $profileType="Corrupted" }
   default { $profileType = "LOCAL" }
  }
  $User = $objUser.Value
  $ProfileLastUseTime = ([WMI]"").Converttodatetime($profile.lastusetime)
  $OutputObj = New-Object -TypeName PSobject
  $OutputObj | Add-Member -MemberType NoteProperty -Name ComputerName -Value $Computer.toUpper()
  $OutputObj | Add-Member -MemberType NoteProperty -Name ProfileName -Value $objusername
  $OutputObj | Add-Member -MemberType NoteProperty -Name ProfilePath -Value $profile.localpath
  $OutputObj | Add-Member -MemberType NoteProperty -Name ProfileType -Value $ProfileType
  $OutputObj | Add-Member -MemberType NoteProperty -Name IsinUse -Value $profile.loaded
  $OutputObj | Add-Member -MemberType NoteProperty -Name IsSystemAccount -Value $profile.special
  $OutputObj
 }
}


Ejemplos de su uso



Obtención de los perfiles de usuario en un equipo local

.\Get-WindowsProfiles.ps1


Obtención de los perfiles de usuario en un equipo remoto

.\Get-WindowsProfiles.ps1 -ComputerName SRVTIB1


Obtención de los perfiles de usuario en una lista de equipos definidos en un archivo .txt utilizando get-content

.\Get-WindowsProfiles.ps1 -ComputerName (get-content c:\temp\servers.txt)



El resultado seria el siguiente.