ข้อควรพิจารณาในการเขียนโมดูล PowerShell
เอกสารนี้ประกอบด้วยแนวทางบางประการที่เกี่ยวข้องกับวิธีการเขียนโมดูลเพื่อประสิทธิภาพที่ดีที่สุด
การเขียนรายการโมดูล
รายการโมดูลที่ไม่ได้ใช้แนวทางต่อไปนี้อาจมีผลกระทบที่เห็นได้ชัดเจนต่อประสิทธิภาพการทำงานของ PowerShell ทั่วไป แม้ว่าจะไม่ได้ใช้โมดูลในเซสชันก็ตาม
การค้นหาอัตโนมัติของคำสั่งจะวิเคราะห์แต่ละโมดูลเพื่อกำหนดว่าคำสั่งใดที่โมดูลจะเอ็กซ์พอร์ต และการวิเคราะห์นี้อาจมีราคาแพง ผลลัพธ์ของการวิเคราะห์โมดูลจะถูกแคชต่อผู้ใช้ แต่แคชจะไม่พร้อมใช้งานเมื่อเรียกใช้ครั้งแรก ซึ่งเป็นสถานการณ์ทั่วไปสำหรับคอนเทนเนอร์ ในระหว่างการวิเคราะห์โมดูล หากคำสั่งที่ส่งออกสามารถกำหนดได้อย่างสมบูรณ์จากรายการ ก็สามารถหลีกเลี่ยงการวิเคราะห์โมดูลที่มีราคาแพงกว่าได้
แนวทาง
ในรายการโมดูล อย่าใช้ไวด์การ์ดในรายการ
AliasesToExport,CmdletsToExportและFunctionsToExportหากโมดูลไม่ส่งออกคำสั่งประเภทใดประเภทหนึ่ง ให้ระบุสิ่งนี้อย่างชัดเจนในรายการโดยระบุ
@()รายการหายไปหรือ$nullเทียบเท่ากับการระบุไวด์การ์ด*
ควรหลีกเลี่ยงสิ่งต่อไปนี้หากเป็นไปได้:
@{
FunctionsToExport = '*'
# Also avoid omitting an entry, it's equivalent to using a wildcard
# CmdletsToExport = '*'
# AliasesToExport = '*'
}
ให้ใช้:
@{
FunctionsToExport = 'Format-Hex', 'Format-Octal'
CmdletsToExport = @() # Specify an empty array, not $null
AliasesToExport = @() # Also ensure all three entries are present
}
หลีกเลี่ยง CDXML
เมื่อตัดสินใจว่าจะใช้โมดูลของคุณอย่างไร มีตัวเลือกหลักสามตัวเลือก:
- ไบนารี่ (ปกติคือ C#)
- สคริปต์ (PowerShell)
- CDXML (CIM การห่อไฟล์ XML)
หากความเร็วในการโหลดโมดูลของคุณมีความสำคัญ CDXML จะมีลำดับความสำคัญช้ากว่าโมดูลไบนารีโดยประมาณ
โมดูลไบนารี่โหลดเร็วที่สุดเนื่องจากมีการคอมไพล์ล่วงหน้าและสามารถใช้ NGen เพื่อคอมไพล์ JIT ได้หนึ่งครั้งต่อเครื่อง
โดยทั่วไปโมดูลสคริปต์จะโหลดช้ากว่าโมดูลไบนารีเล็กน้อยเนื่องจาก PowerShell จะต้องแยกวิเคราะห์สคริปต์ก่อนที่จะคอมไพล์และดำเนินการ
โดยทั่วไปโมดูล CDXML จะช้ากว่าโมดูลสคริปต์มาก เนื่องจากจะต้องแยกวิเคราะห์ไฟล์ XML ก่อน จากนั้นจึงสร้างสคริปต์ PowerShell ขึ้นมาเล็กน้อย จากนั้นจึงแยกวิเคราะห์และคอมไพล์