Мне было поручено автоматизировать отключение / удаление старых компьютеров. К сожалению, я на собственном горьком опыте обнаружил, что данные, которые мне дают для этой задачи, содержат много ошибок, и у меня возникают проблемы с их проверкой. Здесь требования заключаются в том, что учетная запись компьютера должна существовать, она не может быть дубликатом, это не может быть серверная ОС, а пароль учетной записи для компьютера не должен быть сброшен за последние 10 дней. Мне удалось проверить все это по отдельности, но когда я пытаюсь объединить проверку в один сценарий, я терплю неудачу. В частности, я не могу пройти этап дублирования данных. Вот код:
$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
Кажется, что сценарий не может пройти второй оператор if. Пожалуйста, дайте мне знать, если мне нужно предоставить дополнительную информацию или мне не хватает скобки.
$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
Это конечный результат. Я использовал опцию try / catch для подавления ошибок. Моя проблема заключалась в сравнении -contains. Спасибо за помощь!