2016-02-12 3 views
0

Я пытаюсь экспортировать список пользователей, получить случайный образец этих пользователей, а затем удалить этот случайный образец из исходного списка. Если я вручную добавлю данные в массив, например, Technet article, он работает нормально. Но когда я пытаюсь импортировать из csv или использовать Get-Content для получения данных, он ничего не удалит. Любая помощь будет принята с благодарностью.Обновление переменных массивов в Powershell

<#-->The first 4 lines are the same for all attempts. Between attempts I exited PowerShell.<--#> 

$Date = Get-Date -DisplayHint Date 
Get-ADUser -Filter * -SearchBase "OU=Users,DC=Domain" -SearchScope OneLevel -Properties sAMAccountName | 
Select-Object @{Name="User ID";Expression={$_."sAMAccountName"}}, @{Name="Date";Expression={$Date}} | 
Export-Csv "C:\File.csv" -NoTypeInformation 

#-->First Attempt<--# 
$Import = Import-Csv C:\File.csv 
$Sample = Get-Random -InputObject $Import -Count 20 
$List = $Import -ne $Sample 

#This shows 20. 
$Sample.Count 

#These both show the same number instead of $List being 20 less than $Import. 
$Import.Count 
$List.Count 

#-->Second Attempt<--# 
$Import = Get-Content C:\File.csv 
$Sample = Get-Random -InputObject $Import -Count 20 
$List = $Import -ne $Sample 

#This shows 20. 
$Sample.Count 

#These both show the same number instead of $List being 20 less than $Import. 
$Import.Count 
$List.Count 

#-->Third Attempt<--# 
[System.Collections.ArrayList]$Import = Import-Csv C:\File.csv 
[System.Collections.ArrayList]$Sample = Get-Random -InputObject $Import -Count 20 
[System.Collections.ArrayList]$List = $Import -ne $Sample 

#This shows 20. 
$Sample.Count 

#These both show the same number instead of $List being 20 less than $Import. 
$Import.Count 
$List.Count 

#-->Fourth Attempt<--# 
[System.Collections.ArrayList]$Import = Import-Csv C:\File.csv 
[System.Collections.ArrayList]$Sample = Get-Random -InputObject $Import -Count 20 
[System.Collections.ArrayList]$List = $Import.Remove($Sample) 

#This shows 20. 
$Sample.Count 

#This shows 1000. 
$Import.Count 

#This shows 0. 
$List.Count 
+0

Я думаю, что вы хотите это: '$ List = (Compare-Object -ReferenceObject $ Import -DifferenceObject $ Sample) .InputObject'. –

+0

@AlexanderObersht спасибо, это работает. – pshellnewb

ответ

0

Используйте Where заявления, чтобы отфильтровать записи, которые вы не хотите включать в себя, например:

$Import = Import-Csv C:\File.csv 
$Sample = Get-Random -InputObject $Import -Count 20 
$List = $Import | Where{$_ -notin $Sample} 

Тогда $List.count должен быть $Import.Count - $Sample.Count.

+0

Спасибо за ответ, это также работает для меня. – pshellnewb

0

Вы хотите, чтобы это как упомянуто Александр:

$List = (Compare-Object -ReferenceObject $Import -DifferenceObject $Sample).InputObject | Where-Object { $_.SideIndicator -eq '<=' } 

$_.SideInidcator получите вы только значения, которые находятся в $Import, а не в $Sample

EDIT:

На самом деле, так как имена указаны в обоих списках. Метод Alexanders будет работать отлично. Но если вы имели значение в $sample, которые не были в $Import тогда вы получите эти ценности тоже, если вы не сделали метод sideIndicator

+0

Когда я добавляю 'code' | Where-Object {$ _. SideIndicator -eq '<='} 'code' $ Список пуст. Он делает то, что я хочу, но без него, поэтому я буду играть с этим трубом позже, чтобы посмотреть, что я могу с ним сделать. – pshellnewb

Смежные вопросы