我尝试编写一个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中。
答案 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}
)。