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

Add-Type (Microsoft.PowerShell.Utility)


Add-Type

โมดูล :
Microsoft.PowerShell.Utility

เพิ่มคลาส Microsoft .NET ให้กับเซสชัน PowerShell

ไวยากรณ์

Add-Type
   [-TypeDefinition] <String>
   [-Language <Language>]
   [-ReferencedAssemblies <String[]>]
   [-OutputAssembly <String>]
   [-OutputType <OutputAssemblyType>]
   [-PassThru]
   [-IgnoreWarnings]
   [-CompilerOptions <String[]>]
   [<CommonParameters>]
Add-Type
   [-Name] <String>
   [-MemberDefinition] <String[]>
   [-Namespace <String>]
   [-UsingNamespace <String[]>]
   [-Language <Language>]
   [-ReferencedAssemblies <String[]>]
   [-OutputAssembly <String>]
   [-OutputType <OutputAssemblyType>]
   [-PassThru]
   [-IgnoreWarnings]
   [-CompilerOptions <String[]>]
   [<CommonParameters>]
Add-Type
   [-Path] <String[]>
   [-ReferencedAssemblies <String[]>]
   [-OutputAssembly <String>]
   [-OutputType <OutputAssemblyType>]
   [-PassThru]
   [-IgnoreWarnings]
   [-CompilerOptions <String[]>]
   [<CommonParameters>]
Add-Type
   -LiteralPath <String[]>
   [-ReferencedAssemblies <String[]>]
   [-OutputAssembly <String>]
   [-OutputType <OutputAssemblyType>]
   [-PassThru]
   [-IgnoreWarnings]
   [-CompilerOptions <String[]>]
   [<CommonParameters>]
Add-Type
   -AssemblyName <String[]>
   [-PassThru]
   [<CommonParameters>]

คำอธิบาย

Add-Type cmdlet ช่วยให้คุณกำหนดคลาส Microsoft .NET Core ในเซสชัน PowerShell ของคุณ จากนั้นคุณสามารถยกตัวอย่างวัตถุได้โดยใช้ cmdlet New-Object และใช้วัตถุเช่นเดียวกับที่คุณใช้วัตถุ .NET Core ใดๆ หากคุณเพิ่มคำสั่ง Add-Type ลงในโปรไฟล์ PowerShell ของคุณ คลาสจะพร้อมใช้งานในเซสชัน PowerShell ทั้งหมด

คุณสามารถระบุประเภทได้โดยการระบุแอสเซมบลีหรือไฟล์ซอร์สโค้ดที่มีอยู่ หรือคุณสามารถระบุซอร์สโค้ดแบบอินไลน์หรือบันทึกไว้ในตัวแปรก็ได้ คุณยังสามารถระบุเฉพาะวิธีการและ Add-Type กำหนดและสร้างคลาสได้ บน Windows คุณสามารถใช้คุณสมบัตินี้เพื่อทำการเรียก Platform (P/Inrigg) ไปยังฟังก์ชันที่ไม่มีการจัดการใน PowerShell หากคุณระบุซอร์สโค้ด Add-Type จะคอมไพล์ซอร์สโค้ดที่ระบุและสร้างแอสเซมบลีในหน่วยความจำที่มีประเภท .NET Core ใหม่

คุณสามารถใช้พารามิเตอร์ของ Add-Type เพื่อระบุภาษาอื่นและคอมไพเลอร์ C# เป็นค่าเริ่มต้น ตัวเลือกคอมไพเลอร์ การพึ่งพาแอสเซมบลี เนมสเปซคลาส ชื่อของประเภท และแอสเซมบลีผลลัพธ์

เริ่มต้นใน PowerShell 7 Add-Type จะไม่คอมไพล์ประเภทหากมีประเภทที่มีชื่อเดียวกันอยู่แล้ว นอกจากนี้ Add-Type จะค้นหาแอสเซมบลีในโฟลเดอร์ ref ใต้โฟลเดอร์ที่มี pwsh.dll

ตัวอย่าง

ตัวอย่างที่ 1: เพิ่มประเภท .NET ให้กับเซสชัน

ตัวอย่างนี้เพิ่มคลาส BasicTest ให้กับเซสชันโดยการระบุซอร์สโค้ดที่จัดเก็บไว้ในตัวแปร คลาส BasicTest ใช้เพื่อเพิ่มจำนวนเต็ม สร้างวัตถุ และคูณจำนวนเต็ม

$Source = @"
public class BasicTest
{
  public static int Add(int a, int b)
    {
        return (a + b);
    }
  public int Multiply(int a, int b)
    {
    return (a * b);
    }
}
"@

Add-Type -TypeDefinition $Source
[BasicTest]::Add(4, 3)
$BasicTestObject = New-Object BasicTest
$BasicTestObject.Multiply(5, 2)

ตัวแปร $Source เก็บซอร์สโค้ดสำหรับชั้นเรียน ประเภทนี้มีวิธีการแบบคงที่ที่เรียกว่า เพิ่ม และวิธีที่ไม่คงที่ที่เรียกว่า คูณ

Add-Type cmdlet เพิ่มคลาสในเซสชัน เนื่องจากใช้ซอร์สโค้ดอินไลน์ คำสั่งจึงใช้พารามิเตอร์ TypeDefinition เพื่อระบุโค้ดในตัวแปร $Source

วิธีการ เพิ่ม แบบคงที่ของคลาส BasicTest ใช้อักขระโคลอนคู่ (::) เพื่อระบุสมาชิกแบบคงที่ของชั้นเรียน จำนวนเต็มจะถูกบวกและแสดงผลรวม

New-Object cmdlet สร้างอินสแตนซ์ของคลาส BasicTest โดยจะบันทึกออบเจ็กต์ใหม่ในตัวแปร $BasicTestObject

$BasicTestObject ใช้เมธอด คูณ จำนวนเต็มจะถูกคูณและผลิตภัณฑ์จะปรากฏขึ้น

ตัวอย่างที่ 2: ตรวจสอบประเภทที่เพิ่ม

ตัวอย่างนี้ใช้ cmdlet Get-Member เพื่อตรวจสอบออบเจ็กต์ที่ cmdlet Add-Type และ New-Object สร้างขึ้นใน ตัวอย่างที่ 1 .

[BasicTest] | Get-Member

TypeName: System.RuntimeType

Name                 MemberType Definition
----                 ---------- ----------
AsType               Method     type AsType()
Clone                Method     System.Object Clone(), System.Object ICloneable.Clone()
Equals               Method     bool Equals(System.Object obj), bool Equals(type o)
FindInterfaces       Method     type[] FindInterfaces(System.Reflection.TypeFilter filter...
...

[BasicTest] | Get-Member -Static

TypeName: BasicTest

Name            MemberType Definition
----            ---------- ----------
Add             Method     static int Add(int a, int b)
Equals          Method     static bool Equals(System.Object objA, System.Object objB)
new             Method     BasicTest new()
ReferenceEquals Method     static bool ReferenceEquals(System.Object objA, System.Object objB)

$BasicTestObject | Get-Member

TypeName: BasicTest

Name        MemberType Definition
----        ---------- ----------
Equals      Method     bool Equals(System.Object obj)
GetHashCode Method     int GetHashCode()
GetType     Method     type GetType()
Multiply    Method     int Multiply(int a, int b)
ToString    Method     string ToString()

Get-Member cmdlet รับประเภทและสมาชิกของคลาส BasicTest ที่ Add-Type เพิ่มในเซสชัน คำสั่ง Get-Member เปิดเผยว่าเป็นอ็อบเจ็กต์ System.RuntimeType ซึ่งได้มาจากคลาส System.Object

พารามิเตอร์ Get-Member Static รับคุณสมบัติคงที่และวิธีการของคลาส BasicTest ผลลัพธ์แสดงให้เห็นว่ามีการรวมวิธี Add ไว้ด้วย

Get-Member cmdlet รับสมาชิกของออบเจ็กต์ที่จัดเก็บไว้ในตัวแปร $BasicTestObject $BasicTestObject ถูกสร้างขึ้นโดยใช้ cmdlet New-Object พร้อมด้วยคลาส BasicTest ผลลัพธ์เผยให้เห็นว่าค่าของตัวแปร $BasicTestObject เป็นอินสแตนซ์ของคลาส BasicTest และมีสมาชิกชื่อ คูณ

ตัวอย่างที่ 3: เพิ่มประเภทจากชุดประกอบ

ตัวอย่างนี้เพิ่มคลาสจากแอสเซมบลี JsonSchema.NET.dll ไปยังเซสชันปัจจุบัน

Set-Location -Path $PSHOME
$AccType = Add-Type -AssemblyName *jsonschema* -PassThru

Set-Location ใช้พารามิเตอร์ Path เพื่อระบุตัวแปร $PSHOME ตัวแปรอ้างอิงถึงไดเร็กทอรีการติดตั้ง PowerShell ซึ่งมีไฟล์ DLL อยู่

ตัวแปร $AccType เก็บวัตถุที่สร้างขึ้นด้วย cmdlet Add-Type Add-Type ใช้พารามิเตอร์ AssemblyName เพื่อระบุชื่อของแอสเซมบลี อักขระตัวแทนเครื่องหมายดอกจัน (*) ช่วยให้คุณได้ชุดประกอบที่ถูกต้อง แม้ว่าคุณจะไม่แน่ใจชื่อหรือตัวสะกดก็ตาม พารามิเตอร์ PassThru จะสร้างออบเจ็กต์ที่แสดงถึงคลาสที่เพิ่มในเซสชัน

ตัวอย่างที่ 4: เรียก Windows API ดั้งเดิม

ตัวอย่างนี้สาธิตวิธีการเรียก Windows API ดั้งเดิมใน PowerShell Add-Type ใช้กลไกการเรียกใช้แพลตฟอร์ม (P/Inrigg) เพื่อเรียกใช้ฟังก์ชันใน User32.dll จาก PowerShell ตัวอย่างนี้ใช้ได้กับคอมพิวเตอร์ที่ใช้ระบบปฏิบัติการ Windows เท่านั้น

$Signature = @"
[DllImport("user32.dll")]public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
"@

$addTypeSplat = @{
    MemberDefinition = $Signature
    Name = "Win32ShowWindowAsync"
    Namespace = 'Win32Functions'
    PassThru = $true
}
$ShowWindowAsync = Add-Type @addTypeSplat

# Minimize the PowerShell console

$ShowWindowAsync::ShowWindowAsync((Get-Process -Id $pid).MainWindowHandle, 2)

# Restore the PowerShell console

$ShowWindowAsync::ShowWindowAsync((Get-Process -Id $Pid).MainWindowHandle, 4)

ตัวแปร $Signature เก็บลายเซ็น C# ของฟังก์ชัน ShowWindowAsync เพื่อให้แน่ใจว่าวิธีการผลลัพธ์จะปรากฏในเซสชัน PowerShell คำสำคัญ public จะถูกเพิ่มลงในลายเซ็นมาตรฐาน สำหรับข้อมูลเพิ่มเติม โปรดดูที่ฟังก์ชัน ShowWindowAsync

ตัวแปร $ShowWindowAsync จะจัดเก็บออบเจ็กต์ที่สร้างโดยพารามิเตอร์ Add-Type PassThru Add-Type cmdlet เพิ่มฟังก์ชัน ShowWindowAsync ให้กับเซสชัน PowerShell เป็นวิธีแบบคงที่ คำสั่งใช้พารามิเตอร์ MemberDefinition เพื่อระบุคำจำกัดความของวิธีการที่บันทึกไว้ในตัวแปร $Signature คำสั่งใช้พารามิเตอร์ ชื่อ และ เนมสเปซ เพื่อระบุชื่อและเนมสเปซสำหรับคลาส พารามิเตอร์ PassThru จะสร้างออบเจ็กต์ที่แสดงถึงประเภท

วิธีการคงที่ ShowWindowAsync ใหม่ถูกใช้ในคำสั่งเพื่อย่อขนาดและคืนค่าคอนโซล PowerShell วิธีการนี้ใช้พารามิเตอร์สองตัว: หมายเลขอ้างอิงของหน้าต่าง และจำนวนเต็มที่ระบุวิธีการแสดงหน้าต่าง

หากต้องการย่อขนาดคอนโซล PowerShell ให้เล็กสุด ShowWindowAsync จะใช้ Get-Process cmdlet พร้อมด้วยตัวแปรอัตโนมัติ $PID เพื่อรับกระบวนการที่โฮสต์ PowerShell ปัจจุบัน การประชุม. จากนั้นจะใช้คุณสมบัติ MainWindowHandle ของกระบวนการปัจจุบันและค่า 2 ซึ่งแสดงถึงค่า SW_MINIMIZE

หากต้องการคืนค่าหน้าต่าง ShowWindowAsync จะใช้ค่า 4 สำหรับตำแหน่งหน้าต่าง ซึ่งแสดงถึงค่า SW_RESTORE

หากต้องการขยายหน้าต่างให้ใหญ่สุด ให้ใช้ค่า 3 ที่แสดงถึง SW_MAXIMIZE

พารามิเตอร์

-AssemblyName

ระบุชื่อของแอสเซมบลีที่มีชนิดต่างๆ Add-Type รับประเภทจากชุดประกอบที่ระบุ พารามิเตอร์นี้จำเป็นเมื่อคุณสร้างประเภทตามชื่อแอสเซมบลี

ป้อนชื่อเต็มหรือชื่อธรรมดา หรือที่เรียกว่าชื่อบางส่วนของแอสเซมบลี อนุญาตให้ใช้อักขระตัวแทนในชื่อชุดประกอบ หากคุณป้อนชื่อที่เรียบง่ายหรือบางส่วน Add-Type จะแก้ไขให้เป็นชื่อเต็ม จากนั้นใช้ชื่อเต็มเพื่อโหลดแอสเซมบลี

การใช้พารามิเตอร์ Path หรือ LiteralPath รับประกันว่าคุณกำลังโหลดแอสเซมบลีที่คุณต้องการโหลด เมื่อคุณใช้พารามิเตอร์ AssemblyName PowerShell จะขอให้ .NET แก้ไขชื่อแอสเซมบลีโดยใช้กระบวนการแก้ไขแอสเซมบลี .NET มาตรฐาน เนื่องจาก .NET ค้นหาโฟลเดอร์แอปพลิเคชันก่อน Add-Type อาจโหลดแอสเซมบลีจาก $PSHOME แทนที่จะเป็นเวอร์ชันในโฟลเดอร์ปัจจุบัน สำหรับข้อมูลเพิ่มเติม โปรดดูสถานที่ประกอบ

หาก .NET ไม่สามารถแก้ไขชื่อได้ PowerShell จะค้นหาตำแหน่งปัจจุบันเพื่อค้นหาแอสเซมบลี เมื่อคุณใช้อักขระตัวแทนในพารามิเตอร์ AssemblyName กระบวนการแก้ไขแอสเซมบลี .NET ล้มเหลวทำให้ PowerShell ค้นหาในตำแหน่งปัจจุบัน

พิมพ์ :

String[]

นามแฝง :

AN

ตำแหน่ง:

ตั้งชื่อ

ค่าเริ่มต้น:

None

ที่จำเป็น:

True

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

True

-CompilerOptions

ระบุตัวเลือกสำหรับคอมไพลเลอร์ซอร์สโค้ด ตัวเลือกเหล่านี้จะถูกส่งไปยังคอมไพเลอร์โดยไม่มีการแก้ไข

พารามิเตอร์นี้อนุญาตให้คุณสั่งให้คอมไพลเลอร์สร้างไฟล์ปฏิบัติการ ทรัพยากรที่ฝังไว้ หรือตั้งค่าตัวเลือกบรรทัดคำสั่ง เช่น ตัวเลือก /unsafe

พิมพ์ :

String[]

ตำแหน่ง:

ตั้งชื่อ

ค่าเริ่มต้น:

None

ที่จำเป็น:

False

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-IgnoreWarnings

ละเว้นคำเตือนของคอมไพเลอร์ ใช้พารามิเตอร์นี้เพื่อป้องกันไม่ให้ Add-Type จัดการกับคำเตือนของคอมไพเลอร์ว่าเป็นข้อผิดพลาด

พิมพ์ :

SwitchParameter

ตำแหน่ง:

ตั้งชื่อ

ค่าเริ่มต้น:

False

ที่จำเป็น:

False

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-Language

ระบุภาษาที่ใช้ในซอร์สโค้ด ค่าที่ยอมรับได้สำหรับพารามิเตอร์นี้คือ CSharp

พิมพ์ :

ภาษา

ค่าที่ยอมรับ:

ซีชาร์ป

ตำแหน่ง:

ตั้งชื่อ

ค่าเริ่มต้น:

ซีชาร์ป

ที่จำเป็น:

False

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-LiteralPath

ระบุเส้นทางไปยังไฟล์ซอร์สโค้ดหรือไฟล์ DLL แอสเซมบลีที่มีประเภทต่างๆ ต่างจาก เส้นทาง ค่าของพารามิเตอร์ LiteralPath จะถูกใช้ตรงตามที่พิมพ์ทุกประการ ไม่มีอักขระใดที่ถูกตีความว่าเป็นไวด์การ์ด หากเส้นทางมีอักขระเลี่ยง ให้ใส่เครื่องหมายคำพูดเดี่ยว เครื่องหมายคำพูดเดี่ยวบอกให้ PowerShell ไม่ต้องตีความอักขระใดๆ เป็นลำดับหลีก

การใช้พารามิเตอร์ Path หรือ LiteralPath รับประกันว่าคุณกำลังโหลดแอสเซมบลีที่คุณต้องการโหลด

พิมพ์ :

String[]

นามแฝง :

PSPath, LP

ตำแหน่ง:

ตั้งชื่อ

ค่าเริ่มต้น:

None

ที่จำเป็น:

True

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-MemberDefinition

ระบุคุณสมบัติหรือวิธีการใหม่สำหรับชั้นเรียน Add-Type สร้างโค้ดเทมเพลตที่จำเป็นในการสนับสนุนคุณสมบัติหรือเมธอด

บน Windows คุณสามารถใช้คุณสมบัตินี้เพื่อทำการเรียก Platform (P/Inrigg) ไปยังฟังก์ชันที่ไม่มีการจัดการใน PowerShell

พิมพ์ :

String[]

ตำแหน่ง:

1

ค่าเริ่มต้น:

None

ที่จำเป็น:

True

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-Name

ระบุชื่อของคลาสที่จะสร้าง พารามิเตอร์นี้จำเป็นเมื่อสร้างประเภทจากคำจำกัดความสมาชิก

ชื่อประเภทและเนมสเปซต้องไม่ซ้ำกันภายในเซสชัน คุณไม่สามารถยกเลิกการโหลดประเภทหรือเปลี่ยนแปลงได้ หากต้องการเปลี่ยนรหัสสำหรับประเภท คุณต้องเปลี่ยนชื่อหรือเริ่มเซสชัน PowerShell ใหม่ มิฉะนั้นคำสั่งจะล้มเหลว

พิมพ์ :

String

ตำแหน่ง:

0

ค่าเริ่มต้น:

None

ที่จำเป็น:

True

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-Namespace

ระบุเนมสเปซสำหรับประเภท

หากพารามิเตอร์นี้ไม่รวมอยู่ในคำสั่ง ชนิดจะถูกสร้างขึ้นในเนมสเปซ Microsoft.PowerShell.Commands.AddType.AutoGeneratedTypes หากพารามิเตอร์ถูกรวมไว้ในคำสั่งที่มีค่าสตริงว่างหรือค่า $Null ประเภทจะถูกสร้างขึ้นในเนมสเปซส่วนกลาง

พิมพ์ :

String

นามแฝง :

NS

ตำแหน่ง:

ตั้งชื่อ

ค่าเริ่มต้น:

None

ที่จำเป็น:

False

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-OutputAssembly

สร้างไฟล์ DLL สำหรับแอสเซมบลีที่มีชื่อที่ระบุในตำแหน่ง ป้อนเส้นทางและชื่อไฟล์เพิ่มเติม อนุญาตให้ใช้อักขระตัวแทนได้ ตามค่าเริ่มต้น Add-Type จะสร้างแอสเซมบลีในหน่วยความจำเท่านั้น

พิมพ์ :

String

นามแฝง :

OA

ตำแหน่ง:

ตั้งชื่อ

ค่าเริ่มต้น:

None

ที่จำเป็น:

False

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

True

-OutputType

ระบุประเภทเอาต์พุตของชุดประกอบเอาต์พุต ตามค่าเริ่มต้น ไม่มีการระบุประเภทเอาต์พุต พารามิเตอร์นี้ใช้ได้เฉพาะเมื่อมีการระบุชุดประกอบเอาต์พุตในคำสั่ง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับค่า โปรดดูการแจงนับ OutputAssemblyType

ค่าที่ยอมรับได้สำหรับพารามิเตอร์นี้มีดังนี้:

    ConsoleApplication
    Library
    WindowsApplication

มันเป็นสิ่งสำคัญ

ใน PowerShell 7.1 ไม่รองรับ ConsoleApplication และ WindowsApplication และ PowerShell จะแสดงข้อผิดพลาดในการยุติหากมีการระบุเป็นค่าสำหรับพารามิเตอร์ OutputType

พิมพ์ :

ประเภทการประกอบเอาท์พุต

นามแฝง :

OT

ค่าที่ยอมรับ:

ConsoleApplication, ไลบรารี, WindowsApplication

ตำแหน่ง:

ตั้งชื่อ

ค่าเริ่มต้น:

None

ที่จำเป็น:

False

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-PassThru

ส่งกลับวัตถุ System.Runtime ที่แสดงถึงประเภทที่ถูกเพิ่ม ตามค่าเริ่มต้น cmdlet นี้ไม่สร้างผลลัพธ์ใดๆ

พิมพ์ :

SwitchParameter

ตำแหน่ง:

ตั้งชื่อ

ค่าเริ่มต้น:

False

ที่จำเป็น:

False

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-Path

ระบุเส้นทางไปยังไฟล์ซอร์สโค้ดหรือไฟล์ DLL แอสเซมบลีที่มีประเภทต่างๆ

หากคุณส่งไฟล์ซอร์สโค้ด Add-Type จะคอมไพล์โค้ดในไฟล์และสร้างแอสเซมบลีประเภทในหน่วยความจำ นามสกุลไฟล์ที่ระบุในค่า เส้นทาง จะกำหนดคอมไพลเลอร์ที่ Add-Type ใช้

การใช้พารามิเตอร์ Path หรือ LiteralPath รับประกันว่าคุณกำลังโหลดแอสเซมบลีที่คุณต้องการโหลด

พิมพ์ :

String[]

ตำแหน่ง:

0

ค่าเริ่มต้น:

None

ที่จำเป็น:

True

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-ReferencedAssemblies

ระบุแอสเซมบลีที่ชนิดขึ้นอยู่กับ ตามค่าเริ่มต้น Add-Type อ้างอิงถึง System.dll และ System.Management.Automation.dll แอสเซมบลีที่คุณระบุโดยใช้พารามิเตอร์นี้จะถูกอ้างอิงเพิ่มเติมจากแอสเซมบลีเริ่มต้น

เริ่มต้นใน PowerShell 6 ReferencedAssemblies จะไม่รวมแอสเซมบลี .NET เริ่มต้น คุณต้องรวมการอ้างอิงเฉพาะในค่าที่ส่งไปยังพารามิเตอร์นี้

พิมพ์ :

String[]

นามแฝง :

RA

ตำแหน่ง:

ตั้งชื่อ

ค่าเริ่มต้น:

None

ที่จำเป็น:

False

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-TypeDefinition

ระบุซอร์สโค้ดที่มีคำจำกัดความของประเภท ป้อนซอร์สโค้ดในสตริงหรือสตริงที่นี่ หรือป้อนตัวแปรที่มีซอร์สโค้ด สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสตริงที่นี่ โปรดดูที่ about_Quoting_Rules

รวมการประกาศเนมสเปซในคำจำกัดความประเภทของคุณ หากคุณละเว้นการประกาศเนมสเปซ ประเภทของคุณอาจมีชื่อเหมือนกับประเภทอื่นหรือมีทางลัดสำหรับประเภทอื่น ทำให้เกิดการเขียนทับโดยไม่ได้ตั้งใจ ตัวอย่างเช่น หากคุณกำหนดประเภทที่เรียกว่า ข้อยกเว้น สคริปต์ที่ใช้ ข้อยกเว้น เป็นทางลัดสำหรับ System.Exception จะล้มเหลว

พิมพ์ :

String

ตำแหน่ง:

0

ค่าเริ่มต้น:

None

ที่จำเป็น:

True

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

-UsingNamespace

ระบุเนมสเปซอื่นที่จำเป็นสำหรับคลาส ซึ่งคล้ายกับคำหลัก C# การใช้

ตามค่าเริ่มต้น Add-Type อ้างอิงเนมสเปซ ระบบ เมื่อใช้พารามิเตอร์ MemberDefinition Add-Type จะอ้างอิงเนมสเปซ System.Runtime.InteropServices ตามค่าเริ่มต้นด้วย เนมสเปซที่คุณเพิ่มโดยใช้พารามิเตอร์ UsingNamespace จะถูกอ้างอิงนอกเหนือจากเนมสเปซเริ่มต้น

พิมพ์ :

String[]

นามแฝง :

Using

ตำแหน่ง:

ตั้งชื่อ

ค่าเริ่มต้น:

เนมสเปซของระบบ

ที่จำเป็น:

False

ยอมรับอินพุตไปป์ไลน์:

False

ยอมรับอักขระตัวแทน:

False

อินพุต

ไม่มี

คุณไม่สามารถไปป์วัตถุกับ cmdlet นี้

เอาท์พุต

ไม่มี

ตามค่าเริ่มต้น cmdlet นี้จะส่งกลับไม่มีผลลัพธ์

ประเภท

เมื่อคุณใช้พารามิเตอร์ PassThru cmdlet นี้จะส่งคืนออบเจ็กต์ System.Type ที่แสดงประเภทใหม่

หมายเหตุ

ประเภทที่คุณเพิ่มมีอยู่ในเซสชันปัจจุบันเท่านั้น หากต้องการใช้ประเภทในเซสชันทั้งหมด ให้เพิ่มลงในโปรไฟล์ PowerShell ของคุณ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโปรไฟล์ โปรดดู about_Profiles

ชื่อประเภทและเนมสเปซต้องไม่ซ้ำกันภายในเซสชัน คุณไม่สามารถยกเลิกการโหลดประเภทหรือเปลี่ยนแปลงได้ หากคุณต้องการเปลี่ยนรหัสสำหรับประเภท คุณต้องเปลี่ยนชื่อหรือเริ่มเซสชัน PowerShell ใหม่ มิฉะนั้นคำสั่งจะล้มเหลว

ใน Windows PowerShell (เวอร์ชัน 5.1 และต่ำกว่า) คุณต้องใช้ Add-Type สำหรับอะไรก็ตามที่ยังไม่ได้โหลด โดยทั่วไปสิ่งนี้ใช้กับแอสเซมบลีที่พบใน Global Assembly Cache (GAC) ใน PowerShell 6 และสูงกว่านั้น ไม่มี GAC ดังนั้น PowerShell จึงติดตั้งแอสเซมบลีของตัวเองใน $PSHOME แอสเซมบลีเหล่านี้จะถูกโหลดโดยอัตโนมัติตามคำขอ ดังนั้นจึงไม่จำเป็นต้องใช้ Add-Type เพื่อโหลด อย่างไรก็ตาม การใช้ Add-Type ยังคงได้รับอนุญาตให้อนุญาตให้สคริปต์เข้ากันได้กับ PowerShell เวอร์ชันใดก็ได้โดยปริยาย

แอสเซมบลีใน GAC สามารถโหลดได้ตามชื่อประเภท แทนที่จะโหลดตามเส้นทาง การโหลดแอสเซมบลีจากเส้นทางที่กำหนดเองต้องใช้ Add-Type เนื่องจากแอสเซมบลีเหล่านั้นไม่สามารถโหลดได้โดยอัตโนมัติ

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