การขอการยืนยันจาก Cmdlets
Cmdlet ควรร้องขอการยืนยันเมื่อพวกเขากำลังจะทำการเปลี่ยนแปลงกับระบบที่อยู่นอกสภาพแวดล้อม Windows PowerShell ตัวอย่างเช่น ถ้า cmdlet กำลังจะเพิ่มบัญชีผู้ใช้หรือหยุดกระบวนการ cmdlet ควรต้องมีการยืนยันจากผู้ใช้ก่อนที่จะดำเนินการต่อ ในทางตรงกันข้าม ถ้า cmdlet กำลังจะเปลี่ยนแปลงตัวแปร Windows PowerShell cmdlet นั้นไม่จำเป็นต้องมีการยืนยัน
เพื่อทำการร้องขอการยืนยัน cmdlet จะต้องระบุว่ารองรับการร้องขอการยืนยัน และจะต้องเรียกเมธอด System.Management.Automation.Cmdlet.ShouldProcess และ System.Management.Automation.Cmdlet.ShouldContinue (เป็นทางเลือก) เพื่อแสดงการยืนยัน ข้อความขอ
รองรับการร้องขอการยืนยัน
เพื่อรองรับคำขอการยืนยัน cmdlet ต้องตั้งค่าพารามิเตอร์ SupportsShouldProcess ของแอตทริบิวต์ Cmdlet เป็น true ซึ่งเปิดใช้งานพารามิเตอร์ cmdlet ยืนยัน และ WhatIf ที่ได้รับจาก Windows PowerShell พารามิเตอร์ ยืนยัน อนุญาตให้ผู้ใช้ควบคุมว่าจะแสดงคำขอยืนยันหรือไม่ พารามิเตอร์ WhatIf ช่วยให้ผู้ใช้สามารถกำหนดได้ว่า cmdlet ควรแสดงข้อความหรือดำเนินการหรือไม่ อย่าเพิ่มพารามิเตอร์ Confirm และ WhatIf ด้วยตนเองลงใน cmdlet
ตัวอย่างต่อไปนี้แสดงการประกาศแอตทริบิวต์ Cmdlet ที่รองรับคำขอการยืนยัน
[Cmdlet(VerbsDiagnostic.Test, "RequestConfirmationTemplate1",
SupportsShouldProcess = true)]
การเรียกวิธีการร้องขอการยืนยัน
ในรหัส cmdlet ให้เรียกเมธอด System.Management.Automation.Cmdlet.ShouldProcess ก่อนดำเนินการที่เปลี่ยนแปลงระบบ ออกแบบ cmdlet เพื่อให้ถ้าการเรียกส่งกลับค่า false การดำเนินการจะไม่เกิดขึ้น และ cmdlet จะประมวลผลการดำเนินการถัดไป
การเรียกเมธอด shouldContinue
cmdlets ส่วนใหญ่ร้องขอการยืนยันโดยใช้เมธอด System.Management.Automation.Cmdlet.ShouldProcess เท่านั้น อย่างไรก็ตาม ในบางกรณีอาจต้องมีการยืนยันเพิ่มเติม สำหรับกรณีเหล่านี้ ให้เสริมการเรียก System.Management.Automation.Cmdlet.ShouldProcess ด้วยการเรียกไปยังเมธอด System.Management.Automation.Cmdlet.ShouldContinue ซึ่งช่วยให้ cmdlet หรือผู้ให้บริการสามารถควบคุมขอบเขตของการตอบกลับ ใช่ทั้งหมด ต่อพร้อมท์การยืนยันได้ละเอียดยิ่งขึ้น
ถ้า cmdlet เรียกเมธอด System.Management.Automation.Cmdlet.ShouldContinue cmdlet นั้นยังต้องจัดให้มีพารามิเตอร์สวิตช์ Force ถ้าผู้ใช้ระบุ Force เมื่อผู้ใช้เรียกใช้ cmdlet นั้น cmdlet ควรยังคงเรียก System.Management.Automation.Cmdlet.ShouldProcess แต่ควรหลีกเลี่ยงการเรียกไปยัง System.Management.Automation.Cmdlet.ShouldContinue .
System.Management.Automation.Cmdlet.ShouldContinue จะส่งข้อยกเว้นเมื่อมีการเรียกจากสภาพแวดล้อมที่ไม่โต้ตอบซึ่งผู้ใช้ไม่สามารถได้รับพร้อมท์ การเพิ่มพารามิเตอร์ Force ช่วยให้มั่นใจได้ว่าคำสั่งยังคงสามารถทำงานได้เมื่อมีการเรียกใช้ในสภาพแวดล้อมที่ไม่โต้ตอบ
ตัวอย่างต่อไปนี้แสดงวิธีการเรียก System.Management.Automation.Cmdlet.ShouldProcess และ System.Management.Automation.Cmdlet.ShouldContinue
if (ShouldProcess (...) )
{
if (Force || ShouldContinue(...))
{
// Add code that performs the operation.
}
}
ลักษณะการทำงานของการเรียก System.Management.Automation.Cmdlet.ShouldProcess อาจแตกต่างกันไปขึ้นอยู่กับสภาพแวดล้อมที่ cmdlet ถูกเรียกใช้ การใช้แนวทางก่อนหน้านี้จะช่วยให้แน่ใจว่า cmdlet ทำงานสอดคล้องกับ cmdlet อื่นๆ โดยไม่คำนึงถึงสภาพแวดล้อมของโฮสต์
สำหรับตัวอย่างการเรียกเมธอด System.Management.Automation.Cmdlet.ShouldProcess ดูวิธีการขอการยืนยัน
ระบุระดับผลกระทบ
เมื่อคุณสร้าง cmdlet ให้ระบุระดับผลกระทบ (ความรุนแรง) ของการเปลี่ยนแปลง เมื่อต้องการทำเช่นนี้ ให้ตั้งค่าของพารามิเตอร์ ConfirmImpact ของแอตทริบิวต์ Cmdlet เป็นสูง ปานกลาง หรือต่ำ คุณสามารถระบุค่าสำหรับ ConfirmImpact ได้เฉพาะเมื่อคุณระบุพารามิเตอร์ SupportsShouldProcess สำหรับ cmdlet ด้วย
สำหรับ cmdlet ส่วนใหญ่ คุณไม่จำเป็นต้องระบุ ConfirmImpact อย่างชัดเจน ให้ใช้การตั้งค่าเริ่มต้นของพารามิเตอร์ซึ่งก็คือ ปานกลาง แทน หากคุณตั้งค่า ConfirmImpact เป็น High การดำเนินการจะได้รับการยืนยันตามค่าเริ่มต้น สงวนการตั้งค่านี้ไว้สำหรับการดำเนินการที่ก่อกวนอย่างมาก เช่น การฟอร์แมตไดรฟ์ข้อมูลบนฮาร์ดดิสก์
การเรียกวิธีการไม่ยืนยัน
หาก cmdlet หรือผู้ให้บริการต้องส่งข้อความแต่ไม่ร้องขอการยืนยัน ก็สามารถเรียกวิธีการสามวิธีต่อไปนี้ หลีกเลี่ยงการใช้เมธอด System.Management.Automation.Cmdlet.WriteObject เพื่อส่งข้อความประเภทเหล่านี้ เนื่องจากเอาต์พุต System.Management.Automation.Cmdlet.WriteObject ผสมกับเอาต์พุตปกติของ cmdlet หรือผู้ให้บริการของคุณ ซึ่งทำให้การเขียนสคริปต์ทำได้ยาก
เพื่อเตือนผู้ใช้และดำเนินการต่อไป cmdlet หรือผู้ให้บริการสามารถเรียกเมธอด System.Management.Automation.Cmdlet.WriteWarning
-
หากต้องการให้ข้อมูลเพิ่มเติมที่ผู้ใช้สามารถดึงข้อมูลได้โดยใช้พารามิเตอร์
Verbosecmdlet หรือผู้ให้บริการสามารถเรียกใช้เมธอด System.Management.Automation.Cmdlet.WriteVerbose ได้ เมื่อต้องการให้รายละเอียดระดับการดีบักสำหรับนักพัฒนารายอื่นหรือการสนับสนุนผลิตภัณฑ์ cmdlet หรือผู้ให้บริการสามารถเรียกเมธอด System.Management.Automation.Cmdlet.WriteDebug ได้ ผู้ใช้สามารถดึงข้อมูลนี้โดยใช้พารามิเตอร์
Debug
Cmdlet และผู้ให้บริการเรียกวิธีการต่อไปนี้เพื่อร้องขอการยืนยันก่อนที่จะพยายามดำเนินการที่เปลี่ยนแปลงระบบภายนอก Windows PowerShell:
System.Management.Automation.Cmdlet.ควรดำเนินการ
System.Management.Automation.Provider.Cmdletprovider.Shouldprocess
ซึ่งทำได้โดยการเรียกเมธอด System.Management.Automation.Cmdlet.Shouldprocess ซึ่งจะพร้อมท์ให้ผู้ใช้ยืนยันการดำเนินการตามวิธีที่ผู้ใช้เรียกใช้คำสั่ง
ดูเพิ่มเติม
การเขียน Windows PowerShell Cmdlet