การสร้างผู้ให้บริการคอนเทนเนอร์ Windows PowerShell
หัวข้อนี้อธิบายวิธีการสร้างผู้ให้บริการ Windows PowerShell ที่สามารถทำงานกับที่เก็บข้อมูลแบบหลายชั้นได้ สำหรับการจัดเก็บข้อมูลประเภทนี้ ระดับบนสุดของร้านค้าจะมีรายการรูท และแต่ละระดับต่อมาจะเรียกว่าโหนดของรายการลูก ด้วยการอนุญาตให้ผู้ใช้ทำงานบนโหนดลูกเหล่านี้ ผู้ใช้สามารถโต้ตอบตามลำดับชั้นผ่านที่เก็บข้อมูล
ผู้ให้บริการที่สามารถทำงานกับที่เก็บข้อมูลหลายระดับจะเรียกว่าผู้ให้บริการคอนเทนเนอร์ Windows PowerShell อย่างไรก็ตาม โปรดทราบว่าผู้ให้บริการคอนเทนเนอร์ Windows PowerShell สามารถใช้ได้เฉพาะเมื่อมีคอนเทนเนอร์เดียว (ไม่มีคอนเทนเนอร์ที่ซ้อนกัน) ที่มีรายการอยู่ในนั้น หากมีคอนเทนเนอร์ที่ซ้อนกัน คุณต้องใช้ผู้ให้บริการนำทาง Windows PowerShell สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ผู้ให้บริการนำทาง Windows PowerShell ดูที่การสร้างผู้ให้บริการนำทาง Windows PowerShell
บันทึก
คุณสามารถดาวน์โหลดไฟล์ต้นฉบับ C# (AccessDBSampleProvider04.cs) สำหรับผู้ให้บริการรายนี้โดยใช้ Microsoft Windows Software Development Kit สำหรับ Windows Vista และ .NET Framework 3.0 Runtime Components สำหรับคำแนะนำในการดาวน์โหลด โปรดดูวิธีการติดตั้ง Windows PowerShell และดาวน์โหลด Windows PowerShell SDK ไฟล์ต้นฉบับที่ดาวน์โหลดมีอยู่ในไดเร็กทอรี
ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell ที่อธิบายไว้ที่นี่กำหนดฐานข้อมูลเป็นคอนเทนเนอร์เดียว โดยมีตารางและแถวของฐานข้อมูลที่กำหนดเป็นรายการของคอนเทนเนอร์
คำเตือน
โปรดทราบว่าการออกแบบนี้จะถือว่าฐานข้อมูลที่มีเขตข้อมูลที่มีรหัสชื่อ และชนิดของเขตข้อมูลนั้นเป็น LongInteger
การกำหนดคลาสผู้ให้บริการคอนเทนเนอร์ Windows PowerShell
ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell ต้องกำหนดคลาส .NET ที่ได้มาจากคลาสพื้นฐานของ System.Management.Automation.Provider.Containercmdletprovider ต่อไปนี้เป็นคำจำกัดความของคลาสสำหรับผู้ให้บริการคอนเทนเนอร์ Windows PowerShell ที่อธิบายไว้ในส่วนนี้
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : ContainerCmdletProvider
โปรดสังเกตว่าในคำนิยามคลาสนี้ แอ็ตทริบิวต์ System.Management.Automation.Provider.Cmdletproviderattribute มีพารามิเตอร์สองตัว พารามิเตอร์แรกระบุชื่อที่เป็นมิตรต่อผู้ใช้สำหรับผู้ให้บริการที่ใช้โดย Windows PowerShell พารามิเตอร์ตัวที่สองระบุความสามารถเฉพาะของ Windows PowerShell ที่ผู้ให้บริการเปิดเผยต่อรันไทม์ของ Windows PowerShell ในระหว่างการประมวลผลคำสั่ง สำหรับผู้ให้บริการรายนี้ ไม่มีการเพิ่มความสามารถเฉพาะของ Windows PowerShell
การกำหนดฟังก์ชันพื้นฐาน
ตามที่อธิบายไว้ในการออกแบบผู้ให้บริการ Windows PowerShell ของคุณ คลาส System.Management.Automation.Provider.Containercmdletprovider มาจากคลาสอื่นๆ หลายคลาสที่มีฟังก์ชันการทำงานของผู้ให้บริการที่แตกต่างกัน ดังนั้นผู้ให้บริการคอนเทนเนอร์ Windows PowerShell จำเป็นต้องกำหนดฟังก์ชันการทำงานทั้งหมดที่คลาสเหล่านั้นมีให้
เมื่อต้องการใช้ฟังก์ชันการทำงานสำหรับการเพิ่มข้อมูลการเริ่มต้นเฉพาะเซสชัน และสำหรับการปล่อยทรัพยากรที่ผู้ให้บริการใช้ โปรดดูที่ การสร้างผู้ให้บริการ Windows PowerShell ขั้นพื้นฐาน อย่างไรก็ตาม ผู้ให้บริการส่วนใหญ่ (รวมถึงผู้ให้บริการที่อธิบายไว้ที่นี่) สามารถใช้การใช้งานเริ่มต้นของฟังก์ชันนี้ที่ได้รับจาก Windows PowerShell
ในการเข้าถึงที่เก็บข้อมูล ผู้ให้บริการจะต้องใช้วิธีการของคลาสพื้นฐานของ System.Management.Automation.Provider.Drivecmdletprovider สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการเหล่านี้ โปรดดูที่การสร้างผู้ให้บริการไดรฟ์ Windows PowerShell
เมื่อต้องการจัดการรายการต่างๆ ของที่เก็บข้อมูล เช่น การรับ การตั้งค่า และการล้างรายการ ผู้ให้บริการจะต้องใช้วิธีการที่มีให้โดยคลาสพื้นฐานของ System.Management.Automation.Provider.Itemcmdletprovider สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการเหล่านี้ โปรดดูที่การสร้างตัวให้บริการรายการ Windows PowerShell
การดึงข้อมูลรายการย่อย
เมื่อต้องการดึงข้อมูลรายการลูก ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell ต้องแทนที่เมธอด System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* เพื่อรองรับการโทรจาก cmdlet Get-ChildItem วิธีนี้จะดึงรายการลูกจากที่เก็บข้อมูลและเขียนลงในไปป์ไลน์เป็นอ็อบเจ็กต์ หากมีการระบุพารามิเตอร์ recurse ของ cmdlet วิธีการดึงข้อมูลรายการย่อยทั้งหมดโดยไม่คำนึงถึงระดับที่พวกเขาอยู่ที่ระดับใด หากไม่ได้ระบุพารามิเตอร์ recurse วิธีการจะดึงข้อมูลระดับลูกเพียงระดับเดียวเท่านั้น
นี่คือการใช้งานเมธอด System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* สำหรับผู้ให้บริการรายนี้ โปรดสังเกตว่าเมธอดนี้จะดึงข้อมูลรายการลูกในตารางฐานข้อมูลทั้งหมดเมื่อเส้นทางระบุฐานข้อมูล Access และดึงข้อมูลรายการลูกจากแถวของตารางนั้นถ้าเส้นทางระบุตารางข้อมูล
protected override void GetChildItems(string path, bool recurse)
{
// If path represented is a drive then the children in the path are
// tables. Hence all tables in the drive represented will have to be
// returned
if (PathIsDrive(path))
{
foreach (DatabaseTableInfo table in GetTables())
{
WriteItemObject(table, path, true);
// if the specified item exists and recurse has been set then
// all child items within it have to be obtained as well
if (ItemExists(path) && recurse)
{
GetChildItems(path + pathSeparator + table.Name, recurse);
}
} // foreach (DatabaseTableInfo...
} // if (PathIsDrive...
else
{
// Get the table name, row number and type of path from the
// path specified
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Table)
{
// Obtain all the rows within the table
foreach (DatabaseRowInfo row in GetRows(tableName))
{
WriteItemObject(row, path + pathSeparator + row.RowNumber,
false);
} // foreach (DatabaseRowInfo...
}
else if (type == PathType.Row)
{
// In this case the user has directly specified a row, hence
// just give that particular row
DatabaseRowInfo row = GetRow(tableName, rowNumber);
WriteItemObject(row, path + pathSeparator + row.RowNumber,
false);
}
else
{
// In this case, the path specified is not valid
ThrowTerminatingInvalidPathException(path);
}
} // else
} // GetChildItems
สิ่งที่ต้องจำเกี่ยวกับการนำ GetChildItems ไปใช้
เงื่อนไขต่อไปนี้อาจนำไปใช้กับการใช้งาน System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* ของคุณ:
เมื่อกำหนดคลาสของผู้ให้บริการ ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell อาจประกาศความสามารถของผู้ให้บริการของ ExpandWildcards ตัวกรอง รวม หรือแยก จากการแจงนับ System.Management.Automation.Provider.Providercapabilities ในกรณีเหล่านี้ การใช้งานเมธอด System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* จำเป็นต้องตรวจสอบให้แน่ใจว่าเส้นทางที่ส่งผ่านไปยังเมธอดนั้นตรงตามข้อกำหนดของความสามารถที่ระบุ เมื่อต้องการทำเช่นนี้ วิธีการควรเข้าถึงคุณสมบัติที่เหมาะสม ตัวอย่างเช่น คุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Exclude* และ System.Management.Automation.Provider.Cmdletprovider.Include*
การใช้วิธีนี้ควรคำนึงถึงรูปแบบการเข้าถึงรายการใดๆ ที่อาจทำให้ผู้ใช้มองเห็นรายการได้ ตัวอย่างเช่น หากผู้ใช้มีสิทธิ์เขียนไฟล์ผ่านผู้ให้บริการ FileSystem (จัดทำโดย Windows PowerShell) แต่ไม่มีสิทธิ์อ่าน ไฟล์นั้นจะยังคงอยู่และ System.Management.Automation.Provider.Itemcmdletprovider.Itemexists* ส่งคืน
true. การใช้งานของคุณอาจต้องมีการตรวจสอบรายการหลักเพื่อดูว่าสามารถระบุรายการย่อยได้หรือไม่เมื่อเขียนหลายรายการ วิธี System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* อาจใช้เวลาสักครู่ คุณสามารถออกแบบผู้ให้บริการของคุณให้เขียนรายการโดยใช้เมธอด System.Management.Automation.Provider.Cmdletprovider.Writeitemobject* ทีละรายการ การใช้เทคนิคนี้จะนำเสนอไอเท็มให้กับผู้ใช้ในสตรีม
การใช้งาน System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* ของคุณมีหน้าที่ป้องกันการเรียกซ้ำแบบไม่สิ้นสุดเมื่อมีลิงก์แบบวงกลมและสิ่งที่คล้ายกัน ควรส่งข้อยกเว้นการยุติที่เหมาะสมเพื่อสะท้อนถึงเงื่อนไขดังกล่าว
การแนบพารามิเตอร์แบบไดนามิกกับ Get-ChildItem Cmdlet
บางครั้ง Get-ChildItem cmdlet ที่เรียก System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* จำเป็นต้องมีพารามิเตอร์เพิ่มเติมที่ระบุไว้แบบไดนามิกที่รันไทม์ เพื่อให้พารามิเตอร์แบบไดนามิกเหล่านี้ ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell ต้องใช้เมธอด System.Management.Automation.Provider.Containercmdletprovider.Getchilditemsdynamicparameters* วิธีการนี้ดึงข้อมูลพารามิเตอร์แบบไดนามิกสำหรับรายการที่เส้นทางที่ระบุ และส่งกลับวัตถุที่มีคุณสมบัติและเขตข้อมูลที่มีคุณสมบัติการแยกวิเคราะห์ที่คล้ายกับคลาส cmdlet หรือวัตถุ System.Management.Automation.Runtimedesignparameterdictionary รันไทม์ของ Windows PowerShell ใช้วัตถุที่ส่งคืนเพื่อเพิ่มพารามิเตอร์ลงใน cmdlet Get-ChildItem
ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell นี้ไม่ได้ใช้วิธีนี้ อย่างไรก็ตาม รหัสต่อไปนี้เป็นการใช้งานเริ่มต้นของวิธีนี้
การดึงชื่อรายการลูก
เมื่อต้องการดึงข้อมูลชื่อของรายการลูก ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell ต้องแทนที่เมธอด System.Management.Automation.Provider.Containercmdletprovider.Getchildnames* เพื่อรองรับการโทรจาก cmdlet Get-ChildItem เมื่อ ระบุพารามิเตอร์ชื่อแล้ว วิธีการนี้ดึงข้อมูลชื่อของรายการลูกสำหรับเส้นทางที่ระบุหรือชื่อรายการลูกสำหรับคอนเทนเนอร์ทั้งหมดถ้ามีระบุพารามิเตอร์ returnAllContainers ของ cmdlet ชื่อลูกคือส่วนใบไม้ของเส้นทาง ตัวอย่างเช่น ชื่อลูกสำหรับเส้นทาง c:\windows\system32\abc.dll คือ "abc.dll" ชื่อลูกสำหรับไดเร็กทอรี c:\windows\system32 คือ "system32"
นี่คือการใช้งานเมธอด System.Management.Automation.Provider.Containercmdletprovider.Getchildnames* สำหรับผู้ให้บริการรายนี้ โปรดสังเกตว่าวิธีการดึงชื่อตารางหากเส้นทางที่ระบุระบุฐานข้อมูล Access (ไดรฟ์) และหมายเลขแถวหากเส้นทางระบุตาราง
protected override void GetChildNames(string path,
ReturnContainers returnContainers)
{
// If the path represented is a drive, then the child items are
// tables. get the names of all the tables in the drive.
if (PathIsDrive(path))
{
foreach (DatabaseTableInfo table in GetTables())
{
WriteItemObject(table.Name, path, true);
} // foreach (DatabaseTableInfo...
} // if (PathIsDrive...
else
{
// Get type, table name and row number from path specified
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Table)
{
// Get all the rows in the table and then write out the
// row numbers.
foreach (DatabaseRowInfo row in GetRows(tableName))
{
WriteItemObject(row.RowNumber, path, false);
} // foreach (DatabaseRowInfo...
}
else if (type == PathType.Row)
{
// In this case the user has directly specified a row, hence
// just give that particular row
DatabaseRowInfo row = GetRow(tableName, rowNumber);
WriteItemObject(row.RowNumber, path, false);
}
else
{
ThrowTerminatingInvalidPathException(path);
}
} // else
} // GetChildNames
สิ่งที่ต้องจำเกี่ยวกับการนำ GetChildNames ไปใช้
เงื่อนไขต่อไปนี้อาจนำไปใช้กับการใช้งาน System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* ของคุณ:
-
เมื่อกำหนดคลาสของผู้ให้บริการ ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell อาจประกาศความสามารถของผู้ให้บริการของ ExpandWildcards ตัวกรอง รวม หรือแยก จากการแจงนับ System.Management.Automation.Provider.Providercapabilities ในกรณีเหล่านี้ การใช้งานเมธอด System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* จำเป็นต้องตรวจสอบให้แน่ใจว่าเส้นทางที่ส่งผ่านไปยังเมธอดนั้นตรงตามข้อกำหนดของความสามารถที่ระบุ เมื่อต้องการทำเช่นนี้ วิธีการควรเข้าถึงคุณสมบัติที่เหมาะสม ตัวอย่างเช่น คุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Exclude* และ System.Management.Automation.Provider.Cmdletprovider.Include*
บันทึก
ข้อยกเว้นสำหรับกฎนี้เกิดขึ้นเมื่อมีระบุพารามิเตอร์
returnAllContainersของ cmdlet ในกรณีนี้ วิธีการควรดึงชื่อลูกใดๆ สำหรับคอนเทนเนอร์ แม้ว่าจะไม่ตรงกับค่าของ System.Management.Automation.Provider.Cmdletprovider.Filter*, System.Management.Automation.Provider.Cmdletprovider.Include* หรือคุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Exclude* ตามค่าเริ่มต้น การแทนที่ของวิธีนี้ไม่ควรดึงชื่อของออบเจ็กต์ที่โดยทั่วไปถูกซ่อนจากผู้ใช้เว้นแต่จะระบุคุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Force* หากเส้นทางที่ระบุระบุคอนเทนเนอร์ คุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Force* ไม่จำเป็นต้องใช้
การใช้งาน System.Management.Automation.Provider.Containercmdletprovider.Getchildnames* ของคุณมีหน้าที่ป้องกันการเรียกซ้ำแบบไม่สิ้นสุดเมื่อมีลิงก์แบบวงกลมและสิ่งที่คล้ายกัน ควรส่งข้อยกเว้นการยุติที่เหมาะสมเพื่อสะท้อนถึงเงื่อนไขดังกล่าว
การแนบพารามิเตอร์แบบไดนามิกกับ Get-ChildItem Cmdlet (ชื่อ)
บางครั้ง Get-ChildItem cmdlet (ที่มีพารามิเตอร์ Name) จำเป็นต้องมีพารามิเตอร์เพิ่มเติมที่ระบุแบบไดนามิกที่รันไทม์ เพื่อให้พารามิเตอร์แบบไดนามิกเหล่านี้ ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell ต้องใช้เมธอด System.Management.Automation.Provider.Containercmdletprovider.Getchildnamesdynamicparameters* วิธีการนี้ดึงข้อมูลพารามิเตอร์แบบไดนามิกสำหรับรายการที่เส้นทางที่ระบุ และส่งกลับวัตถุที่มีคุณสมบัติและเขตข้อมูลที่มีแอตทริบิวต์การแยกวิเคราะห์ที่คล้ายกับคลาส cmdlet หรือวัตถุ System.Management.Automation.Runtimedesignparameterdictionary รันไทม์ของ Windows PowerShell ใช้วัตถุที่ส่งคืนเพื่อเพิ่มพารามิเตอร์ลงใน cmdlet Get-ChildItem
ผู้ให้บริการรายนี้ไม่ได้ใช้วิธีนี้ อย่างไรก็ตาม รหัสต่อไปนี้เป็นการใช้งานเริ่มต้นของวิธีนี้
การเปลี่ยนชื่อรายการ
เมื่อต้องการเปลี่ยนชื่อรายการ ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell ต้องแทนที่เมธอด System.Management.Automation.Provider.Containercmdletprovider.Renameitem* เพื่อรองรับการโทรจาก cmdlet Rename-Item วิธีการนี้จะเปลี่ยนชื่อของรายการที่เส้นทางที่ระบุเป็นชื่อใหม่ที่ระบุ ชื่อใหม่จะต้องสัมพันธ์กับรายการหลัก (คอนเทนเนอร์) เสมอ
ตัวให้บริการนี้ไม่ได้แทนที่เมธอด System.Management.Automation.Provider.Containercmdletprovider.Renameitem* อย่างไรก็ตาม ต่อไปนี้คือการใช้งานเริ่มต้น
สิ่งที่ต้องจำเกี่ยวกับการนำ RenameItem ไปใช้
เงื่อนไขต่อไปนี้อาจนำไปใช้กับการใช้งาน System.Management.Automation.Provider.Containercmdletprovider.Renameitem* ของคุณ:
เมื่อกำหนดคลาสของผู้ให้บริการ ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell อาจประกาศความสามารถของผู้ให้บริการของ ExpandWildcards ตัวกรอง รวม หรือแยก จากการแจงนับ System.Management.Automation.Provider.Providercapabilities ในกรณีเหล่านี้ การใช้งานเมธอด System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* จำเป็นต้องตรวจสอบให้แน่ใจว่าเส้นทางที่ส่งผ่านไปยังเมธอดนั้นตรงตามข้อกำหนดของความสามารถที่ระบุ เมื่อต้องการทำเช่นนี้ วิธีการควรเข้าถึงคุณสมบัติที่เหมาะสม ตัวอย่างเช่น คุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Exclude* และ System.Management.Automation.Provider.Cmdletprovider.Include*
เมธอด System.Management.Automation.Provider.Containercmdletprovider.Renameitem* มีไว้สำหรับการปรับเปลี่ยนชื่อของสินค้าเท่านั้น และไม่ใช่สำหรับการดำเนินการย้าย การใช้วิธีการของคุณควรเขียนข้อผิดพลาดหากพารามิเตอร์
newNameมีตัวคั่นเส้นทาง หรืออาจทำให้รายการเปลี่ยนตำแหน่งหลักตามค่าเริ่มต้น การแทนที่ของวิธีนี้ไม่ควรเปลี่ยนชื่อวัตถุเว้นแต่จะระบุคุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Force* หากเส้นทางที่ระบุระบุคอนเทนเนอร์ คุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Force* ไม่จำเป็นต้องใช้
การใช้งานเมธอด System.Management.Automation.Provider.Containercmdletprovider.Renameitem* ของคุณควรเรียก System.Management.Automation.Provider.Cmdletprovider.ShouldProcess และตรวจสอบค่าที่ส่งคืนก่อนทำการเปลี่ยนแปลงใดๆ กับที่เก็บข้อมูล วิธีการนี้ใช้เพื่อยืนยันการดำเนินการเมื่อมีการเปลี่ยนแปลงสถานะระบบ เช่น การเปลี่ยนชื่อไฟล์ System.Management.Automation.Provider.Cmdletprovider.ShouldProcess ส่งชื่อของทรัพยากรที่จะเปลี่ยนให้กับผู้ใช้ โดยรันไทม์ของ Windows PowerShell จะคำนึงถึงการตั้งค่าบรรทัดคำสั่งหรือตัวแปรการกำหนดลักษณะในการกำหนดสิ่งที่ควรแสดง
หลังจากการเรียก System.Management.Automation.Provider.Cmdletprovider.ShouldProcess ส่งคืน
trueแล้ว System.Management.Automation.Provider.Containercmdletprovider.Renameitem* วิธีการควรเรียก System.Management.Automation.Provider Cmdletprovider.ShouldContinue วิธีการ วิธีนี้จะส่งข้อความข้อความยืนยันไปยังผู้ใช้เพื่อให้ข้อเสนอแนะเพิ่มเติมเพื่อบอกว่าควรดำเนินการต่อไปหรือไม่ ผู้ให้บริการควรเรียก System.Management.Automation.Provider.Cmdletprovider.ShouldContinue เพื่อตรวจสอบเพิ่มเติมสำหรับการปรับเปลี่ยนระบบที่อาจเป็นอันตราย
การแนบพารามิเตอร์ไดนามิกเข้ากับ Rename-Item Cmdlet
บางครั้ง cmdlet Rename-Item จำเป็นต้องมีพารามิเตอร์เพิ่มเติมที่ระบุแบบไดนามิกขณะรันไทม์ เมื่อต้องการจัดเตรียมพารามิเตอร์แบบไดนามิกเหล่านี้ ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell ต้องใช้เมธอด System.Management.Automation.Provider.Containercmdletprovider.Renameitemdynamicparameters* วิธีการนี้ดึงข้อมูลพารามิเตอร์สำหรับรายการที่เส้นทางที่ระบุ และส่งกลับวัตถุที่มีคุณสมบัติและเขตข้อมูลที่มีแอตทริบิวต์การแยกวิเคราะห์ที่คล้ายกับคลาส cmdlet หรือวัตถุ System.Management.Automation.Runtimedesignparameterdictionary รันไทม์ของ Windows PowerShell ใช้วัตถุที่ส่งคืนเพื่อเพิ่มพารามิเตอร์ลงใน cmdlet Rename-Item
ผู้ให้บริการคอนเทนเนอร์รายนี้ไม่ได้ใช้วิธีนี้ อย่างไรก็ตาม รหัสต่อไปนี้เป็นการใช้งานเริ่มต้นของวิธีนี้
การสร้างรายการใหม่
เมื่อต้องการสร้างรายการใหม่ ผู้ให้บริการคอนเทนเนอร์ต้องใช้เมธอด System.Management.Automation.Provider.Containercmdletprovider.Newitem* เพื่อรองรับการเรียกจาก cmdlet New-Item วิธีการนี้จะสร้างรายการข้อมูลที่อยู่ในเส้นทางที่ระบุ พารามิเตอร์ type ของ cmdlet มีประเภทที่ผู้ให้บริการกำหนดสำหรับรายการใหม่ ตัวอย่างเช่น ผู้ให้บริการ FileSystem ใช้พารามิเตอร์ type ที่มีค่าเป็น "file" หรือ "directory" พารามิเตอร์ newItemValue ของ cmdlet ระบุค่าเฉพาะของผู้ให้บริการสำหรับรายการใหม่
นี่คือการใช้งานเมธอด System.Management.Automation.Provider.Containercmdletprovider.Newitem* สำหรับผู้ให้บริการรายนี้
protected override void NewItem( string path, string type, object newItemValue )
{
// Create the new item here after
// performing necessary validations
//
// WriteItemObject(newItemValue, path, false);
// Example
//
// if (ShouldProcess(path, "new item"))
// {
// // Create a new item and then call WriteObject
// WriteObject(newItemValue, path, false);
// }
} // NewItem
{
case 1:
{
string name = pathChunks[0];
if (TableNameIsValid(name))
{
tableName = name;
retVal = PathType.Table;
}
}
break;
case 2:
{
string name = pathChunks[0];
สิ่งที่ต้องจำเกี่ยวกับการนำ NewItem ไปใช้
เงื่อนไขต่อไปนี้อาจนำไปใช้กับการใช้งาน System.Management.Automation.Provider.Containercmdletprovider.Newitem* ของคุณ:
เมธอด System.Management.Automation.Provider.Containercmdletprovider.Newitem* ควรทำการเปรียบเทียบสตริงที่ส่งผ่านพารามิเตอร์
typeโดยคำนึงถึงขนาดตัวพิมพ์ ควรอนุญาตให้มีการจับคู่ที่ไม่ชัดเจนน้อยที่สุด ตัวอย่างเช่น สำหรับประเภท "ไฟล์" และ "ไดเร็กทอรี" ต้องใช้เพียงอักษรตัวแรกเท่านั้นจึงจะคลายความกำกวมได้ หากพารามิเตอร์typeระบุประเภทที่ผู้ให้บริการของคุณไม่สามารถสร้างได้ เมธอด System.Management.Automation.Provider.Containercmdletprovider.Newitem* ควรเขียน ArgumentException พร้อมข้อความระบุประเภทที่ผู้ให้บริการสามารถสร้างได้สำหรับพารามิเตอร์
newItemValueแนะนำให้ใช้เมธอด System.Management.Automation.Provider.Containercmdletprovider.Newitem* เพื่อยอมรับสตริงเป็นอย่างน้อย นอกจากนี้ควรยอมรับชนิดของวัตถุที่ถูกดึงข้อมูลโดยเมธอด System.Management.Automation.Provider.Itemcmdletprovider.Getitem* สำหรับเส้นทางเดียวกัน เมธอด System.Management.Automation.Provider.Containercmdletprovider.Newitem* สามารถใช้เมธอด System.Management.Automation.Languageprimitives.Convertto* เพื่อแปลงประเภทเป็นประเภทที่ต้องการการใช้งานเมธอด System.Management.Automation.Provider.Containercmdletprovider.Newitem* ของคุณควรเรียก System.Management.Automation.Provider.Cmdletprovider.ShouldProcess และตรวจสอบค่าที่ส่งคืนก่อนทำการเปลี่ยนแปลงใดๆ กับที่เก็บข้อมูล หลังจากการเรียกไปยัง System.Management.Automation.Provider.Cmdletprovider.ShouldProcess ส่งกลับค่า true แล้ว เมธอด System.Management.Automation.Provider.Containercmdletprovider.Newitem* ควรเรียกเมธอด System.Management.Automation.Provider.Cmdletprovider.ShouldContinue เป็นวิธีเพิ่มเติม ตรวจสอบการแก้ไขระบบที่อาจเป็นอันตราย
การแนบพารามิเตอร์แบบไดนามิกกับ Cmdlet รายการใหม่
บางครั้ง cmdlet สินค้าใหม่ จำเป็นต้องมีพารามิเตอร์เพิ่มเติมที่ระบุแบบไดนามิกขณะรันไทม์ เพื่อจัดเตรียมพารามิเตอร์แบบไดนามิกเหล่านี้ ผู้ให้บริการคอนเทนเนอร์ต้องใช้เมธอด System.Management.Automation.Provider.Containercmdletprovider.Newitemdynamicparameters* วิธีการนี้ดึงข้อมูลพารามิเตอร์สำหรับรายการที่เส้นทางที่ระบุ และส่งกลับวัตถุที่มีคุณสมบัติและเขตข้อมูลที่มีแอตทริบิวต์การแยกวิเคราะห์ที่คล้ายกับคลาส cmdlet หรือวัตถุ System.Management.Automation.Runtimedesignparameterdictionary รันไทม์ของ Windows PowerShell ใช้วัตถุที่ส่งคืนเพื่อเพิ่มพารามิเตอร์ลงใน cmdlet New-Item
ผู้ให้บริการรายนี้ไม่ได้ใช้วิธีนี้ อย่างไรก็ตาม รหัสต่อไปนี้เป็นการใช้งานเริ่มต้นของวิธีนี้
การลบรายการ
เมื่อต้องการลบรายการ ผู้ให้บริการ Windows PowerShell ต้องแทนที่เมธอด System.Management.Automation.Provider.Containercmdletprovider.Removeite* เพื่อรองรับการโทรจาก cmdlet Remove-Item วิธีนี้จะลบรายการออกจากที่เก็บข้อมูลตามเส้นทางที่ระบุ หากพารามิเตอร์ recurse ของ cmdlet Remove-Item ถูกตั้งค่าเป็น true วิธีการจะลบรายการย่อยทั้งหมดโดยไม่คำนึงถึงระดับ หากตั้งค่าพารามิเตอร์เป็น false วิธีการจะลบเฉพาะรายการเดียวในเส้นทางที่ระบุ
ผู้ให้บริการรายนี้ไม่รองรับการลบรายการ อย่างไรก็ตาม รหัสต่อไปนี้เป็นการใช้งานเริ่มต้นของ System.Management.Automation.Provider.Containercmdletprovider.Removeitem*
สิ่งที่ต้องจำเกี่ยวกับการนำ RemoveItem ไปใช้
เงื่อนไขต่อไปนี้อาจนำไปใช้กับการใช้งาน System.Management.Automation.Provider.Containercmdletprovider.Newitem* ของคุณ:
เมื่อกำหนดคลาสของผู้ให้บริการ ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell อาจประกาศความสามารถของผู้ให้บริการของ ExpandWildcards ตัวกรอง รวม หรือแยก จากการแจงนับ System.Management.Automation.Provider.Providercapabilities ในกรณีเหล่านี้ การใช้งานเมธอด System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* จำเป็นต้องตรวจสอบให้แน่ใจว่าเส้นทางที่ส่งผ่านไปยังเมธอดนั้นตรงตามข้อกำหนดของความสามารถที่ระบุ เมื่อต้องการทำเช่นนี้ วิธีการควรเข้าถึงคุณสมบัติที่เหมาะสม ตัวอย่างเช่น คุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Exclude* และ System.Management.Automation.Provider.Cmdletprovider.Include*
ตามค่าเริ่มต้น การแทนที่ของวิธีนี้ไม่ควรลบวัตถุเว้นแต่ว่าคุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Force* ถูกตั้งค่าเป็นจริง หากเส้นทางที่ระบุระบุคอนเทนเนอร์ คุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Force* ไม่จำเป็นต้องใช้
การใช้งาน System.Management.Automation.Provider.Containercmdletprovider.Removeitem* ของคุณมีหน้าที่ป้องกันการเรียกซ้ำแบบไม่สิ้นสุดเมื่อมีลิงก์แบบวงกลมและสิ่งที่คล้ายกัน ควรส่งข้อยกเว้นการยุติที่เหมาะสมเพื่อสะท้อนถึงเงื่อนไขดังกล่าว
การใช้งานเมธอด System.Management.Automation.Provider.Containercmdletprovider.Removeitem* ของคุณควรเรียก System.Management.Automation.Provider.Cmdletprovider.ShouldProcess และตรวจสอบค่าที่ส่งคืนก่อนทำการเปลี่ยนแปลงใดๆ กับที่เก็บข้อมูล หลังจากการเรียกไปยัง System.Management.Automation.Provider.Cmdletprovider.ShouldProcess ส่งกลับ
trueแล้ว System.Management.Automation.Provider.Containercmdletprovider.Removeitem* วิธีการควรเรียก System.Management.Automation.Provider Cmdletprovider.ShouldContinue วิธีการตรวจสอบเพิ่มเติมสำหรับการปรับเปลี่ยนระบบที่อาจเป็นอันตราย
การแนบพารามิเตอร์แบบไดนามิกเข้ากับ Remove-Item Cmdlet
บางครั้ง cmdlet Remove-Item จำเป็นต้องมีพารามิเตอร์เพิ่มเติมที่ระบุแบบไดนามิกขณะรันไทม์ เมื่อต้องการจัดเตรียมพารามิเตอร์แบบไดนามิกเหล่านี้ ผู้ให้บริการคอนเทนเนอร์ต้องใช้เมธอด System.Management.Automation.Provider.Containercmdletprovider.Removeitemdynamicparameters* เพื่อจัดการพารามิเตอร์เหล่านี้ วิธีการนี้ดึงข้อมูลพารามิเตอร์แบบไดนามิกสำหรับรายการที่เส้นทางที่ระบุ และส่งกลับวัตถุที่มีคุณสมบัติและเขตข้อมูลที่มีแอตทริบิวต์การแยกวิเคราะห์ที่คล้ายกับคลาส cmdlet หรือวัตถุ System.Management.Automation.Runtimedesignparameterdictionary รันไทม์ของ Windows PowerShell ใช้วัตถุที่ส่งคืนเพื่อเพิ่มพารามิเตอร์ลงใน cmdlet Remove-Item
ผู้ให้บริการคอนเทนเนอร์รายนี้ไม่ได้ใช้วิธีนี้ อย่างไรก็ตาม รหัสต่อไปนี้เป็นการใช้งานเริ่มต้นของ System.Management.Automation.Provider.Containercmdletprovider.Removeitemdynamicparameters*
การสืบค้นรายการย่อย
เมื่อต้องการตรวจสอบว่ามีรายการลูกอยู่ในเส้นทางที่ระบุหรือไม่ ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell ต้องแทนที่เมธอด System.Management.Automation.Provider.Containercmdletprovider.Haschilditems* เมธอดนี้จะส่งคืน true หากรายการนั้นมีรายการย่อย และจะส่งกลับ false มิฉะนั้น สำหรับเส้นทางว่างหรือว่างเปล่า วิธีการจะพิจารณารายการใดๆ ในที่เก็บข้อมูลที่เป็นรายการย่อยและส่งกลับ true
นี่คือการแทนที่สำหรับเมธอด System.Management.Automation.Provider.Containercmdletprovider.Haschilditems* หากมีส่วนของเส้นทางมากกว่าสองส่วนที่สร้างโดยวิธีตัวช่วย ChunkPath วิธีการจะส่งกลับ false เนื่องจากมีการกำหนดเฉพาะคอนเทนเนอร์ฐานข้อมูลและคอนเทนเนอร์ตารางเท่านั้น สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการช่วยเหลือนี้ ดูวิธี ChunkPath ที่ถูกกล่าวถึงในการสร้างตัวให้บริการรายการ Windows PowerShell
protected override bool HasChildItems( string path )
{
return false;
} // HasChildItems
ErrorCategory.InvalidOperation, tableName));
}
return results;
สิ่งที่ต้องจำเกี่ยวกับการนำ HasChildItems ไปใช้
เงื่อนไขต่อไปนี้อาจนำไปใช้กับการใช้งาน System.Management.Automation.Provider.Containercmdletprovider.Haschilditems* ของคุณ:
- หากผู้ให้บริการคอนเทนเนอร์เปิดเผยรูทที่ประกอบด้วยจุดเชื่อมต่อที่น่าสนใจ การใช้งานเมธอด System.Management.Automation.Provider.Containercmdletprovider.Haschilditems* ควรส่งคืน
trueเมื่อส่งผ่านค่า null หรือสตริงว่างใน สำหรับเส้นทาง
การคัดลอกรายการ
เมื่อต้องการคัดลอกรายการ ผู้ให้บริการคอนเทนเนอร์ต้องใช้เมธอด System.Management.Automation.Provider.ContainerCmdletProvider.CopyItem เพื่อรองรับการเรียกจาก cmdlet Copy-Item วิธีนี้จะคัดลอกรายการข้อมูลจากตำแหน่งที่ระบุโดยพารามิเตอร์ path ของ cmdlet ไปยังตำแหน่งที่ระบุโดยพารามิเตอร์ copyPath หากมีการระบุพารามิเตอร์ recurse วิธีการจะคัดลอกคอนเทนเนอร์ย่อยทั้งหมด หากไม่ได้ระบุพารามิเตอร์ วิธีการจะคัดลอกเฉพาะรายการระดับเดียวเท่านั้น
ผู้ให้บริการรายนี้ไม่ได้ใช้วิธีนี้ อย่างไรก็ตาม รหัสต่อไปนี้เป็นการใช้งานเริ่มต้นของ System.Management.Automation.Provider.ContainerCmdletProvider.CopyItem
สิ่งที่ต้องจำเกี่ยวกับการใช้งาน CopyItem
เงื่อนไขต่อไปนี้อาจนำไปใช้กับการใช้งาน System.Management.Automation.Provider.ContainerCmdletProvider.CopyItem ของคุณ:
เมื่อกำหนดคลาสของผู้ให้บริการ ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell อาจประกาศความสามารถของผู้ให้บริการของ ExpandWildcards ตัวกรอง รวม หรือแยก จากการแจงนับ System.Management.Automation.Provider.Providercapabilities ในกรณีเหล่านี้ การใช้งานเมธอด System.Management.Automation.Provider.Containercmdletprovider.Getchilditems* จำเป็นต้องตรวจสอบให้แน่ใจว่าเส้นทางที่ส่งผ่านไปยังเมธอดนั้นตรงตามข้อกำหนดของความสามารถที่ระบุ เมื่อต้องการทำเช่นนี้ วิธีการควรเข้าถึงคุณสมบัติที่เหมาะสม ตัวอย่างเช่น คุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Exclude* และ System.Management.Automation.Provider.Cmdletprovider.Include*
ตามค่าเริ่มต้น การแทนที่ของวิธีนี้ไม่ควรคัดลอกวัตถุเหนือวัตถุที่มีอยู่ เว้นแต่ว่าคุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Force* ถูกตั้งค่าเป็น
trueตัวอย่างเช่น ผู้ให้บริการ FileSystem จะไม่คัดลอก c:\temp\abc.txt บนแฟ้ม c:\abc.txt ที่มีอยู่ เว้นแต่ว่าคุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Force* ถูกตั้งค่าเป็นtrue. หากเส้นทางที่ระบุในพารามิเตอร์copyPathมีอยู่และบ่งชี้ถึงคอนเทนเนอร์ ก็ไม่จำเป็นต้องมีคุณสมบัติ System.Management.Automation.Provider.Cmdletprovider.Force* ในกรณีนี้ System.Management.Automation.Provider.ContainerCmdletProvider.CopyItem ควรคัดลอกรายการที่ระบุโดยพารามิเตอร์pathไปยังคอนเทนเนอร์ที่ระบุโดยพารามิเตอร์copyPathในฐานะลูกการใช้งาน System.Management.Automation.Provider.ContainerCmdletProvider.CopyItem ของคุณมีหน้าที่ป้องกันการเรียกซ้ำแบบไม่สิ้นสุดเมื่อมีลิงก์แบบวงกลมและสิ่งที่คล้ายกัน ควรส่งข้อยกเว้นการยุติที่เหมาะสมเพื่อสะท้อนถึงเงื่อนไขดังกล่าว
การใช้งานเมธอด System.Management.Automation.Provider.ContainerCmdletProvider.CopyItem ของคุณควรเรียก System.Management.Automation.Provider.Cmdletprovider.ShouldProcess และตรวจสอบค่าที่ส่งคืนก่อนทำการเปลี่ยนแปลงใดๆ กับที่เก็บข้อมูล หลังจากการเรียกไปยัง System.Management.Automation.Provider.Cmdletprovider.ShouldProcess ส่งกลับค่า true เมธอด System.Management.Automation.Provider.ContainerCmdletProvider.CopyItem ควรเรียกเมธอด System.Management.Automation.Provider.Cmdletprovider.ShouldContinue เป็นการตรวจสอบเพิ่มเติม สำหรับการปรับเปลี่ยนระบบที่อาจเป็นอันตราย สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเรียกวิธีการเหล่านี้ ดูเปลี่ยนชื่อรายการ
การแนบพารามิเตอร์ไดนามิกเข้ากับ Copy-Item Cmdlet
บางครั้ง cmdlet Copy-Item จำเป็นต้องมีพารามิเตอร์เพิ่มเติมที่ระบุแบบไดนามิกขณะรันไทม์ เมื่อต้องการจัดเตรียมพารามิเตอร์แบบไดนามิกเหล่านี้ ผู้ให้บริการคอนเทนเนอร์ Windows PowerShell ต้องใช้เมธอด System.Management.Automation.Provider.Containercmdletprovider.Copyitemdynamicparameters* เพื่อจัดการพารามิเตอร์เหล่านี้ วิธีการนี้ดึงข้อมูลพารามิเตอร์สำหรับรายการที่เส้นทางที่ระบุ และส่งกลับวัตถุที่มีคุณสมบัติและเขตข้อมูลที่มีแอตทริบิวต์การแยกวิเคราะห์ที่คล้ายกับคลาส cmdlet หรือวัตถุ System.Management.Automation.Runtimedesignparameterdictionary รันไทม์ของ Windows PowerShell ใช้วัตถุที่ส่งคืนเพื่อเพิ่มพารามิเตอร์ลงใน cmdlet Copy-Item
ผู้ให้บริการรายนี้ไม่ได้ใช้วิธีนี้ อย่างไรก็ตาม รหัสต่อไปนี้เป็นการใช้งานเริ่มต้นของ System.Management.Automation.Provider.Containercmdletprovider.Copyitemdynamicparameters*
ตัวอย่างโค้ด
สำหรับโค้ดตัวอย่างที่สมบูรณ์ โปรดดูตัวอย่างโค้ด AccessDbProviderSample04
การสร้างผู้ให้บริการ Windows PowerShell
ดูวิธีการลงทะเบียน Cmdlets ผู้ให้บริการ และแอปพลิเคชันโฮสต์
การทดสอบผู้ให้บริการ Windows PowerShell
เมื่อผู้ให้บริการ Windows PowerShell ของคุณลงทะเบียนกับ Windows PowerShell แล้ว คุณสามารถทดสอบได้โดยการเรียกใช้ cmdlets ที่ได้รับการสนับสนุนบนบรรทัดคำสั่ง โปรดทราบว่าผลลัพธ์ตัวอย่างต่อไปนี้ใช้ฐานข้อมูล Access ที่สมมติขึ้น
เรียกใช้ cmdlet
Get-ChildItemเพื่อดึงข้อมูลรายการของรายการย่อยจากตารางลูกค้าในฐานข้อมูล AccessGet-ChildItem mydb:customersผลลัพธ์ต่อไปนี้จะปรากฏขึ้น
PSPath : AccessDB::customers PSDrive : mydb PSProvider : System.Management.Automation.ProviderInfo PSIsContainer : True Data : System.Data.DataRow Name : Customers RowCount : 91 Columns :เรียกใช้ cmdlet
Get-ChildItemอีกครั้งเพื่อดึงข้อมูลของตาราง(Get-ChildItem mydb:customers).dataผลลัพธ์ต่อไปนี้จะปรากฏขึ้น
TABLE_CAT : c:\PS\northwind TABLE_SCHEM : TABLE_NAME : Customers TABLE_TYPE : TABLE REMARKS :ตอนนี้ใช้ cmdlet
Get-Itemเพื่อดึงรายการที่แถว 0 ในตารางข้อมูลGet-Item mydb:\customers\0ผลลัพธ์ต่อไปนี้จะปรากฏขึ้น
PSPath : AccessDB::customers\0 PSDrive : mydb PSProvider : System.Management.Automation.ProviderInfo PSIsContainer : False Data : System.Data.DataRow RowNumber : 0ใช้
Get-Itemซ้ำเพื่อดึงข้อมูลสำหรับรายการในแถว 0(Get-Item mydb:\customers\0).dataผลลัพธ์ต่อไปนี้จะปรากฏขึ้น
CustomerID : 1234 CompanyName : Fabrikam ContactName : Eric Gruber ContactTitle : President Address : 4567 Main Street City : Buffalo Region : NY PostalCode : 98052 Country : USA Phone : (425) 555-0100 Fax : (425) 555-0101ตอนนี้ใช้ cmdlet
New-Itemเพื่อเพิ่มแถวลงในตารางที่มีอยู่ พารามิเตอร์Pathระบุเส้นทางแบบเต็มไปยังแถว และต้องระบุหมายเลขแถวที่มากกว่าจำนวนแถวที่มีอยู่ในตาราง พารามิเตอร์Typeระบุ "แถว" เพื่อระบุประเภทของรายการที่จะเพิ่ม สุดท้าย พารามิเตอร์Valueจะระบุรายการค่าคอลัมน์ที่คั่นด้วยเครื่องหมายจุลภาคสำหรับแถวNew-Item -Path mydb:\Customers\3 -ItemType "row" -Value "3,CustomerFirstName,CustomerLastName,CustomerEmailAddress,CustomerTitle,CustomerCompany,CustomerPhone, CustomerAddress,CustomerCity,CustomerState,CustomerZip,CustomerCountry"ตรวจสอบความถูกต้องของการดำเนินการรายการใหม่ดังต่อไปนี้
PS mydb:\> cd Customers PS mydb:\Customers> (Get-Item 3).dataผลลัพธ์ต่อไปนี้จะปรากฏขึ้น
ID : 3 FirstName : Eric LastName : Gruber Email : ericgruber@fabrikam.com Title : President Company : Fabrikam WorkPhone : (425) 555-0100 Address : 4567 Main Street City : Buffalo State : NY Zip : 98052 Country : USA
ดูเพิ่มเติม
การสร้างผู้ให้บริการ Windows PowerShell
การออกแบบผู้ให้บริการ Windows PowerShell ของคุณ
การใช้งานรายการผู้ให้บริการ Windows PowerShell
การใช้ผู้ให้บริการนำทาง Windows PowerShell
วิธีลงทะเบียน Cmdlets ผู้ให้บริการ และแอปพลิเคชันโฮสต์
Windows PowerShell SDK
คู่มือโปรแกรมเมอร์ Windows PowerShell