Score:0

วิธีการ: หากผู้ใช้ออกแล้ว ให้สร้างผู้ใช้ด้วย "1" หลังชื่อ -PowerShell Active Directory

ธง ug

ฉันมีสคริปต์ที่เขียนที่นี่เพื่อตรวจสอบว่ามีโฆษณาอยู่แล้วหรือไม่ หากมีอยู่สคริปต์จะแจ้งให้ฉันทราบ ถ้าไม่มีก็จะสร้าง:

    ถ้า (รับ ADUser -F { SamAccountName -eq $ชื่อผู้ใช้ }) {
        
        # หากมีผู้ใช้อยู่ให้เตือน
        เขียนคำเตือน "บัญชีผู้ใช้ที่มีชื่อผู้ใช้ $username มีอยู่แล้วใน Active Directory"
    อื่น {

##จากนั้นดำเนินการต่อที่นี่ด้วยการสร้างผู้ใช้

สิ่งที่ฉันต้องการทำคือ หากมีอยู่ ให้สร้างผู้ใช้ที่มีหลักการตั้งชื่อเหมือนกัน แต่ใส่ "1" หลังชื่อ ฉันรู้ว่ามันฟังดูงี่เง่า.... แต่ฉันถูกถามว่าเป็นไปได้ไหม

และหากไม่มีอยู่ ก็ทำต่อไปตามปกติแล้วสร้างมันขึ้นมา :)

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมสุภาพสตรีและสุภาพบุรุษ

ขอขอบคุณ :)

br flag
[1] โทรหา AD ของคุณเพื่อดูว่ามีชื่อผู้ใช้พื้นฐานนั้นหรือไม่ ตัวอย่างเช่น - `-like 'SmithJ*'` [2] บังคับให้ผลลัพธ์เป็นอาร์เรย์โดยตัดการโทรใน `@()` [3] ถ้า `$Result.Count` ไม่ใช่ศูนย์ ให้จับตัวเลขต่อท้าย เรียงลำดับเพื่อหาค่าสูงสุด เพิ่มขึ้นทีละ 1 และสุดท้ายใช้ตัวเลขนั้นเพื่อสร้างชื่อผู้ใช้ใหม่ของคุณ
Score:0
ธง in

ภายในคำสั่ง if ของคุณพร้อมคำเตือน ให้เพิ่ม

$ชื่อผู้ใช้ = ชื่อผู้ใช้ $+ "1"

จากนั้นทำซ้ำรหัสในส่วนอื่นของคุณ

สามารถทำความสะอาดได้ตลอดเวลาและวางรหัสบัญชีสร้างในฟังก์ชันและเรียกใช้ในแต่ละส่วนของคำสั่ง if

ug flag
สวัสดี Aalom ขอบคุณสำหรับการตอบกลับของคุณ เมื่อฉันใส่ "$username = $username + "1" " ในคำสั่ง IF ดูเหมือนจะไม่ได้ผลมากนัก มันรันผ่านสคริปต์ตามที่ควรจะเป็น จากนั้นในตอนท้ายจะระบุคำเตือน: ผู้ใช้ที่มีชื่อผู้ใช้ test.test1 มีอยู่แล้วในไดเร็กทอรี และเมื่อฉันค้นหา AD ก็ไม่มีใครชื่อนั้นเลย สิ่งที่ฉันต้องทำคือสร้างบัญชีที่ซ้ำกันทั้งหมดให้กับบัญชีที่มีอยู่ แต่เพียงแค่เป็น "test.test1" แทน "test.test" ขอบคุณความช่วยเหลือ
Aalom avatar
in flag
คุณแน่ใจว่าได้เรียกใช้โค้ด add-aduser หลังจากเปลี่ยนตัวแปร $username หรือไม่ ฉันคิดว่าคุณกำลังวิ่งอยู่ในวงวนบางอย่างที่นี่ ถ้าเป็นเช่นนั้นจะมีลักษณะอย่างไร
ug flag
เฮ้อีกครั้ง ฉันจะวางสคริปต์ของฉันในคำตอบของสคริปต์เพื่อให้อ่านง่ายขึ้น
Score:0
ธง ug

## สคริปต์เต็ม ##

$ADUsers = นำเข้า Csv C:\ps\usercreation.csv

$UPN = "METest.local"

foreach (ผู้ใช้ $ ใน $ ADUsers) {

    #กำหนดข้อมูลใน csv ให้กับตัวแปร
    $ชื่อผู้ใช้ = $ชื่อผู้ใช้ ชื่อผู้ใช้
    $password = $User.password
    $ชื่อแรก = $User.firstname
    $lastname = $User.lastname
    $OU = $User.ou #ฟิลด์นี้อ้างอิงถึง OU ที่จะสร้างบัญชีผู้ใช้
    $telephone = $User.telephone
    $jobtitle = $User.jobtitle

    # ตรวจสอบและดูว่ามีผู้ใช้อยู่แล้วใน AD
    ถ้า (รับ ADUser -F { SamAccountName -eq $ชื่อผู้ใช้ }) {
        
        #Warn หากมีผู้ใช้อยู่แล้ว
        เขียนคำเตือน "บัญชีผู้ใช้ที่มีชื่อผู้ใช้ $username มีอยู่แล้วใน Active Directory"
    }
    อื่น {

        #ผู้ใช้ไม่มีอยู่ จากนั้นดำเนินการสร้างบัญชีผู้ใช้ใหม่
        ใหม่-ADUSer `
            -SamAccountName $ชื่อผู้ใช้ `
            -UserPrincipalName "[email protected]" `
            -ชื่อ "$Firstname $Lastname" `
            -GivenName $Firstname `
            -นามสกุล $Lastname `
            -เปิดใช้งาน $True `
            -DisplayName "$Lastname, $Firstname" `
            -เส้นทาง $OU `
            -โทรศัพท์สำนักงาน $โทรศัพท์ `
            -ชื่องาน $ชื่องาน `
            -AccountPassword (convertto-securestring $Password -AsPlainText -Force) -PasswordNeverExpires:$false -ChangePasswordAtLogon:$True

        #ถ้ามีผู้ใช้นี้อยู่
        เขียนโฮสต์ "บัญชีผู้ใช้ $ ชื่อผู้ใช้ถูกสร้างขึ้น" - พื้นหน้าสีฟ้า
        
        #Sleep เวลาซิงค์สำหรับ Exchange push
        #write-host หยุดชั่วคราวสำหรับ Exchange Sync....
        #start-sleep - วินาที 300
    
    #ใช้ใบอนุญาตกับผู้ใช้ที่สร้างขึ้นใน AD แล้วซิงค์กับ Exchange
        #Set-MsolUserLicense -UserPrincipalName $newuser.UserPrincipalName -AddLicenses UI-OF-LICENSE-ที่นี่   
        #Set-MsolUserLicense -UserPrincipalName $newuser.UserPrincipalName -AddLicenses UI-OF-LICENSE-ที่นี่
        
    }
}

อ่านโฮสต์ - พร้อมท์ "กด Enter เพื่อออก"

ปล. ไม่ต้องกังวลเกี่ยวกับความคิดเห็นทั้งหมด ... พวกเขาอยู่ที่นั่นดังนั้นมันจึงไม่ทำงานบางอย่างในขณะที่ฉันทดสอบ

Score:0
ธง in

ดังนั้น อันดับแรก คุณไม่จำเป็นต้องกำหนดค่าของคุณจาก The csv ให้กับตัวแปร เนื่องจากค่าเหล่านี้จะถูกโหลดลงในออบเจกต์แล้วและอยู่ในหน่วยความจำ ดังนั้นคุณจึงสามารถเปลี่ยน $username เป็น $user.username ทำซ้ำในส่วนเพิ่มผู้ใช้ เพียงแค่เปลี่ยน ชื่อตามระยะเวลาสำหรับชุดข้อมูล ฉันคิดว่าฉันเข้าใจแล้วว่าเกิดอะไรขึ้น ดังนั้นหากคุณมี john doe อยู่ในระบบและอีก 2 john doe อยู่ในรายการของคุณ ครั้งแรกที่สร้าง john.doe1 และประสบความสำเร็จ แต่ครั้งที่สองล้มเหลว ดังนั้นคุณต้องดึงสตริงชื่อผู้ใช้ให้ตัดเป็นอักขระตัวสุดท้าย ทำการเปรียบเทียบเพื่อดูว่าอักขระตัวสุดท้ายเป็นอักขระหรือตัวเลข ถ้าเป็นตัวอักษรให้ต่อ 1 ถ้าตัวเลขบวก 1 เข้าไปแล้วเชื่อมตัวเลขนั้นแทน เข้าท่า? บนโทรศัพท์ของฉัน ดังนั้นการเขียนโค้ดและการค้นคว้าไวยากรณ์จึงเป็นเรื่องที่น่าปวดหัว ขอโทษ

ug flag
ขอบคุณสำหรับการตอบกลับของคุณ. ฉันจะพูดตรงๆ อย่างโจ่งแจ้งและพูดว่า ไม่ นั่นไม่สมเหตุสมผลสำหรับฉันเลย :( แค่บางสิ่งที่ฉันไม่เคยต้องยุ่งด้วย ดังนั้นจึงสมเหตุสมผลพอที่จะเขียนมันลงไปและให้มันเป็นหน้าที่ที่ฉัน ชนกำแพง
Aalom avatar
in flag
ฉันจะกระโดดขึ้นไปบนแล็ปท็อปและพยายามรวบรวมบางสิ่งเข้าด้วยกัน ฉันต้องรวบรวมสคริปต์ AD ก่อนที่ฉันจะไม่มีสิทธิ์เข้าถึงซอร์สโค้ดที่ฉันเขียน
ug flag
ขอบคุณมากมาย!! ปล. อย่าลังเลที่จะคัดลอกและวางสคริปต์ของฉันและเพิ่มสิ่งที่คุณต้องการ ฉันไม่เอะอะเลยแม้แต่น้อย
Score:0
ธง in

ฉันไม่ได้สัมผัสส่วนที่แสดงความคิดเห็น แต่หวังว่านี่จะช่วยให้คุณมีความคิด ฉันไม่มีเซิร์ฟเวอร์ AD พร้อมที่จะทดสอบกับมัน แต่โปรดทราบว่าฉันไม่สามารถรับประกันได้ 100%

การตรวจสอบฟังก์ชัน($User){
    ถ้า (รับ ADUser -F { SamAccountName -eq $User.username }) {
        $usernumber = 1
        ในขณะที่ (รับ ADUser -F { SamAccountName -eq ($ User.username + $usernumber)}){
            $usernumber++
        }
        $NewUserName = $User.ชื่อผู้ใช้ + $usernumber
        Add_User($ชื่อผู้ใช้ใหม่, $ผู้ใช้)
        }
        อื่น {
            $NewUserName = $User.ชื่อผู้ใช้
        Add_User($ชื่อผู้ใช้ใหม่, $ผู้ใช้)
        }
}

ฟังก์ชัน Add_User($ชื่อผู้ใช้, $ผู้ใช้){
ใหม่-ADUSer `
            -SamAccountName $ชื่อผู้ใช้ `
            -UserPrincipalName "$Username" + "@MEtest.com" `
            -ชื่อ "$Firstname $Lastname" `
            -GivenName $User.Firstname `
            -นามสกุล $User.Lastname `
            -เปิดใช้งาน $True `
            -DisplayName "$User.Lastname, $User.Firstname" `
            -เส้นทาง $User.ou `
            -โทรศัพท์สำนักงาน $User.telephone `
            -ชื่อเรื่อง $User.jobtitle `
            -AccountPassword (convertto-securestring $Password -AsPlainText -Force) -PasswordNeverExpires:$false -ChangePasswordAtLogon:$True
}

$ADUsers = นำเข้า Csv C:\ps\usercreation.csv

$UPN = "METest.local"

foreach (ผู้ใช้ $ ใน $ ADUsers) {
    การตรวจสอบ ($ ผู้ใช้)

        #ถ้ามีผู้ใช้นี้อยู่
        เขียนโฮสต์ "บัญชีผู้ใช้ $ ชื่อผู้ใช้ถูกสร้างขึ้น" - พื้นหน้าสีฟ้า
        
        #Sleep เวลาซิงค์สำหรับ Exchange push
        #write-host หยุดชั่วคราวสำหรับ Exchange Sync....
        #start-sleep - วินาที 300
    
    #ใช้ใบอนุญาตกับผู้ใช้ที่สร้างขึ้นใน AD แล้วซิงค์กับ Exchange
        #Set-MsolUserLicense -UserPrincipalName $newuser.UserPrincipalName -AddLicenses UI-OF-LICENSE-ที่นี่   
        #Set-MsolUserLicense -UserPrincipalName $newuser.UserPrincipalName -AddLicenses UI-OF-LICENSE-ที่นี่
        
    }
}

อ่านโฮสต์ - พร้อมท์ "กด Enter เพื่อออก"
ug flag
ขอบคุณ! :). ขออภัย ฉันได้รับสิ่งนี้ :( --> New-ADUSer: ไม่สามารถแปลง 'System.Object[]' เป็นประเภท 'System.String' ที่พารามิเตอร์ 'SamAccountName' ต้องการ วิธีการที่ระบุไม่ใช่ ได้รับการสนับสนุน. ที่บรรทัด:18 char:29 + -SamAccountName $ชื่อผู้ใช้ ` + ~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [New-ADUSer], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.NewADUSer
Aalom avatar
in flag
หากคุณเพิ่งรันมันและคุณใช้ ISE จากนั้นใน co.mand promp ที่ด้านล่างให้พิมพ์ $Username และดูว่ามันจะส่งคืนอะไร
ug flag
คืนค่านี้: PS C:\Windows\system32> $username นายวงศ์. และนั่นคือ 1 ในชื่อผู้ใช้ทดสอบในไฟล์ .csv ของฉัน
Aalom avatar
in flag
คุณอาจเพิ่ม out-string เพื่อแปลงจากวัตถุเป็นสตริง ดังนั้น -SamAccountName $Username ` จะกลายเป็น -SamAccountName $Username | นอกสตริง `
ug flag
นี่เป็นข้อผิดพลาดที่ฉันได้รับหลังจากแทนที่ -> https://i.stack.imgur.com/SXHyS.png
Aalom avatar
in flag
มีปัญหากับการค้นหาคุณสมบัติชื่อผู้ใช้ของวัตถุ csv มีคอลัมน์ชื่อผู้ใช้หรือไม่ ชื่อหัวเรื่องคืออะไร?
ug flag
สวัสดี @Aalom ส่วนหัวคือ " FirstName | LastName | UserName | Password | JobTitle | OU | PhoneNumber
Aalom avatar
in flag
ตรวจสอบให้แน่ใจว่าคุณสมบัติของออบเจกต์ที่สอดคล้องกันนั้นเขียนด้วยตัวพิมพ์เล็กและใหญ่ ดังนั้น $User.username ควรเป็น $User.UserName เป็นต้น
ug flag
ฉันแน่ใจว่าทุกอย่างตรงกันเพิ่งสร้างแผ่นงาน excel ตัวพิมพ์เล็กทั้งหมดเพื่อให้ง่ายต่อการทดสอบในขณะนี้ ด้วยเหตุผลบางอย่างยังคงได้รับสิ่งนี้ https://i.stack.imgur.com/ZhPrc.png
Aalom avatar
in flag
ตรวจสอบให้แน่ใจว่าในบรรทัดที่ 2 เป็น $User.username หากชื่อตัวแปรอ็อบเจกต์คือ $User และตอนนี้ส่วนหัวเป็นชื่อผู้ใช้
ug flag
สวัสดีอาลม ขอขอบคุณอีกครั้งสำหรับความช่วยเหลืออย่างต่อเนื่องของคุณ คุณไม่รู้หรอกว่าฉันซาบซึ้งในความช่วยเหลือมากแค่ไหน ฉันลองตามที่คุณพูดแล้ว ก็ยังเกิดข้อผิดพลาดเหมือนเดิม :( ฉันจะแนบภาพหน้าจอของโค้ด .csv และข้อผิดพลาดทั้งหมดในที่เดียว ดังนั้นมันอาจจะเหมาะสมกว่าสำหรับสายตาที่ได้รับการฝึกฝน https://i.stack.imgur.com/xD43D.png
Aalom avatar
in flag
รอสักครู่กำลังสร้างบัญชีหรือไม่ หากเป็นเช่นนั้น จะเกิดอะไรขึ้นเมื่อคุณเรียกใช้สคริปต์อีกครั้งโดยไม่ลบบัญชีทดสอบ มีข้อผิดพลาดหายไปและเพิ่ม 1 ในชื่อผู้ใช้หรือไม่
Aalom avatar
in flag
หากเป็นกรณีนี้ แสดงว่าข้อผิดพลาดนั้นกลับมา เนื่องจากไม่มีบัญชีอยู่ใน AD แต่ท้ายที่สุดก็ยังให้ค่าเท็จแก่ผู้เปรียบเทียบและดำเนินการต่อไป หากต้องการลบคำเตือน ให้ใช้ -erroraction ละเว้นหลัง } ของคำสั่ง get-aduser

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา