根据CSV文件检查AD计算机名称

时间:2017-01-10 16:07:31

标签: powershell active-directory

我尝试编写一个Powershell脚本,该脚本将从CSV文件中导入计算机名称列表,并将其与AD中的所有计算机名称进行比较。我需要它来输出CSV文件中AD中不存在的名称列表。

我一直在玩这些命令,但他们并没有完全按照我的意愿行事。

$import = Import-Csv -Path C:\Users\username\Desktop\test.csv
$AD-Names = Get-ADComputer -filter * | Select -Expand Name
Compare-Object $import $AD-Names

这似乎给了我一个列表,列出了两个变量的不同之处,这是一个非常长的列表。我真的只需要知道CSV文件中的哪些计算机名称不在AD中。

2 个答案:

答案 0 :(得分:0)

首先,如果只有计算机名称,为什么还需要csv文件? CSV文件通常用于将表存储在简单的文本文件中。

如果您的CSV仅包含计算机名称,并且您只想检查计算机名称,则可能对您有用:

$OutputComputers = @();
$InputComputers = Import-Csv input.csv -Header ComputerName;
$AdComputers = Get-ADComputer -Filter 'Name -like "*"';


$InputComputers | ForEach-Object {$i = 0} { 
    if ($_.ComputerName -notin $AdComputers.Name) {
        $OutputComputers += New-Object PsObject -property @{
            'ComputerName' = $_.ComputerName
        }
    }
}

$OutputComputers | Export-Csv output.csv -Delimiter ";" -Encoding UTF8 -Force  -NoTypeInformation

希望它有所帮助。

答案 1 :(得分:0)

只需将CSV中的名称与AD中的名称列表进行比较(我将假设CSV的列标题为Name):

$ADNames = Get-ADComputer -Filter * | Select-Object -Expand Name
Import-Csv 'C:\path\to\input.csv' |
    Where-Object { $ADNames -notcontains $_.Name } |
    Export-Csv 'C:\path\to\not_in_AD.csv' -NoType

旁注:$AD-Names不是有效的变量名称。将连字符更改为下划线或将其完全删除,或将变量名称放在大括号中(${AD-Names})。

相关问题