0

私は Powershell があまり得意ではありません。CSV の「ユーザー」列をすべてのユーザー AD と比較するスクリプトを作成しようとしています。

AD にない CSV ですべてのユーザーを取得する必要があります。

ここに私が書いたもの:

$csvfile = Import-CSV USERAccountstocompare.csv
$alladusers = Get-ADUser -Filter * | Select sAMAccountName

foreach($user in $alladusers){
$userAD = $alladusers.SamAccountName

foreach($usercsv in $csvfile){

if ($usercsv | where {$_.user -ne "$userAD"}){ write "$usercsv"}

else{}
}
}     

if コマンドの前に write $usercsv を置くと、私は良いユーザーを取得しますが、if の後、「@{User=username}」のように @{User= の前にすべてのユーザーを書き込むため、比較が機能しません。

ありがとうございます :)

4

2 に答える 2

0

$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
    }
}
于 2021-03-09T14:42:46.187 に答える