2017-05-04 41 views
0

我想更新我們的活動目錄我們的管理領域,有一個腳本 輸入文件看起來像這樣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 + "" 
    } 
} 
+0

你沒有一個叫員工在你的源文件頭。這就是你遇到錯誤的原因。 – Matt

回答

0

$.Employee.trim()是問題,因爲你沒有 「僱員」 的列標題,按您的源例子。見You cannot call a method on a null-valued expression

假設您的第一列是samaccountname,那麼您應該將其更改爲$_.Firstname.LastnameEmployee.trim(),否則您需要重新定義搜索的完成方式或更新源文件以包含相關信息並使您的代碼匹配。

由於錯誤意味着你將有同樣的問題與$_.Manager.trim()