【问题标题】:PowerShell Bulk update Active Directory Managers field [duplicate]PowerShell 批量更新 Active Directory 管理器字段 [重复]
【发布时间】:2017-05-05 03:38:36
【问题描述】:

我正在尝试更新活动目录中的管理器字段并有一个脚本 输入文件是这样的

Firstname.LastnameEmployee;firstname.lastnameManager

这是我正在使用的脚本... 这是我遇到的错误

您不能在空值表达式上调用方法。 在行:26 字符:5 + $ObjSearchemployee.Filter = "(&(objectCategory=person)(objectClass=user)(sAM ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull

您不能在空值表达式上调用方法。 在行:31 字符:9 + $ObjSearchmanager.Filter = "(&(objectCategory=person)(objectClass=user)( ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull

############################################################### 
# Update_Manager_v1.0.ps1 
# input : n/a 
# output : none (logs) 
# Version 1. 
# Changelog : n/a 
# MALEK Ahmed - 02 / 06 / 2013 
################### 

################## 
#--------Config 
################## 
$adPath="LDAP://DC=local,DC=com" 


################## 
#--------Main   
################## 
#LDAP connection 
$objDomain=New-Object System.DirectoryServices.DirectoryEntry($adPath) 
#Doing an LDAP search 
$ObjSearchemployee=New-Object System.DirectoryServices.DirectorySearcher($ObjDomain) 
$ObjSearchmanager=New-Object System.DirectoryServices.DirectorySearcher($ObjDomain) 
#Operations on user accounts 
Import-Csv .\input.csv -Delimiter ';' | Foreach-Object { 
    $ObjSearchemployee.Filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName="+ $_.employee.trim() +"))" 
    $allSearchResultemployee = $ObjSearchemployee.FindAll() 
    foreach ($objSearchResultemployee in $allSearchResultemployee) 
    { 
        $objUseremployee=New-Object System.DirectoryServices.DirectoryEntry($objSearchResultemployee.Path)

        $ObjSearchmanager.Filter = "(&(objectCategory=person)(objectClass=user)(sAMAccountName="+ $_.manager.trim() +"))" 
        $allSearchResultmanager = $ObjSearchmanager.FindAll() 
        foreach ($objSearchResultmanager in $allSearchResultmanager) 
        { 
            $objUsermanager=New-Object System.DirectoryServices.DirectoryEntry($objSearchResultmanager.Path) 
            $objUseremployee.manager = $objUsermanager.distinguishedname 
        } 
        $objUseremployee.CommitChanges() 
        "" + $objUsermanager.displayName + " is now the manager of " + $objUseremployee.displayName + "" 
    } 
}

【问题讨论】:

  • 您的源文件中没有名为employee 的标题。这就是您收到错误的原因。

标签: powershell directory


【解决方案1】:

$.Employee.trim() 是问题所在,因为根据您的源示例,您没有“员工”的列标题。见You cannot call a method on a null-valued expression。

假设您的第一列是 samaccountname,那么您应该将其更改为 $_.Firstname.LastnameEmployee.trim() 否则您需要重新定义搜索的完成方式或更新您的源文件以包含相关信息并让您的代码匹配。

正如错误提示,$_.Manager.trim() 也会有同样的问题

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多