Cria uma lista de computadores para desativar

3

Eu tenho a tarefa de automatizar nossa desativação / exclusão de computadores antigos. Infelizmente eu descobri da maneira mais difícil que os dados que estou recebendo para esta tarefa tem muitos erros e estou tendo problemas para validá-los. Os requisitos aqui são que a conta do computador deve existir, não pode ser uma duplicata, não pode ser um sistema operacional do servidor e a senha da conta para o computador não deve ter sido redefinida nos últimos 10 dias. Eu tenho sido capaz de validar tudo isso separadamente, mas quando tento combinar a validação em um script, estou falhando. Especificamente, não consigo passar da etapa de dados duplicados. Aqui está o código:

$file = "D:\Transcripts\ADPCverify\" + (get-date -Format yyyymmdd-hhmmss) + ".txt"
start-transcript -LiteralPath $file 
$date = Get-Date
$computers = Get-Content D:\Content\ADPCverify\unverified.txt | sort-object -unique
$list =   Get-Content D:\Content\ADPCDisable\computers.txt 
$name = 'null'
ForEach($computer in $computers){
    $prevname = $name
    $name = (Get-ADComputer -Identity $computer -Server server).name
    $PCObject = Get-ADComputer -Identity $computer -Server server -Properties *
    $OS = $PCObject.OperatingSystem
                $pwdLastSet = [DateTime]::FromFiletime([Int64]::Parse($PCobject.pwdLastSet))
                $TimeSince = New-TimeSpan $pwdLastSet $date
    if($name -eq $prevname){
        Add-Content D:\Content\ADPCDisable\FailedComputers.txt $computer
        write-host "Machine " + $computer + " does not exist and has been added to the failed computers list."
    }elseif($OS -contains 'Windows Server'){
         Add-Content D:\Content\ADPCDisable\FailedComputers.txt $computer
         write-host "Machine " + $computer + " has a server OS and will be added to the failed computer list."
    }elseif($TimeSince.totaldays -lt 10){
         Add-Content D:\Content\ADPCDisable\FailedComputers.txt $computer
         write-host "Machine " + $computer + "'s password was reset " + $TimeSince.totaldays + "  days ago and has been added to the failed computer list."
    }else{
         Add-Content D:\Content\ADPCDisable\Computers.txt $name
         write-host "Machine " + $name + " has been succesfully added to the computers to disable list."
    }
} 
Stop-Transcript

O script parece não conseguir passar da segunda instrução if. Por favor, deixe-me saber se eu preciso fornecer mais alguma informação ou estou faltando um suporte.

    
por Mike Eckerle 25.04.2017 / 22:56

1 resposta

2

$file = "D:\Transcripts\ADPCverify\" + (get-date -Format yyyymmdd-hhmmss) + ".txt"
start-transcript -LiteralPath $file 
$date = Get-Date
$computers = Get-Content D:\Content\ADPCverify\unverified.txt | sort-object -unique
$list =   Get-Content D:\Content\ADPCDisable\computers.txt 
$name = 'null'
$server = ''
ForEach($computer in $computers){
    Try{
        $PCObject = Get-ADComputer -Identity $computer -Server $server -Properties *
        $name = $PCObject.Name
        $OS = $PCObject.OperatingSystem
        $pwdLastSet = [DateTime]::FromFiletime([Int64]::Parse($PCobject.pwdLastSet)) 
        $TimeSince = New-TimeSpan $pwdLastSet $date
        if($OS.StartsWith('Windows Server')){
            Add-Content D:\Content\ADPCDisable\FailedComputers.txt $computer
            write-host "Machine "  $computer  " has a server OS and will be added to the failed computer list."
        }elseif($TimeSince.TotalDays -lt 10){
            Add-Content D:\Content\ADPCDisable\FailedComputers.txt $computer
            write-host "Machine "  $computer  "'s password was reset " + $TimeSince.TotalDays + "  days ago and has been added to the failed computer list."
        }else{
            Add-Content D:\Content\ADPCDisable\Computers.txt $name
            write-host "Machine "  $name  " has been succesfully added to the computers to disable list."
        }
        }
     Catch{
        Add-Content D:\Content\ADPCDisable\FailedComputers.txt $computer
        write-host "Machine "  $computer  " does not exist and has been added to the failed computers list."
     }

} 
Stop-Transcript

Este é o resultado final. Eu usei a opção try / catch para suprimir erros. Meu problema foi com a comparação -contains. Obrigado por toda a ajuda!

    
por 26.04.2017 / 14:09