none
Powershell Сравнение 2х CSV файлов RRS feed

  • Вопрос

  • Доброго времени суток!
    Буду рад помощи

    Есть 2 CSV файла
    file1.csv
    User;PCname
    Bob;PC1
    Anna;PC2

    file2.csv
    User;PCname
    Anna;PC2

    Как видно здесь совпадают Anna;PC2

    Нужно сравнить 2 файла и только если есть совпадения, то записать User в Managed by (Set-ADComputer-ManagedBy)в AD.

    Небольшой скрипт ниже работает,

    $file1 = Import-Csv 'C:\Users\adm\Desktop\File1.csv' -Delimiter ";"
    $file2 = Import-Csv 'C:\Users\adm\Desktop\File2.csv' -Delimiter ";"
    Compare-Object $file1 $file2 -property PCname -IncludeEqual

    он выводит SideIndicator у PCname в значение ==, но не ясно как далее создать массив и записать данные в AD.

    • Изменено It-Kirill 12 февраля 2021 г. 9:36
    12 февраля 2021 г. 9:34

Все ответы

  • $file1 = Import-Csv 'C:\File1.csv' -Delimiter ";"
    Import-Csv 'C:\File2.csv' -Delimiter ";" | where { $_.pcname -in $file1.pcname } | foreach {
       $_.user
       $_.pcname
    }


    The opinion expressed by me is not an official position of Microsoft

    13 февраля 2021 г. 6:54
    Модератор
  • Спасибо за ответ!
    Задача немного изменилась, а я уже написал большую часть кода.

    Смысл: есть 2 CSV файла, в них могут быть дубли. Дубли пишем в отдельный файл. Затем берем из 2х файлов оригиналы и ищем их в AD, если находим, то изменяем параметр ManagedBy.

    Что не работает:

    1. Нет чтения в Managed = Getadcomputer. Подозреваю, что проблема в переменной $Originals.ARM

    2. Не выводит список тех машин, которых нет в AD. Muclonotinad имевю ввиду.

    $file1 = Import-Csv 'C:\temp\mer\File1.csv' -Delimiter ";"
    $file2 = Import-Csv 'C:\temp\mer\File2.csv' -Delimiter ";"
    $propertyToCompare = 'ARM'
    $myCol = @();
    $originals = @();
    $duplicates = Compare-Object -ReferenceObject $file1 -DifferenceObject $file2 -Property $propertyToCompare -PassThru -includeequal -excludedifferent
    $duplicates | export-csv ‘C:\temp\mer\povtor.csv’ -notypeinformation
    
    $originals = Compare-Object -ReferenceObject $file1 -DifferenceObject $file2 -Property $propertyToCompare -PassThru
    
    $workstations = Get-ADComputer -SearchBase 'OU=tstARM Computers,OU=ARMComputers,OU=INT,DC=ddd,DC=ru' `
                                   -Filter * `
                                   -Properties Description, managedby | Select-Object name, ManagedBy
    
    
    ForEach ($original in $originals)
    {
    
    If ($original.ARM -in $workstations.name) {
    Set-ADComputer -Identity $original.ARM -ManagedBy "CN=alauser,OU=Users,OU=INT,DC=ddd,DC=ru"
            
            $MyObject = New-Object PSObject -Property @{
    	 	Name = $original.ARM
            Managed = Get-ADComputer -SearchBase 'OU=tstARM Computers,OU=ARMComputers,OU=INT,DC=ddd,DC=ru' `
                                      -Filter "Name -eq '$original.ARM'" `
                                      -Properties managedby | Select-Object ManagedBy -ExpandProperty managedby
    		}
    	$mycol += $MyObject
    		}
    }
    
    if ($original.ARM -notin $workstations.name) {
            $MyObjectnotinad = New-Object PSObject -Property @{
    	 	Name = $original.ARM
    		}
    	$mycolnotinad += $MyObjectnotinad
    		}
    
    $myCol
    $mycolnotinad





    • Изменено It-Kirill 14 февраля 2021 г. 11:52
    14 февраля 2021 г. 11:49