首页 > 解决方案 > 尝试从从 CSV 导入的 Wkst LoginIDs 获取 Dist.Name 时,Powershell -> Get-ADComputer 错误

问题描述

我正在尝试从 CSV 列表中获取工作站的 DN。

$distname = (Get-ADComputer "$($wkst.wkstID)").distinguishedName

上面的行导致错误,因为$wkst.wkstID没有SameAccountNames单独列出,但它将整个 CSV 列表复制到同一命令中。

有人可以帮忙解决这个错误吗?

Import-Module ActiveDirectory

$wkst = import-csv XXX.csv

Foreach($wkstID in $wkst){

$distname = (Get-ADComputer "$($wkst.wkstID)").distinguishedName

#Remove-ADObject -Identity $distname

}

CSV 截图

错误截图

在 Note 中打开的 CSV

标签: powershellcsvactive-directory

解决方案


好的,我可能会写一个答案而不是对此使用评论。

在您的代码中,您正在创建一个变量来使用 迭代项目集合foreach($wkstID in $wkst){..},但在循环中,您从整个集合中获取属性$wkst.wkstID,而不是从迭代变量中获取它。

这就是为什么我评论使用更好的名称来避免当变量名称与您从中使用的属性相同时您现在遇到的混淆。

尝试

Import-Module ActiveDirectory

$wkst = Import-Csv -Path 'XXX.csv'

foreach($item in $wkst){
    $distname = (Get-ADComputer -Identity $item.wkstID).DistinguishedName
    # Remove-ADObject -Identity $distname
}

当找不到具有该名称的计算机时,上述内容可能会引发异常,因此最好使用以下内容:

Import-Module ActiveDirectory

$wkst = Import-Csv -Path 'XXX.csv'

foreach($item in $wkst){
    $computer = Get-ADComputer -Filter "Name -eq '$($item.wkstID)'" -ErrorAction SilentlyContinue
    if ($computer) {
        # Remove-ADObject -Identity $computer.DistinguishedName
    }
    else {
        Write-Warning "Computer '$($item.wkstID)' does not exist"
    }
}

推荐阅读