lunes, 20 de junio de 2016

Saber el ultimo inicio de sesión de un buzón en Exchange Server 2013


En ocaciones es necesario saber  cuales son los buzones que no han sido utilizados por algún tiempo, esto nos permite definir si podemos borrarlos o inhabilitarlos según sea el caso.

Esto lo podemos realizar a través del Exchange Management Shell en una sola linea mediante el siguiente comando:



  • Get-Mailbox –Resultsize Unlimited | Get-MailboxStatistics | Sort LastLogonTime | select Displayname, lastlogontime

Existe una Variante de este comando para realizar nuestra busqueda sobre una base de datos especifica, ya que es muy común que en nuestro entorno tengamos mas de una base de datos.

Lo primero que debemos hacer es saber el nombre de la base de datos sobre la cual queremos obtener el reporte para tal efecto ejecutamos el siguiente comando

  • Get-MailboxDatabase





Una vez que conocemos el nombre de la base de datos, corremos el siguiente comando en donde definimos la base de datos en donde se realizara la búsqueda.

  • Get-Mailbox –Resultsize Unlimited –Database dbname | Get-MailboxStatistics | Sort LastLogonTime | select Displayname, lastlogontime


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.









viernes, 13 de septiembre de 2013

Filtro WMI para GPO aplicable a un equipo‏

Buen día.

El día de hoy me pidieron apoyo para realizar un GPO que aplicara solo a un equipo en particular dentro de una OU que contenía un gran numero de maquinas. Una opción a considerar fue mover ese equipo a otra OU y vinculara a la GPO que se realizaria, sin embargo esta opción se descarto casi en seguida debido a que ya existían otras GPO de seguridad aplicadas sobre la OU donde se encontraba el equipo y al momento de mover la maquina dejarían  de aplicarle.

La solución fue la creación de un filtro WMI asociado al GPO que se crearía el cual solo aplicaría a una determinada maquina.

Para lograr lo anterior utilice la siguiente consulta definida en el filtro WMI vinculándolo al GPO

SELECT * FROM  Win32_ComputerSystem Where Name = "NameComputer"

Después de ejecutar un gpupdate /force sobre el DC y sobre el equipo al cual aplicaría el GPO 
Ejecute un gpresult /r /scope Computer y el resultado  fue la correcta aplicación del GPO solo al equipo que interesaba.




miércoles, 11 de septiembre de 2013

Obtener las cuentas de servicio y de usuario que inician un servicio en Windows Server 2008

El día de hoy requerí ver los servicios que se estaban ejecutando en un servidor, esto con la finalidad de determinar cuales eran los servicios que estaban iniciándose con una cuenta administrativa en lugar de una cuenta de servicios, esto debido a que al iniciar servicios con una cuenta administrativa puede representar un riesgo a la seguridad debido a que muchos de los servicios no requieren privilegios administrativos para iniciarse. Así que con unos simples pero efectivos comandos de PowerShell logre mi propósito.

Como primer paso obtuve una lista de los servicios con el comando

Get-Service



El comando anterior muestra la información de todos los servicios pero no de las cuentas que inician el servicio.
Para obtener esta información es necesario utilizar un cmdlet para el objeto WMI.

El comando utilizado fue el siguiente:

Get-WmiObject win32_service | format-list *

El resultado después de la ejecución de este comando me mostró todas las propiedades de los servicios incluyendo la información que me interesaba específicamente el atributo startName


El resultado era lo que buscaba sin embargo debido a que existía un numero grande de servicios en el equipo me mostró una lista muy grande de información por lo que realice un filtro con la información que me interesaba en ese momento y dicha información la exporte a un archivo .txt lo que facilitara su lectura.

Para lo anterior utilice el comando:

Get-WmiObject win32_service | select name, StartName >C:\infoservices.txt

El resultado sera un archivo .txt en la unidad C: con información de los servicios indicando el nombre del servicio y la cuenta que inicia el servicio en cuestión.