PowerShell的批量更新的Active Directory管理领域
我想更新我们的活动目录我们的管理领域,有一个脚本 输入文件看起来像这样PowerShell的批量更新的Active Directory管理领域
Firstname.LastnameEmployee;firstname.lastnameManager
这里是我使用的脚本。 .. 这是我得到的错误
您无法在空值表达式上调用方法。 At line:26 char:5 + $ ObjSearchemployee.Filter =“(&(objectCategory = person)(objectClass = user)(sAM ... + ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ + CategoryInfo:InvalidOperation:(:) [],的RuntimeException + FullyQualifiedErrorId:InvokeMethodOnNull
不能调用上一个空值表达的方法 在线:31 char: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.trim()
是问题,因为你没有 “雇员” 的列标题,按您的源例子。见You cannot call a method on a null-valued expression。
假设您的第一列是samaccountname,那么您应该将其更改为$_.Firstname.LastnameEmployee.trim()
,否则您需要重新定义搜索的完成方式或更新源文件以包含相关信息并使您的代码匹配。
由于错误意味着你将有同样的问题与$_.Manager.trim()
你没有一个叫员工在你的源文件头。这就是你遇到错误的原因。 – Matt