Tạo Nhà cung cấp Nội dung Windows PowerShell
Chủ đề này mô tả cách tạo nhà cung cấp Windows PowerShell cho phép người dùng thao tác với nội dung của các mục trong kho dữ liệu. Do đó, nhà cung cấp có thể thao tác nội dung của các mục được gọi là nhà cung cấp nội dung Windows PowerShell.
Ghi chú
Bạn có thể tải xuống tệp nguồn C# (AccessDBSampleProvider06.cs) cho nhà cung cấp này bằng cách sử dụng Bộ công cụ phát triển phần mềm Microsoft Windows dành cho Windows Vista và .NET Framework 3.0 Runtime Components. Để biết hướng dẫn tải xuống, hãy xem Cách cài đặt Windows PowerShell và Tải xuống Windows PowerShell SDK. Các tệp nguồn đã tải xuống có sẵn trong thư mục
Xác định lớp nhà cung cấp nội dung Windows PowerShell
Nhà cung cấp nội dung Windows PowerShell phải tạo một lớp .NET hỗ trợ giao diện System.management.Automation.Provider.Icontentcmdletprovider. Đây là định nghĩa lớp cho nhà cung cấp hạng mục được mô tả trong phần này.
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : NavigationCmdletProvider, IContentCmdletProvider
Lưu ý rằng trong định nghĩa lớp này, thuộc tính System.Manager.Automation.Provider.Cmdletproviderattribute bao gồm hai tham số. Tham số đầu tiên chỉ định tên thân thiện với người dùng cho nhà cung cấp được Windows PowerShell sử dụng. Tham số thứ hai chỉ định các khả năng cụ thể của Windows PowerShell mà nhà cung cấp hiển thị trong thời gian chạy Windows PowerShell trong quá trình xử lý lệnh. Đối với nhà cung cấp này, không có khả năng cụ thể nào của Windows PowerShell được bổ sung.
Xác định chức năng của lớp cơ sở
Như được mô tả trong Thiết kế nhà cung cấp Windows PowerShell của bạn, lớp System.management.Automation.Provider.Navigationcmdletprovider xuất phát từ một số lớp khác cung cấp chức năng nhà cung cấp khác nhau. Do đó, nhà cung cấp nội dung Windows PowerShell thường xác định tất cả chức năng được cung cấp bởi các lớp đó.
Để biết thêm thông tin về cách triển khai chức năng thêm thông tin khởi tạo theo phiên cụ thể và giải phóng các tài nguyên được nhà cung cấp sử dụng, hãy xem Tạo Nhà cung cấp Windows PowerShell Cơ bản. Tuy nhiên, hầu hết các nhà cung cấp, bao gồm cả nhà cung cấp được mô tả ở đây, có thể sử dụng cách triển khai mặc định của chức năng này do Windows PowerShell cung cấp.
Để truy cập kho lưu trữ dữ liệu, nhà cung cấp phải triển khai các phương thức của lớp cơ sở System.management.Automation.Provider.Drivecmdletprovider. Để biết thêm thông tin về cách triển khai các phương pháp này, hãy xem Tạo Nhà cung cấp Ổ đĩa Windows PowerShell.
Để thao tác các mục của kho lưu trữ dữ liệu, chẳng hạn như nhận, cài đặt và xóa các mục, nhà cung cấp phải triển khai các phương thức do lớp cơ sở System.management.Automation.Provider.Itemcmdletprovider cung cấp. Để biết thêm thông tin về cách triển khai các phương pháp này, hãy xem Tạo Nhà cung cấp Mục Windows PowerShell.
Để làm việc trên các kho dữ liệu nhiều lớp, nhà cung cấp phải triển khai các phương thức được cung cấp bởi lớp cơ sở System.management.Automation.Provider.Containercmdletprovider. Để biết thêm thông tin về cách triển khai các phương pháp này, hãy xem Tạo Nhà cung cấp bộ chứa Windows PowerShell.
Để hỗ trợ các lệnh đệ quy, các vùng chứa lồng nhau và các đường dẫn tương đối, nhà cung cấp phải triển khai lớp cơ sở System.management.Automation.Provider.Navigationcmdletprovider. Ngoài ra, nhà cung cấp nội dung Windows PowerShell này có thể đính kèm giao diện System.Man Management.Automation.Provider.Icontentcmdletprovider vào lớp cơ sở System.Manager.Automation.Provider.Navigationcmdletprovider và do đó phải triển khai các phương thức do lớp đó cung cấp. Để biết thêm thông tin, hãy xem triển khai các phương pháp đó, xem Triển khai Nhà cung cấp Windows PowerShell Điều hướng.
Triển khai Trình đọc nội dung
Để đọc nội dung từ một mục, nhà cung cấp phải triển khai lớp trình đọc nội dung bắt nguồn từ System.management.Automation.Provider.Icontentreader. Trình đọc nội dung dành cho nhà cung cấp này cho phép truy cập vào nội dung của một hàng trong bảng dữ liệu. Lớp trình đọc nội dung xác định phương thức Đọc để truy xuất dữ liệu từ hàng được chỉ định và trả về danh sách biểu thị dữ liệu đó, phương thức Seek để di chuyển trình đọc nội dung, Phương thức đóng để đóng trình đọc nội dung và phương thức Vứt bỏ.
public class AccessDBContentReader : IContentReader
{
// A provider instance is required so as to get "content"
private AccessDBProvider provider;
private string path;
private long currentOffset;
internal AccessDBContentReader(string path, AccessDBProvider provider)
{
this.path = path;
this.provider = provider;
}
/// <summary>
/// Read the specified number of rows from the source.
/// </summary>
/// <param name="readCount">The number of items to
/// return.</param>
/// <returns>An array of elements read.</returns>
public IList Read(long readCount)
{
// Read the number of rows specified by readCount and increment
// offset
string tableName;
int rowNumber;
PathType type = provider.GetNamesFromPath(path, out tableName, out rowNumber);
Collection<DatabaseRowInfo> rows =
provider.GetRows(tableName);
Collection<DataRow> results = new Collection<DataRow>();
if (currentOffset < 0 || currentOffset >= rows.Count)
{
return null;
}
int rowsRead = 0;
while (rowsRead < readCount && currentOffset < rows.Count)
{
results.Add(rows[(int)currentOffset].Data);
rowsRead++;
currentOffset++;
}
return results;
} // Read
/// <summary>
/// Moves the content reader specified number of rows from the
/// origin
/// </summary>
/// <param name="offset">Number of rows to offset</param>
/// <param name="origin">Starting row from which to offset</param>
public void Seek(long offset, System.IO.SeekOrigin origin)
{
// get the number of rows in the table which will help in
// calculating current position
string tableName;
int rowNumber;
PathType type = provider.GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Invalid)
{
throw new ArgumentException("Path specified must represent a table or a row :" + path);
}
if (type == PathType.Table)
{
Collection<DatabaseRowInfo> rows = provider.GetRows(tableName);
int numRows = rows.Count;
if (offset > rows.Count)
{
throw new
ArgumentException(
"Offset cannot be greater than the number of rows available"
);
}
if (origin == System.IO.SeekOrigin.Begin)
{
// starting from Beginning with an index 0, the current offset
// has to be advanced to offset - 1
currentOffset = offset - 1;
}
else if (origin == System.IO.SeekOrigin.End)
{
// starting from the end which is numRows - 1, the current
// offset is so much less than numRows - 1
currentOffset = numRows - 1 - offset;
}
else
{
// calculate from the previous value of current offset
// advancing forward always
currentOffset += offset;
}
} // if (type...
else
{
// for row, the offset will always be set to 0
currentOffset = 0;
}
} // Seek
/// <summary>
/// Closes the content reader, so all members are reset
/// </summary>
public void Close()
{
Dispose();
} // Close
/// <summary>
/// Dispose any resources being used
/// </summary>
public void Dispose()
{
Seek(0, System.IO.SeekOrigin.Begin);
GC.SuppressFinalize(this);
} // Dispose
} // AccessDBContentReader
Triển khai Trình viết nội dung
Để viết nội dung vào một mục, nhà cung cấp phải triển khai lớp người viết nội dung bắt nguồn từ System.management.Automation.Provider.Icontentwriter. Lớp người viết nội dung xác định phương thức Viết ghi nội dung hàng được chỉ định, phương thức Tìm kiếm để di chuyển người viết nội dung, phương thức Đóng để đóng người viết nội dung và phương thức Vứt bỏ.
public class AccessDBContentWriter : IContentWriter
{
// A provider instance is required so as to get "content"
private AccessDBProvider provider;
private string path;
private long currentOffset;
internal AccessDBContentWriter(string path, AccessDBProvider provider)
{
this.path = path;
this.provider = provider;
}
/// <summary>
/// Write the specified row contents in the source
/// </summary>
/// <param name="content"> The contents to be written to the source.
/// </param>
/// <returns>An array of elements which were successfully written to
/// the source</returns>
///
public IList Write(IList content)
{
if (content == null)
{
return null;
}
// Get the total number of rows currently available it will
// determine how much to overwrite and how much to append at
// the end
string tableName;
int rowNumber;
PathType type = provider.GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Table)
{
OdbcDataAdapter da = provider.GetAdapterForTable(tableName);
if (da == null)
{
return null;
}
DataSet ds = provider.GetDataSetForTable(da, tableName);
DataTable table = provider.GetDataTable(ds, tableName);
string[] colValues = (content[0] as string).Split(',');
// set the specified row
DataRow row = table.NewRow();
for (int i = 0; i < colValues.Length; i++)
{
if (!String.IsNullOrEmpty(colValues[i]))
{
row[i] = colValues[i];
}
}
//table.Rows.InsertAt(row, rowNumber);
// Update the table
table.Rows.Add(row);
da.Update(ds, tableName);
}
else
{
throw new InvalidOperationException("Operation not supported. Content can be added only for tables");
}
return null;
} // Write
/// <summary>
/// Moves the content reader specified number of rows from the
/// origin
/// </summary>
/// <param name="offset">Number of rows to offset</param>
/// <param name="origin">Starting row from which to offset</param>
public void Seek(long offset, System.IO.SeekOrigin origin)
{
// get the number of rows in the table which will help in
// calculating current position
string tableName;
int rowNumber;
PathType type = provider.GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Invalid)
{
throw new ArgumentException("Path specified should represent either a table or a row : " + path);
}
Collection<DatabaseRowInfo> rows =
provider.GetRows(tableName);
int numRows = rows.Count;
if (offset > rows.Count)
{
throw new
ArgumentException(
"Offset cannot be greater than the number of rows available"
);
}
if (origin == System.IO.SeekOrigin.Begin)
{
// starting from Beginning with an index 0, the current offset
// has to be advanced to offset - 1
currentOffset = offset - 1;
}
else if (origin == System.IO.SeekOrigin.End)
{
// starting from the end which is numRows - 1, the current
// offset is so much less than numRows - 1
currentOffset = numRows - 1 - offset;
}
else
{
// calculate from the previous value of current offset
// advancing forward always
currentOffset += offset;
}
} // Seek
/// <summary>
/// Closes the content reader, so all members are reset
/// </summary>
public void Close()
{
Dispose();
} // Close
/// <summary>
/// Dispose any resources being used
/// </summary>
public void Dispose()
{
Seek(0, System.IO.SeekOrigin.Begin);
GC.SuppressFinalize(this);
} // Dispose
} // AccessDBContentWriter
Truy xuất Trình đọc nội dung
Để lấy nội dung từ một mục, nhà cung cấp phải triển khai System.management.Automation.Provider.Icontentcmdletprovider.Getcontentreader* để hỗ trợ lệnh ghép ngắn Get-Content. Phương thức này trả về trình đọc nội dung cho mục nằm ở đường dẫn đã chỉ định. Đối tượng reader sau đó có thể được mở để đọc nội dung.
Dưới đây là cách triển khai System.management.Automation.Provider.Icontentcmdletprovider.Getcontentreader* cho phương pháp này cho nhà cung cấp này.
public IContentReader GetContentReader(string path)
{
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Invalid)
{
ThrowTerminatingInvalidPathException(path);
}
else if (type == PathType.Row)
{
throw new InvalidOperationException("contents can be obtained only for tables");
}
return new AccessDBContentReader(path, this);
} // GetContentReader
public IContentReader GetContentReader(string path)
{
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Invalid)
{
ThrowTerminatingInvalidPathException(path);
}
else if (type == PathType.Row)
{
throw new InvalidOperationException("contents can be obtained only for tables");
}
return new AccessDBContentReader(path, this);
} // GetContentReader
Những điều cần nhớ khi triển khai GetContentReader
Các điều kiện sau đây có thể áp dụng cho việc triển khai System.management.Automation.Provider.Icontentcmdletprovider.Getcontentreader*:
Khi xác định lớp nhà cung cấp, nhà cung cấp nội dung Windows PowerShell có thể khai báo các khả năng của nhà cung cấp về ExpandWildcards, Filter, Bao gồm hoặc Loại trừ khỏi bảng liệt kê System.Manager.Automation.Provider.Providercapabilities. Trong những trường hợp này, việc triển khai phương thức System.Manager.Automation.Provider.Icontentcmdletprovider.Getcontentreader* phải đảm bảo rằng đường dẫn được chuyển đến phương thức đáp ứng các yêu cầu về khả năng đã chỉ định. Để thực hiện việc này, phương thức phải truy cập vào thuộc tính thích hợp, ví dụ: các thuộc tính System.Man Management.Automation.Provider.Cmdletprovider.Exclude* và System.Manager.Automation.Provider.Cmdletprovider.Include*.
Theo mặc định, phần ghi đè của phương thức này sẽ không truy xuất trình đọc cho các đối tượng bị ẩn khỏi người dùng trừ khi thuộc tính System.management.Automation.Provider.Cmdletprovider.Force* được đặt thành
true. Sẽ xảy ra lỗi nếu đường dẫn đại diện cho một mục bị ẩn khỏi người dùng và System.management.Automation.Provider.Cmdletprovider.Force* được đặt thànhfalse.
Đính kèm các tham số động vào lệnh ghép ngắn Get-Content
Lệnh ghép ngắn Lấy nội dung có thể yêu cầu các tham số bổ sung được chỉ định động khi chạy. Để cung cấp các tham số động này, nhà cung cấp nội dung Windows PowerShell phải triển khai phương thức System.management.Automation.Provider.Icontentcmdletprovider.Getcontentreaderdynamicparameters*. Phương thức này truy xuất các tham số động cho mục tại đường dẫn được chỉ định và trả về một đối tượng có các thuộc tính và trường có thuộc tính phân tích cú pháp tương tự như một lớp lệnh ghép ngắn hoặc một đối tượng System.Manager.Automation.Runtimedparameterdictionary. Thời gian chạy Windows PowerShell sử dụng đối tượng được trả về để thêm các tham số vào lệnh ghép ngắn.
Nhà cung cấp bộ chứa Windows PowerShell này không triển khai phương pháp này. Tuy nhiên, đoạn mã sau là cách triển khai mặc định của phương pháp này.
public object GetContentReaderDynamicParameters(string path)
{
return null;
}
public object GetContentReaderDynamicParameters(string path)
{
return null;
}
Truy xuất người viết nội dung
Để ghi nội dung vào một mục, nhà cung cấp phải triển khai System.management.Automation.Provider.Icontentcmdletprovider.Getcontentwriter* để hỗ trợ các lệnh ghép ngắn Set-Content và Add-Content. Phương thức này trả về người viết nội dung cho mục nằm ở đường dẫn đã chỉ định.
Đây là cách triển khai System.management.Automation.Provider.Icontentcmdletprovider.Getcontentwriter* cho phương pháp này.
public IContentWriter GetContentWriter(string path)
{
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Invalid)
{
ThrowTerminatingInvalidPathException(path);
}
else if (type == PathType.Row)
{
throw new InvalidOperationException("contents can be added only to tables");
}
return new AccessDBContentWriter(path, this);
}
public IContentWriter GetContentWriter(string path)
{
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
if (type == PathType.Invalid)
{
ThrowTerminatingInvalidPathException(path);
}
else if (type == PathType.Row)
{
throw new InvalidOperationException("contents can be added only to tables");
}
return new AccessDBContentWriter(path, this);
}
Những điều cần nhớ khi triển khai GetContentWriter
Các điều kiện sau đây có thể áp dụng cho việc bạn triển khai System.management.Automation.Provider.Icontentcmdletprovider.Getcontentwriter*:
Khi xác định lớp nhà cung cấp, nhà cung cấp nội dung Windows PowerShell có thể khai báo các khả năng của nhà cung cấp về ExpandWildcards, Filter, Bao gồm hoặc Loại trừ khỏi bảng liệt kê System.Manager.Automation.Provider.Providercapabilities. Trong những trường hợp này, việc triển khai phương thức System.Manager.Automation.Provider.Icontentcmdletprovider.Getcontentwriter* phải đảm bảo rằng đường dẫn được chuyển đến phương thức đáp ứng các yêu cầu về khả năng đã chỉ định. Để thực hiện việc này, phương thức phải truy cập vào thuộc tính thích hợp, ví dụ: các thuộc tính System.Man Management.Automation.Provider.Cmdletprovider.Exclude* và System.Manager.Automation.Provider.Cmdletprovider.Include*.
Theo mặc định, phần ghi đè của phương thức này sẽ không truy xuất trình ghi cho các đối tượng bị ẩn khỏi người dùng trừ khi thuộc tính System.management.Automation.Provider.Cmdletprovider.Force* được đặt thành
true. Sẽ xảy ra lỗi nếu đường dẫn đại diện cho một mục bị ẩn khỏi người dùng và System.management.Automation.Provider.Cmdletprovider.Force* được đặt thànhfalse.
Đính kèm các tham số động vào các lệnh ghép ngắn nội dung bổ sung và nội dung thiết lập
Các lệnh ghép ngắn Add-Content và Set-Content có thể yêu cầu các tham số động bổ sung được thêm vào thời gian chạy. Để cung cấp các tham số động này, nhà cung cấp nội dung Windows PowerShell phải triển khai phương thức System.management.Automation.Provider.Icontentcmdletprovider.Getcontentwriterdynamicparameters* để xử lý các tham số này. Phương thức này truy xuất các tham số động cho mục tại đường dẫn được chỉ định và trả về một đối tượng có các thuộc tính và trường có thuộc tính phân tích cú pháp tương tự như một lớp lệnh ghép ngắn hoặc một đối tượng System.Manager.Automation.Runtimedparameterdictionary. Thời gian chạy Windows PowerShell sử dụng đối tượng được trả về để thêm tham số vào lệnh ghép ngắn.
Nhà cung cấp bộ chứa Windows PowerShell này không triển khai phương pháp này. Tuy nhiên, đoạn mã sau là cách triển khai mặc định của phương pháp này.
public object GetContentWriterDynamicParameters(string path)
{
return null;
}
Xóa nội dung
Nhà cung cấp nội dung của bạn triển khai phương thức System.Manager.Automation.Provider.Icontentcmdletprovider.Clearcontent* để hỗ trợ lệnh ghép ngắn Clear-Content. Phương pháp này loại bỏ nội dung của mục tại đường dẫn đã chỉ định, nhưng vẫn giữ nguyên mục đó.
Đây là cách triển khai phương thức System.management.Automation.Provider.Icontentcmdletprovider.Clearcontent* cho nhà cung cấp này.
public void ClearContent(string path)
{
string tableName;
int rowNumber;
PathType type = GetNamesFromPath(path, out tableName, out rowNumber);
if (type != PathType.Table)
{
WriteError(new ErrorRecord(
new InvalidOperationException("Operation not supported. Content can be cleared only for table"),
"NotValidRow", ErrorCategory.InvalidArgument,
path));
return;
}
OdbcDataAdapter da = GetAdapterForTable(tableName);
if (da == null)
{
return;
}
DataSet ds = GetDataSetForTable(da, tableName);
DataTable table = GetDataTable(ds, tableName);
// Clear contents at the specified location
for (int i = 0; i < table.Rows.Count; i++)
{
table.Rows[i].Delete();
}
if (ShouldProcess(path, "ClearContent"))
{
da.Update(ds, tableName);
}
} // ClearContent
Những điều cần nhớ khi triển khai ClearContent
Các điều kiện sau đây có thể áp dụng cho việc triển khai System.management.Automation.Provider.Icontentcmdletprovider.Clearcontent*:
Khi xác định lớp nhà cung cấp, nhà cung cấp nội dung Windows PowerShell có thể khai báo các khả năng của nhà cung cấp về ExpandWildcards, Filter, Bao gồm hoặc Loại trừ khỏi bảng liệt kê System.Manager.Automation.Provider.Providercapabilities. Trong những trường hợp này, việc triển khai phương thức System.management.Automation.Provider.Icontentcmdletprovider.Clearcontent* phải đảm bảo rằng đường dẫn được chuyển đến phương thức đó đáp ứng các yêu cầu về khả năng đã chỉ định. Để thực hiện việc này, phương thức phải truy cập vào thuộc tính thích hợp, ví dụ: các thuộc tính System.Man Management.Automation.Provider.Cmdletprovider.Exclude* và System.Manager.Automation.Provider.Cmdletprovider.Include*.
Theo mặc định, các phần ghi đè của phương pháp này sẽ không xóa nội dung của các đối tượng bị ẩn khỏi người dùng trừ khi thuộc tính System.management.Automation.Provider.Cmdletprovider.Force* được đặt thành
true. Sẽ xảy ra lỗi nếu đường dẫn đại diện cho một mục bị ẩn khỏi người dùng và System.management.Automation.Provider.Cmdletprovider.Force* được đặt thànhfalse.Việc triển khai phương thức System.Manager.Automation.Provider.Icontentcmdletprovider.Clearcontent* của bạn phải gọi System.management.Automation.Provider.Cmdletprovider.ShouldProcess và xác minh giá trị trả về của nó trước khi thực hiện bất kỳ thay đổi nào đối với kho dữ liệu. Phương pháp này được sử dụng để xác nhận việc thực hiện một thao tác khi có thay đổi đối với kho dữ liệu, chẳng hạn như xóa nội dung. Phương thức System.management.Automation.Provider.Cmdletprovider.ShouldProcess gửi tên của tài nguyên cần thay đổi cho người dùng, với thời gian chạy Windows PowerShell xử lý mọi cài đặt dòng lệnh hoặc biến tùy chọn trong việc xác định nội dung nào sẽ được hiển thị.
Sau lệnh gọi tới System.Manager.Automation.Provider.Cmdletprovider.ShouldProcess trả về
true, phương thức System.Man Management.Automation.Provider.Icontentcmdletprovider.Clearcontent* sẽ gọi System.Man Management.Automation.Provider. Phương thức Cmdletprovider.ShouldContinue. Phương pháp này sẽ gửi một tin nhắn đến người dùng để cho phép phản hồi nhằm xác minh xem có nên tiếp tục hoạt động hay không. Lệnh gọi tới System.management.Automation.Provider.Cmdletprovider.ShouldContinue cho phép kiểm tra bổ sung các sửa đổi hệ thống nguy hiểm tiềm ẩn.
Đính kèm các tham số động vào lệnh ghép ngắn nội dung rõ ràng
Lệnh ghép ngắn Clear-Content có thể yêu cầu các tham số động bổ sung được thêm vào khi chạy. Để cung cấp các tham số động này, nhà cung cấp nội dung Windows PowerShell phải triển khai phương thức System.management.Automation.Provider.Icontentcmdletprovider.Clearcontentdynamicparameters* để xử lý các tham số này. Phương thức này lấy các tham số cho mục tại đường dẫn đã chỉ định. Phương thức này truy xuất các tham số động cho mục tại đường dẫn được chỉ định và trả về một đối tượng có các thuộc tính và trường có thuộc tính phân tích cú pháp tương tự như một lớp lệnh ghép ngắn hoặc một đối tượng System.Manager.Automation.Runtimedparameterdictionary. Thời gian chạy Windows PowerShell sử dụng đối tượng được trả về để thêm các tham số vào lệnh ghép ngắn.
Nhà cung cấp bộ chứa Windows PowerShell này không triển khai phương pháp này. Tuy nhiên, đoạn mã sau là cách triển khai mặc định của phương pháp này.
public object ClearContentDynamicParameters(string path)
{
return null;
}
public object ClearContentDynamicParameters(string path)
{
return null;
}
Mẫu mã
Để biết mã mẫu hoàn chỉnh, hãy xem Mẫu mã AccessDbProviderSample06.
Xác định loại đối tượng và định dạng
Khi viết một trình cung cấp, có thể cần phải thêm các thành viên vào các đối tượng hiện có hoặc xác định các đối tượng mới. Khi việc này hoàn tất, bạn phải tạo tệp Loại mà Windows PowerShell có thể sử dụng để xác định các thành viên của đối tượng và tệp Định dạng xác định cách hiển thị đối tượng. Để biết thêm thông tin, hãy xem Mở rộng các loại đối tượng và định dạng.
Xây dựng nhà cung cấp Windows PowerShell
Xem Cách đăng ký lệnh ghép ngắn, nhà cung cấp và ứng dụng máy chủ.
Kiểm tra nhà cung cấp Windows PowerShell
Khi nhà cung cấp Windows PowerShell của bạn đã được đăng ký với Windows PowerShell, bạn có thể kiểm tra nó bằng cách chạy các lệnh ghép ngắn được hỗ trợ trên dòng lệnh. Ví dụ: kiểm tra nhà cung cấp nội dung mẫu.
Sử dụng lệnh ghép ngắn Get-Content để truy xuất nội dung của mục được chỉ định trong bảng cơ sở dữ liệu tại đường dẫn được chỉ định bởi tham số Path. Tham số ReadCount chỉ định số lượng mục để trình đọc nội dung được xác định đọc (mặc định 1). Với mục nhập lệnh sau, lệnh ghép ngắn sẽ truy xuất hai hàng (mục) từ bảng và hiển thị nội dung của chúng. Lưu ý rằng kết quả đầu ra của ví dụ sau đây sử dụng cơ sở dữ liệu Access giả định.
Get-Content -Path mydb:\Customers -ReadCount 2
ID : 1
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
ID : 2
FirstName : Eva
LastName : Corets
Email : evacorets@cohowinery.com
Title : Sales Representative
Company : Coho Winery
WorkPhone : (360) 555-0100
Address : 8910 Main Street
City : Cabmerlot
State : WA
Zip : 98089
Country : USA
Xem thêm
Tạo nhà cung cấp Windows PowerShell
Thiết kế nhà cung cấp Windows PowerShell của bạn
Mở rộng các loại đối tượng và định dạng
Triển khai nhà cung cấp Windows PowerShell điều hướng
Cách đăng ký lệnh ghép ngắn, nhà cung cấp và ứng dụng máy chủ
SDK Windows PowerShell
Hướng dẫn lập trình viên Windows PowerShell