На Windows Server задача запускается каждый день, чтобы исправить разрешения для DNS для определенных записей и записать их в файл CSV (Date, ComputerName).
Этот сценарий выполняется с года, исейчас есть много файлов журналов ...
Мне нужно иметь возможность:
- Читать все файлы журналов
- Добавить каждый компьютер в ADgroup
- Подсчитать, сколько раз компьютер регистрируется с самого начала
- Экспортировать это в другой CSV-файл
- Экспортировать вид абстрактного
- Запустить этот скриптв конце исходного сценария
Я не могу изменить исходный сценарий, который запускается каждый день в 7:00 каждые 10 минут в течение 12 часов.На данный момент мне нужно работать с файлами журналов (.CSV), которые находятся в одном каталоге
Сценарий Добавление содержимого в файл CSV, например:
$tagfile=get-date -format "ddMMyyyy"
$logfile="C:\Logs\Taches Planifiées\Correctif permissions enregistrements DNS\CorrectionsDNS_$tagfile.csv"
#some code
"$timestamp,$pcname"|Add-content -Path $logfile
Каждый CSVфайл выглядит так:
20-06-2019-08:00:03,PO038281
20-06-2019-08:10:03,PO042080
20-06-2019-08:20:05,PC040752
20-06-2019-08:20:05,PO041927
20-06-2019-08:20:05,PO047187
20-06-2019-08:30:05,PO046931
...
Я пишу сценарий, который зацикливает каждый CSV-файл на
$Global:path = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition)
$objLogs = New-Object System.Collections.ArrayList
ForEach($file in (Get-ChildItem -Path $path | Where{$_.Name -like "CorrectionsDNS_*.csv"})){
ForEach($line in Get-Content $file){
$obj = New-Object PSObject
$obj | add-member -MemberType NoteProperty -name "Date" -value $line.SubString(0,10)
$obj | add-member -MemberType NoteProperty -name "Hour" -value ($line.Split("-")[3]).Split(",")[0]
$obj | add-member -MemberType NoteProperty -name "Computer" -value ($line.Split("-")[3]).Split(",")[1]
$objLogs += $obj
}
}
$csv = $path + "\" + (Get-Date).ToString("yyyy-MM-dd.HH") + "h" + (Get-Date).ToString("mm") + ".LogsDNS.csv"
$objLogs | Export-CSV -Path $csv -Delimiter ";" -Encoding UTF8 -NoTypeInformation
if ((Get-ADGroup -Identity "ErreurDNS") -eq $false){
New-ADGroup -GroupCategory: "Security" -GroupScope: "Global" -Name "ErreurDNS" -Path: "OU=Ordinateurs,OU=Hotel du Departement,DC=cg53,DC=fr" -SamAccountName:"ErreurDNS"
}
ForEach ($member in ($objLogs.Computer | Group).Name){
Add-ADGroupMember -Identity "ErreurDNS" -Members (Get-ADComputer $member) -ErrorAction Ignore
}
Кажется, что цели 1,2 и 4 в порядке.Вот файл .CSV:
"Date";"Hour";"Computer"
"01-01-2019";"07:30:11";"PO042117"
"01-02-2019";"08:10:03";"PO042150"
"01-02-2019";"08:20:07";"PO042070"
"01-02-2019";"08:30:03";"PO041284"
...
Но можете ли вы помочь мне с целями 3,5 и 6, если это возможно?
Я уже пробовал это сгруппировать результаты по компьютерам:
$objLogs.Computer | Group | Select Name,Count
Но это нечитаемо.Некоторые компьютеры считают несколько записей, но их здесь больше нет (замена), или у них больше не возникает проблем в течение нескольких недель (переустановка, замена) ...
как я могу написать реферат, гдея могу легко видеть компьютеры, на которых записи DNS были исправлены и каждый раз без импорта моего CSV-файла в Excel ...
LastWeek.csv
"";"Hour";"Computer"
"01-01-2019";"07:30:11";"PO042117"
"01-02-2019";"08:10:03";"PO042150"
"01-02-2019";"08:20:07";"PO042070"
"01-02-2019";"08:30:03";"PO041284"
...
LastMonth.csv, LastYear.CSV ...
Любой совет приветствуется ^^
Заранее спасибо.