问题标签 [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.
powershell - Is there a way in Powershell to provide virtual file systems in other file systems?
I know you can write support for custom PSDrives. But those are always a root of a file system. What would be nice if there was a way to allow for VFS start at arbitrary nodes of the file system, such as using Set-Location
to enter archive file maybe and use them as if they were folders. (Kinda like Far does this).
Is there any way to achieve this? I know, it would be some work to get it right and working, but at the moment I am more interested whether it would be possible at all.
ETA: What I don't want is a new PSDrive for every archive I enter, so the following isn't actually what I'm after:
but rather
c# - 如何持久保存 Powershell 提供程序驱动器信息?
在我的 Powershell 提供程序中,它是 SQL 数据库上的业务逻辑层,Powershell 驱动器等同于数据库连接设置。此连接设置集合保存在本地计算机上的加密 XML 文件中。管理员可以在计算机上添加这些 PS 驱动器,提供 SQL Server 凭据,供其他 Powershell 用户在编写脚本时使用。当管理员运行 New-PSDrive 时,我将一个驱动器添加到集合中并将其保存到 XML。当他们 Remove-PSDrive 时,我从持久 XML 中删除了驱动器。这工作正常。但是,当 Powershell 主机退出时,它会为每个现有驱动器调用 RemoveDrive()。在这一点上,我不想删除驱动器,因为我需要它们保留在计算机上。
如何确定是手动执行 Remove-PSDrive 的用户调用了 RemoveDrive(),还是主机退出了?
此外,我创建了运行良好的自定义驱动器信息参数,但我还编写了一个自定义 cmdlet,用于添加和删除驱动器。如何从我的 cmdlet 创建(和删除)psdrive?
powershell - 如何使 zip 等文件在 PowerShell 中显示为文件夹?
如何使 zip 等文件在 powershell 中显示为文件夹?PowerShell是否有类似于驱动器提供程序的文件夹(项目)提供程序的概念?这可以在不实施驱动器提供程序的情况下完成吗?
初步搜索发现了一些有用的信息,但从外观上看,我似乎仍然需要实现整个 shebang。
powershell - PowerShell 初始化默认驱动器
在我的自定义 powershell 提供程序中,我希望用户能够跳过对 InitializeDefaultDrives 的内部调用。
InitializeDefaultDrives 方法在提供程序启动时被调用。我想这是我使用 Add-SnapIn cmdlet 加载我的提供程序的时候。所以看起来我正在寻找一种将动态参数添加到 Add-SnapIn cmdlet 的方法。
我知道我可以跳过 InitializeDefaultDrives 的实现,并让用户根据需要使用 new-PsDrive 手动添加驱动器。那不是我想要的。我想始终创建一个默认驱动器,除非用户想跳过它。
谢谢!
powershell - PowerShell 自定义提供程序 RemoveItem
我正在实现一个自定义PowerShell提供程序。我现在正在研究 remove-item cmdlet 实现。
RemoveItem 方法具有以下签名:
当我键入时:Remove-Item .\Myobject -recurse
PowerShell 基础结构为我提供了 RemoveItem 方法true
的参数中的值。recurse
但是,当我输入: Remove-Item .\MyObject' 我得到一个问题:
MyObject 中的项目具有子项,并且未指定 Recurse 参数。如果您继续,所有子项都将与该项目一起被删除。你确定你要继续吗?[Y] 是 [A] 全部是 [N] 否 [L] 全部否 [S] 暂停 [?] 帮助(默认为“Y”):
我想这个问题是由 PowerShell 基础设施向我提出的。这很好,因为我要删除的对象是一个容器。如果我对上述问题回答“是”,则 PowerShell 基础结构不会设置递归参数。事实上,当我的RemoveItem
方法被调用时它是错误的。我会排除参数为真,因为我对这个问题的回答是肯定的。
我的问题是:
为什么 PowerShell 没有将 bool 递归参数设置为正确的值?
我是否需要以其他方式获得价值(问题的答案)?如何?
如果以上是不可能的,有没有办法压制这个问题?
powershell - 如何在 psprovider 中支持 powershell tab 扩展?
我正在为一些内部分层数据实现 Powershell PSProvider。一切正常,我可以使用通常的 cd/dir 命令在树中导航,唯一不起作用的是制表符完成。
我可以看到的是,当按下 Tab 时,Powershell 在路径中调用带有星号的函数 GetChildName()(如果我键入“dir c”并按 Tab,GetChildName() 函数将使用字符串“c*”调用几次)。我试图从以“c”开头的文件夹中返回所有子名称,但 Powershell 始终只在前面显示第一个子名称。我找不到有关此行为的任何文档,我缺少什么?
powershell - 在 PowerShell 提供程序中,您何时刷新与缓存数据?
我正在用 C# 编写一个 PowerShell 提供程序。提供者通过类似驱动器的接口公开应用程序域对象。例如:
这些数据最终来自数据库。
关于何时应该去数据库获取数据以及何时应该缓存它,我一直找不到任何很好的指导。我发现 PowerShell 多次调用 ItemExists 和 GetChildNames 等方法;经常重复相同的命令。例如,仅仅因为他们点击 Tab 进行自动完成而访问数据库 5 或 6 次是不切实际的。
但同时,作为命令提示符下的用户,如果我键入Get-ChildItem
( dir
) 并查看列表,然后在 PowerShell 之外执行一些操作,以便我知道数据已刷新,获取另一个目录列表应该会看到对数据库。
我觉得如果我知道描述我的问题的正确术语(用 PowerShell 用语),我将能够通过谷歌搜索答案或找到现有的重复问题,但我被卡住了。
powershell - PowerShell 提供程序相对路径选项卡完成问题
我已经实现了一个简单的 PowerShellNavigationCmdletProvider
。
对于那些不知道的人,这意味着我可以使用 cmdlet 创建一个管理单元,它实际上是一个虚拟文件系统驱动器;可以像任何普通文件夹一样从 PowerShell 安装和导航此驱动器。针对驱动器的每个操作(例如,检查路径是否指向有效项、获取文件夹中子项的名称列表等)都映射到从该类继承的 .NET 类的方法NavigationCmdletProvider
。
我面临制表符完成的问题,并希望找到解决方案。我发现使用相对路径时制表符补全会给出不正确的结果。对于绝对路径,它工作正常。
对于那些不知道的人,NavigationCmdletProvider
通过 PowerShell 调用该GetChildNames
方法的选项卡完成工作,该方法被NavigationCmdletProvider
类覆盖。
--问题论证--
假设我有一个提供程序“TEST”,具有以下文件夹层次结构:
绝对路径:
如果我键入“ dir TEST::child1\
”并按tab几次,它会给我预期的结果:
相对路径:
首先,我导航到“TEST::child1”:
然后,如果我键入“ dir
space”并按tab几次,它会给我不正确的结果:
我希望看到这些:
这是 PowerShell 中的错误,还是我做错了什么?
以下是提供程序的完整、独立的代码:
powershell - 命令“cd WSMan:\localhost\shell”是如何工作的?我怎样才能重现它?
我可以使用 Powershell 使用特殊的“cd”命令配置 WinRM。谁能解释它是如何工作的以及我如何为我自己的应用程序实现这种类型的插件?
powershell - 设置位置 Powershell 提供程序
我在浏览我创建的 powershell 时遇到了一些问题。
我已经实现了这里列出的方法
该文件还说
Set-Location:此 cmdlet 将当前工作位置设置为指定位置。您 > 不需要覆盖任何方法来支持此 cmdlet。
但我得到了错误
cd :提供程序操作已停止,因为提供程序不支持此操作。在 line:1 char:1 + cd bankia:\ + ~~~~~~~~~~~~ + CategoryInfo : NotImplemented: (:) [Set-Location], PSNotSupportedException + FullyQualifiedErrorId : NotSupported,Microsoft.PowerShell.Commands .SetLocationCommand
我必须实施什么才能使 Set-Location 工作?