Acompanhar os desktops corporativos [fechado]

4

Parte do meu trabalho é garantir que, para computadores em uma UO específica, o que está realmente em uso = o que está listado no AD = o que está listado no SCCM. Isso é para um ambiente com 250k PCs, mas eu me importo especificamente com 70k de um departamento. É muito fácil comparar o AD com o SCCM, mas é mais difícil controlar os computadores que realmente não existem. Estou tentando pensar em maneiras criativas de descobrir isso.

minha pergunta é: Seria uma boa maneira de encontrar máquinas inexistentes para consultar o AD com o Powershell para computadores que não tenham feito o login em X dias?

Eu pensei em uma tarefa muito mais complicada no powershell da seguinte forma: Puxe dnshostnames do AD Faça ping de todos os hosts na minha unidade organizacional e, para obter êxito, remova-os da lista. Execute isso a cada 6 horas por uma semana, continuando a remover máquinas que tiveram sucesso no ping. Laptops eu teria que lidar de forma diferente.

Alguma outra ideia, sugestão, etc.?

    
por mcudm001 20.05.2013 / 14:53

3 respostas

3

Em uma variação da sugestão abrangente do Patricks, eu usaria o atributo LastLogontimeStamp replicado para restringir a pesquisa:

Import-Module ActiveDirectory
$threshold = (Get-Date).AddDays(-44)
$computers Get-ADComputer -Filter * -SearchBase "ou=desiredou,dc=domain,dc=tld" -Properties LastLogontimeStamp
$oldComps = $computers | where {[Date.Time]::FromFileTime($_.lastlogontimestamp) -lt $threshold}

$oldComps armazenará todos os computadores que não estiverem conectados em pelo menos 30 dias.

É um pouco contra-intuitivo com um limite de 44 dias, mas para evitar uma inundação de atualizações de replicação para o LastLogontimeStamp , o atributo só é atualizado se o valor for maior que 9 dias. Se o valor estiver entre 9 e 14 dias fora da data, um processo aleatório determina se deve ser atualizado ou não.

Aqui está uma ótima explicação: link

    
por 10.06.2013 / 12:37
1

Parece que você precisa de algo como oldcmp : link

Isso pesquisa o domínio ou a Unidade organizacional especificada para máquinas que não se conectaram nos últimos x dias e fornece relatórios ou a facilidade de desabilitar essas contas de computador.

A ferramenta e a representação no Active Directory representam apenas o que o domínio conhece, portanto, você ainda precisa criar um processo de geração de relatórios externo para o ambiente do Active Directory para permitir o rastreamento das máquinas que relatam como não tendo sido usado para verificar se eles realmente saíram da organização e devem ser removidos. Um excelente exemplo aqui é de fato laptops: as ferramentas podem relatar que um laptop está fora de uso, quando na verdade isso está escondendo o fato de o laptop estar simplesmente em uso off-line.

Enfoques semelhantes estão disponíveis envolvendo relatórios no SCCM para investigar o momento em que uma máquina foi capaz de dar um batimento cardíaco; desde que as máquinas tenham clientes SCCM funcionando, isso seria uma abordagem melhor do que puxar um relatório e tentar executá-lo - uma técnica que seria incrivelmente trabalhosa e propensa a resultados falso-positivos.

    
por 20.05.2013 / 15:03
1

Um objeto AD de computadores possui um carimbo de hora LastLogon, que fornece um indicador útil do estado atual do computador.

Se você conseguir instalar cmdlets do thrid party, os cmdlets Quest Active Directory serão incrivelmente úteis.

$result = @()
$OU = "DC=ncp,DC=co,DC=uk"
Foreach($computer in (Get-QADComputer -SearchRoot "$ou" -sizelimit 0))
    {
    $result += "$((Get-QADComputer $computer -IncludeAllProperties).lastLogon), $computer"
    }

$ result listará todos os seus computadores na unidade organizacional especificada e sua data de último logon como esta:

06/10/2013 08:48:25, NATTHN21$
05/13/2011 14:54:04, NATTHN02$
06/10/2013 08:42:51, NATRHN01$
06/10/2013 08:45:38, NCPHON01$

Você precisaria executar isso contra todos os DCs com os quais esse computador pode fazer logon. Uma organização do seu tamanho é provavelmente impraticável.

Como medida alternativa. A propriedade do objeto 'whenChanged' em seus objetos AD do computador é a senha da conta da máquina. Isso atualiza automaticamente após 30 dias (padrão no Win 2K e posterior, normalmente. A verificação do objeto de diretiva de grupo de domínio padrão pode confirmar isso).

Se você encontrar contas de computador em que "whenChanged" tenha mais de 30 dias, essas são as máquinas que não efetuaram login nesse período. Isso funciona bem para redes DC múltiplas maiores, já que essa figura é replicada onde 'lastLogon' não é.

Simplesmente altere a linha no script acima para remover '.lastLogon' e substitua por '.whenChanged'

Se você não conseguir instalar o Quest AD, precisará usar uma máquina com RSAT instalado (ou DC) e usar o cmdlet Get-ADComputer (digite 'Import-Module ActiveDirectory').

Uma terceira opção para rastrear o uso futuro seria usar um script de logon. Eu fiz isso em um cliente há alguns anos e funcionou bem, embora estivéssemos em algumas máquinas caçadas, não ~ 70K.

Na época, nosso script de logon era um arquivo .BAT. Crie um novo .BAT em NETLOGON com a seguinte linha (por exemplo, LogonTrack.BAT)

::LogonTrack.BAT
ECHO %date% >Z:\%computername%

e no final de qualquer arquivo de lote de logon que possa ser usado por seus usuários de 70K, adicione uma linha

call LogonTrack.BAT

Isso cria um arquivo com o nome do computador e a data do arquivo é o último logon no local mapeado.

Eu não recomendaria isso, mas você poderia auditar logs de eventos para obter essas informações, embora eu geralmente evite o log diving quando possível. Você precisaria Evento 4624 .

Finalmente, eu também uso LANSweeper em um cliente que é ótimo. Isso tem ótimos relatórios em computadores antigos. No entanto, como um produto pago que requer uma instalação separada e um servidor, isso pode não ser bom para você. Além disso, para sistemas de 250K, você precisaria de um back-end razoavelmente poderoso, e não de uma VM adaptada que estivesse por aí.

    
por 10.06.2013 / 11:18