问题标签 [powershell-provider]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
281 浏览

c# - Powershell Provider - GetItem 路径错误 - 自定义文件作为驱动器

我正在尝试将我的自定义项目文件模拟为新的 PS Drive。我正在尝试创建派生自NavigationCmdletProvider的自定义Powershell 提供程序。我已经覆盖 PSDriveInfo 以从文件中读取和包含项目,并且文件路径位于 PSDriveInfo 的根目录中。

我无法正确覆盖 GetItem。我想做的是使用GetNamesFromPath(path, out tableName, out rowNumber)方法。由于我的自定义项目基本上是数据集,我想使用 tableName 来获取 DataRow 的 ID 的 DataTable 和 rowNumber。

问题是我得到“路径不存在”的错误。它不会进入被覆盖的方法。我是否缺少要覆盖的东西?文件路径实际上并不存在,但我只需要处理路径并将 WriteItemObject 与我想要的对象一起使用,而不检查它是否有效路径。

编辑 1:我注意到的一件事是它永远不会进入GetItem并因此进入IsValidPath. 当我调试和使用断点时,首先我加载驱动器,然后调用Set-Location驱动器IsItemContainer(它必须被覆盖Set-Location才能工作)。

GetItem并且IsValidPath根本不被调用,就好像它在调用重写方法之前检查有效路径一样。可以NavigationCmdletProvider使用不存在的路径(文件本身除外),只使用将像路径一样手动处理的字符串?

0 投票
1 回答
313 浏览

c# - 从自定义提供程序的 C# 代码加载 Powershell 模块

我一直在研究一个非常具体的功能“需要”以绑定到我用 C# 编写的自定义提供程序。

基本上我开始寻找一种方法来复制

etc 函数在 PowerShell 加载时定义,因此不必键入

你可以做前面提到的

我首先尝试让我的提供程序将函数注入运行空间,但似乎我完全错过了如何让它工作的时机,所以我走了另一条路。

基本上我有一个非常简单的 PSM1 文件 UseColons.psm1

简单来说,它遍历所有加载的提供程序,然后遍历每个提供程序的所有驱动器,然后检查 Function: 驱动器是否包含与 {DriveName}: 格式匹配的函数,如果找不到,则创建一个。

psd1文件无非就是导出所有函数

这存储在其自己的文件夹下的 %ProgramFiles%\WindowsPowerShell\Modules 路径中

最后我在 %windir%\system32\windowspowershell\v1.0 目录下有 profile.ps1

因此,当我加载 PowerShell 或 ISE 时,如果我想通过变量说 dir,我可以调用

或者如果我需要切换回注册表

当您与多个供应商合作时,您在切换时一遍又一遍地键入该 CD,这很烦人。

现在到了这个问题,我仍在努力开发最初打算用于的实际 PowerShell 提供程序。但是,当我调试它时,UseColons 模块会在 Visual Studio 转身之前加载并加载新的提供程序,因此如果我手动删除并再次导入该模块,它会完成它的工作,并且我拥有我的提供程序的所有驱动功能。

经过漫长的解释后,我想知道我该怎么做:

  • 设置我的 UseColons 模块以加载 LAST
  • 找到一种方法让我的自定义提供程序(技术上是一个模块,因为它具有提供程序和自定义 Cmdlet)在初始化时加载 UseColons 模块
  • 我不想将它从我的标准配置文件中删除,因为当我不使用新的提供程序并且只是使用 powershell 进行管理工作时,它非常有用。

    希望有人能给我一些想法或指出一些好的更深入的 powershell 提供程序文档和操作方法的方向。

    0 投票
    1 回答
    1687 浏览

    powershell - Powershell“提供程序执行已停止,因为提供程序不支持此操作。”

    我正在尝试编写一个脚本来通过 FriendlyName 检查远程服务器的证书。一旦返回,我想确认删除此证书。目前,下面的代码返回“提供程序执行已停止,因为提供程序不支持此操作。” 为什么提供程序在 Remove-Item cmd 期间不工作,但在我使用 Select-Object 时在脚本的早期工作?