こんにちは!温かい飲み物とスノーシューでみんなが落ち着いてくれますように。
私は AD のユーザー作成スクリプトに取り組んでおり、奇妙な動作に遭遇しました。ここでの目標は、個人の SAMID が既に存在するかどうかを確認し、存在する場合は、SAMID に「1」を追加することです。
たとえば、「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
これを正しく理解すると、「ユーザーが見つかりませんでした」ということになります。したがって、SAMID は「jproudmoore」として作成する必要があります。ただし、スクリプトは出力を NOT null として検出したかのように、「jproudmoore1」を作成します。
if ($samid -ne $null) {
オブジェクトが見つからないというエラーがあったため、出力が実際には null に等しくないと仮定します。したがって、次のようになります。
$samid = $samid + 1
}
ここで何が欠けていますか?当たり前のような気がします。
お時間をいただきありがとうございます。素晴らしい一週間をお過ごしください。
- 編集 -
これも手動で試しました:
$test = get-aduser jproudmoore
if (!$test) {write-host "variable is null"}
PS > variable is null
ここで私が正しければ、SAMID チェックで "1" を追加すべきではなかったことを意味します。