我正在尝试更新活动目录中的managers字段,并有一个脚本,输入文件如下所示
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
###############################################################
# 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 + ""
}
}发布于 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()也会遇到同样的问题
https://stackoverflow.com/questions/43790006
复制相似问题