首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell大容量更新Active管理器字段

PowerShell大容量更新Active管理器字段
EN

Stack Overflow用户
提问于 2017-05-04 18:11:16
回答 1查看 166关注 0票数 0

我正在尝试更新活动目录中的managers字段,并有一个脚本,输入文件如下所示

代码语言:javascript
复制
Firstname.LastnameEmployee;firstname.lastnameManager

这是我用的剧本..。这就是我要犯的错误

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

代码语言:javascript
复制
############################################################### 
# 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 + "" 
    } 
}
EN

回答 1

Stack Overflow用户

发布于 2017-05-04 19:38:36

$.Employee.trim()是个问题,因为您没有源示例中的"Employee“列标题。见You cannot call a method on a null-valued expression

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43790006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档