ค้นหาเว็บไซต์

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

บทความที่เกี่ยวข้อง