Итак, я вижу, что вы используете CSV. Это означает, что Get-content
- неправильный выбор командлета. Вы должны использовать Import-csv
. Csv также означает, что у вас есть заголовок для этого файла.
Итак, когда вы делаете это
foreach ($user in $users) {
$user
}
Вы получите возвращенные данные в этом формате на каждой итерации foreach loop
.
Что вам нужно, это.
# 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.