Добрый день!Надеюсь, что все привыкли к теплым напиткам и снегоступам.
Я работаю над сценарием создания пользователя для AD и столкнулся с некоторым странным поведением.Цель здесь состоит в том, чтобы проверить, существует ли уже SAMID человека, и если да, добавить «1» к SAMID.
Например, давайте использовать «Jaina Proudmoore» в качестве нашего пользователя.
import-csv $inputCSV | foreach {
$FullName = $_.FullName
$company = $_.Company
$Givenname = $fullname.Split(" ")[0]
$Surname = $fullname.split(" ")[1]
$firstInitial = ($fullname.substring(0,1)).ToLower()
$surnameLower = $surname.ToLower()
$GivennameLower = $Givenname.ToLower()
$samid = $firstInitial + $surnameLower
$samidcheck = get-aduser $samid
if ($samid -ne $null) {
$samid = $samid + 1
}
$Description = "Created By NewUserCreation Script $DateFormat"
$global:Department = $_.Department
$Title = $_.Title
$Office = $_.Office
$StreetAddress = $_.StreetAddress
$PostalCode = $_.PostalCode
$ManagerFullName = $_.Manager
$ManagerDN = (get-aduser -filter 'Name -like $ManagerFullName').DistinguishedName
$Country = "CA"
$co = "Canada"
$OfficePhone = $_.OfficePhone
$MobilePhone = $_.MobilePhone
$countryCode = "124"
$City = $_.Location
$GroupSourceUser = $_.GroupSourceUser
$GroupSourceUserDN = (get-aduser -filter "Name -like '$GroupSourceUser'").DistinguishedName
$ADUserCheck = get-aduser -Filter 'Name -like $FullName' -ErrorAction SilentlyContinue
В этом случае проверка SAMID должна дать мне:
$samidcheck = get-aduser jproudmoore
Если бы я должен был выполнить это вручную:
get-aduser : Cannot find an object with identity: 'jproudmoore' under: 'DC=home,DC=local'.
At line:1 char:1
+ get-aduser jproudmoore
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (jproudmoore:ADUser) [Get-ADUser], ADIdentityNotFoundException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,Microsoft.ActiveDirectory.Management.Commands.GetADUser
Если я правильно понимаю, это означаетmsgstr "пользователь не найден".Поэтому мой SAMID должен быть создан как «jproudmoore».Тем не менее, сценарий создает «jproudmoore1», как если бы он обнаружил, что выходной сигнал НЕ является нулевым.
if ($samid -ne $null) {
Так как произошла ошибка, когда объект не найден, я бы предположил, что выходные данные действительно не равны нулюи, следовательно:
$samid = $samid + 1
}
Что мне здесь не хватает?Я чувствую, что это что-то очевидное.
Заранее спасибо за ваше время и прекрасную неделю!
Я также пробовал это вручную:
$test = get-aduser jproudmoore
if (!$test) {write-host "variable is null"}
PS > variable is null
Если я здесь прав, то это означает, что проверка SAMID не должна была добавлять "1".