quinta-feira, 22 de dezembro de 2011

Additional Account Info: LastLogonTimeStamp

LastLogon
Quem administra um ambiente de milhares de usuários e vários DCs, sabe qual a dificuldade de obter a informação de qual foi o último logon de um usuário. A necessidade de obter essa informação pode variar, desde a verificação se um usuário está ativo no ambiente, se há um grupo de contas inativas que por acaso estão "sujando" o ambiente, auditorias e etc.
A propriedade LastLogon encontrada nos objetos de usuários armazena exatamente qual foi a data e hora do último logon do usuário no domínio, mas essa informação não é replicadas entre os DCs . Para saber exatamente qual foi o último logon de um usuário ou de um grupo de usuários é preciso varrer todos os DCs e fazer um mapeamento dos valores e verificar qual o último logon mais atual. Se você trabalha com um número pequeno de usuários e principalmente de DCs esse trabalho não é tão complicado assim, já que a análise dessa informação traz uma informação mais apurada da data e hora de login, mas se o ambiente administrado é realmente grande você terá um tarefa realmente desgastante. Desenvolver ferramentas para executar essa verificação não é difícil, e principalmente facilita a verificação das datas de último login entre os servidores. Mas a execução desse script em ambientes grandes, onde os DCs estão separados geograficamente, onde os links não funcionam do jeito desejado, pode acarretar em retornar informação imprecisas. Por exemplo, você executa um script que verifica a propriedade LastLogon em de mais de 20000 usuários e em mais de 50 DCs distribuídos geograficamente pelo país, esse script tem que verificar cada objeto e analisar se o último login do usuário no DC anterior é mais atual ou não do que no atual DC de verificação. Se por acaso um dos links ou algum DCs não se encontra disponível no momento da execução, você provavelmente não terá informações precisas do último login dos usuários. Com isso terá que repetir a operação até que todos os DCs realmente sejam verificados.

Last-Logon-TimeStamp
Quando você está nessa situação, onde precisa verificar qual foi o último login dos usuários do seu ambiente, e provavelmente não tem muito tempo ou recursos para obter essa informação , o que utilizar para facilitar? A propriedade Last-Logon-TimeStamp armazena a data e hora do último logon do usuário, mas diferente do LastLogon , o valor dessa propriedade é replicada entres os DCs , mas só com um detalhe importante. O valor somente é atualizado a cada 14 dias, para evitar a sobrecarga de replicação, já que o usuário pode se autenticar inúmeras vezes durante o dia o que geraria muita informação para replicar entre os servidores. Se o que você precisa é um relatório de dias de último logon de todos os usuários ou verificar se uma conta ainda está ativa, essa propriedade pode ajudar em muito.
Uma das formas de verificar o valor dessa propriedade é fazendo o download do ALTOOLS da Microsoft.
Registrando o arquivo acctinfo.dll irá habilitar uma aba a mais no Active Directory Users and Computers chamada Addtional Account Info. Nessa aba é possível verificar algumas informações que antes não apareciam na console, inclusive o valor da propriedade Last-Logon-Timestamp.



É possível encontrar na Internet inúmeros exemplos de scripts com a finalidade de emitir o relatório no ambiente. Quando for retornar o valor do campo, ele não aparecerá com o formato de data convencional, já que o valor gravado lá representa o numero de nanosegundos passados desde as 0:00 de 01/01/1601. Dessa forma quando for emitir o relatório via script deve ser feito a conversão desse valor para o formato de data convencional. Outro detalhe que após a conversão a data de último login for semelhante a 01/01/1601 isso índia que essa conta nunca se autenticou no domínio. Segue abaixo um exemplo de como converter esse valor.
Fonte: http://www.microsoft.com/technet/scriptcenter/topics/win2003/lastlogon.mspx.

Set objUser = GetObject("LDAP://cn=Ken Myer, ou=Finance, dc=fabrikam, dc=com") Set objLastLogon = objUser.Get("lastLogonTimestamp") intLastLogonTime = objLastLogon.HighPart * (2^32) + objLastLogon.LowPart  intLastLogonTime = intLastLogonTime / (60 * 10000000) intLastLogonTime = intLastLogonTime / 1440 Wscript.Echo "Last logon time: " & intLastLogonTime + #1/1/1601# 

Um bom exemplo do uso dessa propriedade é criar um script que efetua o bloqueio automático de contas inativas do ambiente conforme a quantidade de dias de último logon. Normalmente é aconselhável o bloqueio de contas inativas que não se autenticam a mais de 90 dias, mas isso depende de como está definida a política de segurança da sua empresa. Um cuidado importante é criar uma forma de tratar exceções , no caso, de contas que não podem ser bloqueadas por algum motivo. Uma das formas é sempre manter o ambiente organizado em OU"s que facilitam a identificação de tipos de contas ( usuários comuns, administradores, contas genéricas).

O objetivo aqui não é fornecer um script completo, mas deixar aberto para a criatividade e a necessidade de cada um. Para quem não tem experiência no desenvolvimento de scripts, procurem as publicações disponíveis. Uma grande ajuda para iniciar é o Script Repository no site da TechNet (http://www.microsoft.com/technet/scriptcenter/default.mspx), que é um ótimo repositório de exemplos o que é ótimo para começar a praticar. Lembrem-se que todo script deve ser testado em um ambiente de testes para que não ocorram surpresas desagradáveis.

Abraçasso!

quinta-feira, 3 de novembro de 2011

Como criar um Pendrive Bootável do Windows 7

Abra um prompt de comando (execute "cmd"), e faça os passos abaixo:
1. Diskpart(será aberta uma nova janela, espero o cursor aparecer)
2. List Disks
3. Select Disk 1(troque 1 pelo número referente ao pendrive)
4. Clean
5. Create Partition Primary
6. Active
7. Format fs=fat32 quick
8. Assign
9. Exit
Após terminar, copie todo conteúdo do CD de instalação, ou extraia a ISO para o Pendrive.

DS Commands

Localizar endereços smtp no AD
>dsquery * forestroot -scope subtree -filter "(&(mail=*)(proxyaddresses=smtp:*@mydomain.com))" -attr proxyaddresses

Localizar membros de grupo
>dsquery group -name dti_manut_atend_usu | dsget group -members

Users que não se logam nas ultimas 4 semanas
>dsquery user "ou=Sales,ou=West,dc=MyDomain,dc=com" -inactive 4

Users que não trocaram senha nos ultimos 30 dias
>dsquery user "ou=Sales,ou=West,dc=MyDomain,dc=com" -stalepwd 30

Listar data expiração logins
>dsquery user "ou=wireles_publico,dc=alergs,dc=br" | dsget user -samid -acctexpires

Alterar senha usuário
>dsquery user <filtro> | dsmod user -pwd <senha> -mustchpwd yes

Adicionar usuário a grupo
>dsmod group <grupo> -addmbr/rmmbr <user>
>dsquery user <ou> | dsmod group <grupo> -addmbr

Listar grupos do usuário
>dsget user <user> -memberof


>dsquery group "dc=tjmt,dc=gov,dc=br" -scope subtree -name %1 | dsget group -members | dsget user -samid -upn -fn -ln -desc > lista.txt

>dsquery user domainroot |dsget user -upn -disabled

>dsquery * -filter "(&(objectCategory=person)(objectClass=user)(mail=*))" -attr mail displayname

>dsquery computer -inactive 4  |dsrm

>dsquery user "ou=users,dc=alergs,dc=br" |dsmod user -pwdneverexpires yes

>msiexec /i esmvista /q

>forfiles -p "path" -d -21 -c "cmd /c del @path"

>findstr

Windows 2008 Server Core

Windows 2008

Configurando rede
>netsh interface ipv4 set address “LAN” static “IP” “MASK” “DG”
>netsh interdace ipv4 add dnsserver “LAN” “IP” index=2
>netdom renamecomputer “nome” /newname:”novonome”
>netdon join “computer” /domain:”dominio” /userd:”usuario” /passowrdd:”senha”
>netsh firewall set opmode disable
>netsh interface ip delete arpcache

>start /w slmgr.vbs -ipk ABCDE-FGHIJ-KLMNO-PQRST-UVWXY
>start /w slmgr.vbs -ato

Instalando IIS
>oclist
>start /w ossetup IIS-WebServerRole
>start /w ocsetup WAS-NetFxEnvironment
>start /w ocsetup IIS-ISAPIExtensions
>start /w ocsetup IIS-ISAPIFilter
>start /w ocsetup IIS-NetFxExtensibility
>start /w ocsetup IIS-ASPNET

>start /w ocsetup MicrosoftWindowsPowerShell
>\windows\system32\WindowsPowerShell\v1.0\powershell.exe
>import-module WebAdministration
>get-command –pssnapin WebAdministration

>start /w ocsetup IIS-ManagementService
>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WebManagement\Server /v EnableRemoteManagement /t REG_DWORD /d 1
>net start wmsvc

>Start /w ocsetup  NetFx2-ServerCore
>Start /w ocsetup ServerCore-WOW64
>Start /w ocsetup NetFx2-ServerCore-WOW64

Instalando WebDeploy
>msiexec /i <msi_filename> /passive ADDLOCAL=ALL LISTENURL=http://+:8080/MSDEPLOY2/
>net start msdepsvc

>msdeploy -verb:sync -source:metaKey=/lm/w3svc/site# -dest:auto,computername=SERVERNAME -enableLink:appPool

>msdeploy -verb:sync -source:metakey=lm/w3svc/1 -dest:metakey=lm/w3svc/1,computername=Server1 -whatif > msdeploysync.log

>msdeploy -verb:sync -source:metaKey=/lm/w3svc/43148251 -des:auto,computername=SERVER05D -enableLink:appPool -replace:objectname=metaproperty,scopeattributename=name,scopeAttributeValue=Path,targetAttributename=value,match=d:\\test.website.com,replace=e:\test.website.com



>start /w pkgmgr /iu:IIS-WebServerRole;WAS-WindowsActivationService;WAS-ProcessModel
>start /w pkgmgr /uu:IIS-WebServerRole;WAS-WindowsActivationService;WAS-ProcessModel


Show updates/Programs installed
>wmic qfe
>wmic product