gpt4 book ai didi

powershell - 如何确定给定的 PSProvider 是否使用变量语法,例如$环境 :

转载 作者:行者123 更新时间:2023-12-05 01:50:04 26 4
gpt4 key购买 nike

简而言之,有没有办法从 shell 中确定一个 PSProvider's 是否存在? path 有一个伴随变量,如果有,那个变量的名字是什么?列出了支持此表示法的内置 PowerShell 提供程序 here但我一般指的是 任何 提供程序 - 内置/第三方/自定义等。提供程序的驱动器名称(可以使用 Get-PSProvider 公开)是否自动) 总是与其变量符号名称相同?


例如:

  • Environment provider使用 Env: 驱动器,也可以使用其变量 $env: 访问该驱动器

  • Certificate provider使用 Cert: 驱动器,也可以使用其变量 $cert: 访问该驱动器,但实现 IContentCmdletProvider 接口(interface)——如以下是引用 $Cert:xyz 路径时在 shell 中触发的错误消息(但我可以使用 CTRL+Spacetab 来自动完成 $cert: 路径)

    提供程序“证书”不能用于使用变量语法获取或设置数据。无法使用接口(interface)。此提供程序未实现 IContentCmdletProvider 接口(interface)。


是否this (quoted below)是否意味着每个提供者的驱动器都会自动使用变量表示法(并且始终具有相应的变量),但并非所有提供者驱动器都能够通过提供者的变量语法公开/操纵其内容/项目?

“您可以在提供程序路径前加上美元 ($) 符号,并访问实现 IContentCmdletProvider 接口(interface)的任何提供程序的内容。”


最后,以下说法是否准确?
询问“有没有办法从 shell 中确定 PSProvider 是否实现了 IContentCmdletProvider 接口(interface)?”可能不足以确定提供者的驱动器内容是否可以使用其变量表示法访问/操作。

最佳答案

PowerShell 的 namespace variable notation有意义地工作:

要在给定 session 中列出支持此表示法的驱动器 - 基于底层提供程序的功能 - 使用以下命令:

Get-PSDrive |
Where-Object {
$_.Provider.Implementingtype.GetInterfaces() -contains [System.Management.Automation.Provider.IContentCmdletProvider]
}

列出支持此表示法的提供程序,其中每个提供程序都可以在当前 session 中支持任意数量的驱动器(包括无驱动器)(每个驱动器的 .Drives 属性输出对象包含该提供商支持的当前驱动器列表):

Get-PSProvider |
Where-Object {
$_.Implementingtype.GetInterfaces() -contains [System.Management.Automation.Provider.IContentCmdletProvider]
}

关于您的问题:

Does this (quoted below) mean that every provider's drive(s) automatically use the variable notation (and will always have a corresponding variable), but not all provider drives are capable of exposing/manipulating their contents/items through the provider's variable syntax?

确实:虽然每个驱动器的项目都可以使用命名空间变量表示法寻址,但它仅适用于支持提供程序实现IContentCmdletProvider的驱动器,因为该表示法的唯一目的是访问提供者项目的内容

Asking "Is there a way from the shell to determine if a PSProvider implements the IContentCmdletProvider interface?" probably isn't sufficient enough to determine if a provider's drive contents can be accessed/manipulated using its variable notation.

足以测试给定提供程序是否实现了 IContentCmdletProvider(如上所示),假设该提供程序是一个或多个实际驱动 在当前 session 中访问项目(如 Get-PSDrive 的输出所示)。

PowerShell 带有预定义 驱动器;你可以定义额外的 New-PSDrive

关于powershell - 如何确定给定的 PSProvider 是否使用变量语法,例如$环境 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73465869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com