我正在收听Scott Hanselman所做的关于PowerShell 2.0的播客.在那一集中,他们讨论了扩展应用程序以展示PowerShell功能的可能性.
现在这听起来很有趣.你有没有做过这样的扩展,在你的应用程序中公开功能?如果是这样,什么样的功能?
编辑:更确切地说:我对在我的应用程序中托管PowerShell不感兴趣.我更感兴趣的是使用类似API的界面打开我的应用程序.因此,PowerShell提供商似乎是我正在寻求更多洞察力的技术.
在自定义应用程序中利用 PowerShell 的方法有多种。PowerShell 自动化引擎的美妙之处在于,您不必处理参数处理、格式化输出以及许多您必须自己处理的其他 PITA 事务。要在 PowerShell 中将对象扔到管道中,您可以重写 ProcessRecord 方法并调用 WriteObject
protected override void ProcessRecord()
{
// Get the current processes
Process[] processes = Process.GetProcesses();
// Write the processes to the pipeline making them available
// to the next cmdlet. The second parameter of this call tells
// PowerShell to enumerate the array, and send one process at a
// time to the pipeline.
WriteObject(processes, true);
}
Run Code Online (Sandbox Code Playgroud)
您可以编写 Cmdlet,允许管理员自动化应用程序的服务器端。Cmdlet 始终是基于任务的功能单元,具有动词-名词命名约定。例如,获取进程或重新启动服务。Cmdlet 只做一件事,而且做得非常好。将 cmdlet 组合在一起会产生各种令人难以置信的力量。
此外,如果您的应用程序有某种数据存储,也可以编写一个提供程序,允许某人使用 cd(设置位置)和 md(新项目)等命令浏览和/或管理数据存储。提供程序是 PS 团队编写的,因此您可以使用 cd hklm: 进入注册表,或使用 cd cert 进入证书存储区:
您还可以在应用程序中托管 PowerShell 本身。
MSDN上有一些关于所有这三个选项的好信息:
考虑到对提供程序的兴趣,这里有一些有关如何创建 PowerShell 提供程序的示例。
已经有一些关于设计和使用一组 cmdlet 或通过 Provider 公开某些内容的讨论。当您实现提供程序时,您还会获得一些 cmdlet,例如 Get-item、New-item、Get-Location、Set-Location。但是,我发现除了提供程序之外,拥有一些用于特定任务的 cmdlet 也非常有帮助。
| 归档时间: |
|
| 查看次数: |
2050 次 |
| 最近记录: |