Как импортировать данные активного каталога в массив и экспортировать их в один файл CSV? - PullRequest
0 голосов
/ 25 июня 2019

Как экспортировать данные активного каталога (адреса электронной почты и номера телефонов) в один файл CSV?

Я экспортировал данные Active Directory в массив и экспортировал массив в файл CSV, но не в файл CSVотображается как пустой

# Change directory to where the CSV files are located
cd "C:\Users\srobins\OneDrive - Ruralco Holdings Limited\Desktop"

# Declare an array and assign the list of users to this
$users = Get-Content users.csv

# Create an array for the active directory data to be stored
$displayname = @()

# Loop through the list of users
foreach ($user in $users) {

# Get the active directory data and store in a tempory variable
$displaynamedetails = Get-ADUser -LDAPFilter { DisplayName -eq $name }| Select name,samAccountName,OfficePhone

# Append the active direcotry data into the array
$displayname += $displaynamedetails

}

#export the array containing the list of active directory data into the new CSV
$displayname | Export-Csv "C:\SamAccountName.csv" -NoTypeInformation

Я ожидаю, что CSV-файл 'SamAccountName' будет создан, а список данных Active Directory сохранен внутри.

Однако создается файл CSV,пусто.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Итак, я вижу, что вы используете CSV. Это означает, что Get-content - неправильный выбор командлета. Вы должны использовать Import-csv. Csv также означает, что у вас есть заголовок для этого файла.

enter image description here

Итак, когда вы делаете это

foreach ($user in $users) {
   $user
}

Вы получите возвращенные данные в этом формате на каждой итерации foreach loop.

enter image description here

Что вам нужно, это.

 # Change directory to where the CSV files are located
cd "C:\Users\srobins\OneDrive - Ruralco Holdings Limited\Desktop"

# Declare an array and assign the list of users to this
$users = Import-Csv users.csv

# Create an array for the active directory data to be stored
$displayname = @()

# Loop through the list of users
foreach ($user in $users.Name) #$users.Name has to reflect the header you have. In my case it was name.
{

# Get the active directory data and store in a tempory variable
$displaynamedetails = Get-ADUser -filter "DisplayName -eq '$user'" | Select name,samAccountName,OfficePhone #mind the '' around $user

# Append the active direcotry data into the array
$displayname += $displaynamedetails

}

#export the array containing the list of active directory data into the new CSV
$displayname | Export-Csv "C:\SamAccountName.csv" -NoTypeInformation

EDIT2 ----------------------------------------

Я бы настоятельно рекомендовал добавить заголовок, иначе зачем использовать CSV? Если это не так, вам нужно выполнить не очень идеальную манипуляцию с текстом.

# Change directory to where the CSV files are located
cd "C:\Users\srobins\OneDrive - Ruralco Holdings Limited\Desktop"

# Declare an array and assign the list of users to this
$FileContent = Get-Content users.csv
$Users = $FileContent | ForEach-Object {($_.Split(",")[0]).trim()}
#[0] is the position of the name part in each line when it is split into parts at the comma. Eg: John Doe,32,blah
#In my case it was the 1st part. Change this according to ur data

# Create an array for the active directory data to be stored
$displayname = @()

# Loop through the list of users
foreach ($user in $users) #$users.Name has to reflect the header you have. In my case it was name.
{

# Get the active directory data and store in a tempory variable
$displaynamedetails = Get-ADUser -filter "DisplayName -eq '$user'" | Select name,samAccountName,OfficePhone #mind the '' around $user

# Append the active direcotry data into the array
$displayname += $displaynamedetails

}

#export the array containing the list of active directory data into the new CSV
$displayname | Export-Csv "C:\SamAccountName.csv" -NoTypeInformation

Возможно, было бы полезно посмотреть пример данных CSV.

0 голосов
/ 25 июня 2019

Параметр LDAPFilter в Get-ADUser не использует имеющийся у вас синтаксис.

Вам необходимо использовать -LDAPFilter "(displayName = $ user)" или сохранить существующий синтаксис и изменить параметр на -Filter {DisplayName -eq $ user}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...