$alladusers = Get-ADUser -Filter * | Select sAMAccountName
作業しているドメインが大きい場合、これはあまり良い考えではありません。大きなオブジェクトをフィルタリングするために使用するWhere-Object
こともあまり良い考えではありません.powershell.orgに非常にクールな記事があり、Dave WyattとDon Jonesがオブジェクトをフィルタリングするさまざまな方法とその効率について説明していました.悲しいことに、何らかの理由で削除されました.
Csvに各ユーザーの「ユーザー」列があると仮定すると、次のようになります。
$result=New-Object System.Collections.ArrayList
#result array will be only the user that do not exist in AD
$csvfile = Import-CSV USERAccountstocompare.csv
foreach($line in $csvfile.User)
{
$filter="(|(Name=$line)(samAccountName=$line))"
$adusr=Get-ADuser -LDAPFilter $filter
if(!$adusr)
{
$result.add($line) > $null
}
}
代わりに、Csv と AD にあるユーザーと、Csv のみにあるユーザーのリストが必要な場合は、次のようにすることができます。
$result=New-Object System.Collections.ArrayList
#result array will be only the user that do not exist in AD
$csvfile = Import-CSV USERAccountstocompare.csv
foreach($line in $csvfile.User)
{
$filter="(|(Name=$line)(samAccountName=$line))"
$adusr=Get-ADuser -LDAPFilter $filter
if(!$adusr)
{
$result.add(
[pscustomobject]@{
'Not In AD'=$line
}) > $null
}
else
{
$result.add(
[pscustomobject]@{
'In AD and Csv'=$line
}) > $null
}
}