New-Module (Microsoft.PowerShell.Core)
New-Module
- โมดูล :
- Microsoft.PowerShell.Core
สร้างโมดูลไดนามิกใหม่ที่มีอยู่ในหน่วยความจำเท่านั้น
ไวยากรณ์
New-Module
[-ScriptBlock] <ScriptBlock>
[-Function <String[]>]
[-Cmdlet <String[]>]
[-ReturnResult]
[-AsCustomObject]
[-ArgumentList <Object[]>]
[<CommonParameters>]New-Module
[-Name] <String>
[-ScriptBlock] <ScriptBlock>
[-Function <String[]>]
[-Cmdlet <String[]>]
[-ReturnResult]
[-AsCustomObject]
[-ArgumentList <Object[]>]
[<CommonParameters>]คำอธิบาย
New-Module cmdlet สร้างโมดูลไดนามิกจากบล็อกสคริปต์ สมาชิกของโมดูลไดนามิก เช่น ฟังก์ชันและตัวแปร จะพร้อมใช้งานทันทีในเซสชันและยังคงพร้อมใช้งานจนกว่าคุณจะปิดเซสชัน
เช่นเดียวกับโมดูลแบบคงที่ ตามค่าเริ่มต้น cmdlets และฟังก์ชันในโมดูลไดนามิกจะถูกส่งออก และไม่มีตัวแปรและนามแฝง อย่างไรก็ตาม คุณสามารถใช้ Export-ModuleMember cmdlet และพารามิเตอร์ของ New-Module เพื่อแทนที่ค่าเริ่มต้น
คุณยังสามารถใช้พารามิเตอร์ AsCustomObject ของ New-Module เพื่อส่งคืนโมดูลไดนามิกเป็นออบเจ็กต์ที่กำหนดเอง สมาชิกของโมดูล เช่น ฟังก์ชัน จะถูกนำไปใช้เป็นวิธีการสคริปต์ของออบเจ็กต์แบบกำหนดเอง แทนที่จะนำเข้าเข้าสู่เซสชัน
โมดูลไดนามิกมีอยู่ในหน่วยความจำเท่านั้น ไม่มีอยู่บนดิสก์ เช่นเดียวกับโมดูลทั้งหมด สมาชิกของโมดูลไดนามิกจะรันในขอบเขตโมดูลส่วนตัวที่เป็นลูกของขอบเขตส่วนกลาง Get-Module ไม่สามารถรับโมดูลไดนามิก แต่ Get-Command สามารถรับสมาชิกที่ส่งออกได้
หากต้องการทำให้โมดูลไดนามิกพร้อมใช้งานสำหรับ Get-Module ให้ไพพ์คำสั่ง New-Module ไปที่ Import-Module หรือไพพ์วัตถุโมดูลที่ New-Module กลับสู่ Import-Module การดำเนินการนี้จะเพิ่มโมดูลไดนามิกลงในรายการ Get-Module แต่จะไม่บันทึกโมดูลลงดิสก์หรือทำให้โมดูลคงอยู่
ตัวอย่าง
ตัวอย่างที่ 1: สร้างโมดูลแบบไดนามิก
ตัวอย่างนี้สร้างโมดูลไดนามิกใหม่ด้วยฟังก์ชันที่เรียกว่า Hello คำสั่งส่งคืนวัตถุโมดูลที่แสดงถึงโมดูลไดนามิกใหม่
New-Module -ScriptBlock {function Hello {"Hello!"}}
Name : __DynamicModule_2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5
Path : 2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5
Description :
Guid : 00000000-0000-0000-0000-000000000000
Version : 0.0
ModuleBase :
ModuleType : Script
PrivateData :
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Hello, Hello]}
ExportedVariables : {}
NestedModules : {}ตัวอย่างที่ 2: การทำงานกับโมดูลไดนามิกและ Get-Module และ Get-Command
ตัวอย่างนี้แสดงให้เห็นว่าโมดูลแบบไดนามิกจะไม่ส่งคืนโดย cmdlet Get-Module สมาชิกที่พวกเขาส่งออกจะถูกส่งกลับโดย Get-Command cmdlet
new-module -scriptblock {function Hello {"Hello!"}}
Name : __DynamicModule_2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5
Path : 2ceb1d0a-990f-45e4-9fe4-89f0f6ead0e5
Description :
Guid : 00000000-0000-0000-0000-000000000000
Version : 0.0
ModuleBase :
ModuleType : Script
PrivateData :
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Hello, Hello]}
ExportedVariables : {}
NestedModules : {}
Get-Module
Get-Command Hello
CommandType Name Definition
----------- ---- ----------
Function Hello "Hello!"ตัวอย่างที่ 3: ส่งออกตัวแปรไปยังเซสชันปัจจุบัน
ตัวอย่างนี้ใช้ cmdlet Export-ModuleMember เพื่อส่งออกตัวแปรไปยังเซสชันปัจจุบัน หากไม่มีคำสั่ง Export-ModuleMember ระบบจะส่งออกเฉพาะฟังก์ชันเท่านั้น
New-Module -ScriptBlock {$SayHelloHelp="Type 'SayHello', a space, and a name."; function SayHello ($name) { "Hello, $name" }; Export-ModuleMember -function SayHello -Variable SayHelloHelp}
$SayHelloHelp
Type 'SayHello', a space, and a name.
SayHello Jeffrey
Hello, Jeffreyผลลัพธ์แสดงว่าทั้งตัวแปรและฟังก์ชันถูกส่งออกไปยังเซสชัน
ตัวอย่างที่ 4: ทำให้โมดูลไดนามิกพร้อมใช้งานสำหรับ Get-Module
ตัวอย่างนี้แสดงให้เห็นว่าคุณสามารถสร้างโมดูลไดนามิกให้กับ Get-Module โดยการไพพ์โมดูลไดนามิกไปที่ Import-Module
New-Module สร้างวัตถุโมดูลที่ถูกส่งไปยัง Import-Module cmdlet พารามิเตอร์ ชื่อ ของ New-Module จะกำหนดชื่อที่จำง่ายให้กับโมดูล เนื่องจาก Import-Module ไม่ส่งคืนอ็อบเจ็กต์ใดๆ ตามค่าเริ่มต้น จึงไม่มีเอาต์พุตจากคำสั่งนี้ Get-Module ที่ GreetingModule ได้รับการนำเข้าไปยังเซสชันปัจจุบัน
New-Module -ScriptBlock {function Hello {"Hello!"}} -name GreetingModule | Import-Module
Get-Module
Name : GreetingModule
Path : d54dfdac-4531-4db2-9dec-0b4b9c57a1e5
Description :
Guid : 00000000-0000-0000-0000-000000000000
Version : 0.0
ModuleBase :
ModuleType : Script
PrivateData :
AccessMode : ReadWrite
ExportedAliases : {}
ExportedCmdlets : {}
ExportedFunctions : {[Hello, Hello]}
ExportedVariables : {}
NestedModules : {}
Get-Command hello
CommandType Name Definition
----------- ---- ----------
Function Hello "Hello!"Get-Command cmdlet แสดงฟังก์ชัน Hello ที่โมดูลไดนามิกส่งออก
ตัวอย่างที่ 5: สร้างออบเจ็กต์แบบกำหนดเองที่มีฟังก์ชันที่ส่งออก
ตัวอย่างนี้แสดงวิธีใช้พารามิเตอร์ AsCustomObject ของ New-Module เพื่อสร้างออบเจ็กต์ที่กำหนดเองซึ่งมีวิธีสคริปต์ที่แสดงถึงฟังก์ชันที่ส่งออก
New-Module cmdlet สร้างโมดูลแบบไดนามิกที่มีสองฟังก์ชัน Hello และ Goodbye พารามิเตอร์ AsCustomObject จะสร้างออบเจ็กต์แบบกำหนดเองแทนออบเจ็กต์ PSModuleInfo ที่ New-Module สร้างขึ้นตามค่าเริ่มต้น ออบเจ็กต์แบบกำหนดเองนี้บันทึกไว้ในตัวแปร $m ดูเหมือนว่าตัวแปร $m จะไม่มีค่าที่กำหนด
$m = New-Module -ScriptBlock {
function Hello ($name) {"Hello, $name"}
function Goodbye ($name) {"Goodbye, $name"}
} -AsCustomObject
$m
$m | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Goodbye ScriptMethod System.Object Goodbye();
Hello ScriptMethod System.Object Hello();
$m.goodbye("Jane")
Goodbye, Jane
$m.hello("Manoj")
Hello, Manoj
การไพพ์ $m ไปยัง Get-Member cmdlet จะแสดงคุณสมบัติและวิธีการของออบเจ็กต์ที่กำหนดเอง ผลลัพธ์แสดงให้เห็นว่าวัตถุมีวิธีสคริปต์ที่แสดงถึงฟังก์ชัน Hello และ Goodbye สุดท้าย เราเรียกเมธอดสคริปต์เหล่านี้และแสดงผลลัพธ์
ตัวอย่างที่ 6: รับผลลัพธ์ของบล็อกสคริปต์
ตัวอย่างนี้ใช้พารามิเตอร์ ReturnResult เพื่อขอผลลัพธ์ของการเรียกใช้บล็อกสคริปต์แทนที่จะขอออบเจ็กต์โมดูล บล็อกสคริปต์ในโมดูลใหม่กำหนดฟังก์ชัน SayHello จากนั้นจึงเรียกใช้ฟังก์ชัน
New-Module -ScriptBlock {function SayHello {"Hello, World!"}; SayHello} -ReturnResult
Hello, World!พารามิเตอร์
-ArgumentList
ระบุอาร์เรย์ของอาร์กิวเมนต์ซึ่งเป็นค่าพารามิเตอร์ที่ส่งผ่านไปยังบล็อกสคริปต์ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับลักษณะการทำงานของ ArgumentList โปรดดู about_Splatting
- พิมพ์ :
Object[]
- นามแฝง :
Args
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-AsCustomObject
บ่งชี้ว่า cmdlet นี้ส่งคืนวัตถุแบบกำหนดเองที่แสดงถึงโมดูลไดนามิก สมาชิกของโมดูลถูกนำมาใช้เป็นวิธีการสคริปต์ของออบเจ็กต์แบบกำหนดเอง แต่จะไม่ถูกนำเข้าเข้าสู่เซสชัน คุณสามารถบันทึกออบเจ็กต์แบบกำหนดเองในตัวแปรและใช้เครื่องหมายจุดเพื่อเรียกใช้สมาชิกได้
หากโมดูลมีสมาชิกหลายคนที่มีชื่อเหมือนกัน เช่น ฟังก์ชันและตัวแปรที่มีชื่อ A ทั้งคู่ คุณจะสามารถเข้าถึงสมาชิกเพียงคนเดียวเท่านั้นที่แต่ละชื่อสามารถเข้าถึงได้จากออบเจ็กต์แบบกำหนดเอง
- พิมพ์ :
SwitchParameter
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-Cmdlet
ระบุอาร์เรย์ของ cmdlet ที่ cmdlet นี้ส่งออกจากโมดูลไปยังเซสชันปัจจุบัน ป้อนรายการ cmdlet ที่คั่นด้วยเครื่องหมายจุลภาค อนุญาตให้ใช้อักขระตัวแทนได้ ตามค่าเริ่มต้น cmdlet ทั้งหมดในโมดูลจะถูกส่งออก
คุณไม่สามารถกำหนด cmdlets ในบล็อกสคริปต์ได้ แต่โมดูลไดนามิกสามารถรวม cmdlets ได้หากนำเข้า cmdlets จากโมดูลไบนารี
- พิมพ์ :
String[]
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-Function
ระบุอาร์เรย์ของฟังก์ชันที่ cmdlet นี้ส่งออกจากโมดูลไปยังเซสชันปัจจุบัน ป้อนรายการฟังก์ชันที่คั่นด้วยเครื่องหมายจุลภาค อนุญาตให้ใช้อักขระตัวแทนได้ ตามค่าเริ่มต้น ฟังก์ชันทั้งหมดที่กำหนดไว้ในโมดูลจะถูกส่งออก
- พิมพ์ :
String[]
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
True
-Name
ระบุชื่อสำหรับโมดูลใหม่ คุณยังสามารถไปป์ชื่อโมดูลไปที่ New-Module
ค่าเริ่มต้นคือชื่อที่สร้างขึ้นอัตโนมัติซึ่งขึ้นต้นด้วย __DynamicModule_ และตามด้วย GUID ที่ระบุเส้นทางของโมดูลไดนามิก
- พิมพ์ :
String
- ตำแหน่ง:
0
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
True
- ยอมรับอินพุตไปป์ไลน์:
True
- ยอมรับอักขระตัวแทน:
False
-ReturnResult
บ่งชี้ว่า cmdlet นี้รันบล็อกสคริปต์และส่งกลับผลลัพธ์บล็อกสคริปต์แทนที่จะส่งกลับวัตถุโมดูล
- พิมพ์ :
SwitchParameter
- ตำแหน่ง:
ตั้งชื่อ
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
False
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
-ScriptBlock
ระบุเนื้อหาของโมดูลไดนามิก ใส่เนื้อหาในวงเล็บปีกกา ({}) เพื่อสร้างบล็อกสคริปต์ จำเป็นต้องมีพารามิเตอร์นี้
- พิมพ์ :
ScriptBlock
- ตำแหน่ง:
1
- ค่าเริ่มต้น:
None
- ที่จำเป็น:
True
- ยอมรับอินพุตไปป์ไลน์:
False
- ยอมรับอักขระตัวแทน:
False
อินพุต
สตริง
คุณสามารถไปป์ชื่อโมดูลไปที่ cmdlet นี้
เอาท์พุต
PSModuleInfo
cmdlet นี้สร้างวัตถุ PSModuleInfo ตามค่าเริ่มต้น
PSCustomObject
หากคุณใช้พารามิเตอร์ AsCustomObject จะสร้างออบเจ็กต์ PSCustomObject
วัตถุ
หากคุณใช้พารามิเตอร์ ReturnResult cmdlet นี้จะส่งคืนผลลัพธ์ของการประเมินบล็อกสคริปต์ในโมดูลไดนามิก
หมายเหตุ
PowerShell มีนามแฝงต่อไปนี้สำหรับ New-Module:
ทุกแพลตฟอร์ม:
nmo