我想知道是否可以为项目特定的环境变量(例如PSDrive
,Env:
等)创建$custom:JSenv
之类的$custom:root
,而不是填充{{1 }} PSDrive。
我尝试使用Env:
。我非常期待看到New-PSDrive -Name custom -PSProvider Environment
驱动器。但是,实际输出中没有任何变化。
创建custom:
PSDrive是否达到目的的正确方法?
答案 0 :(得分:0)
New-PSDrive
cmdlet需要一个Root
参数。我无法复制您的问题:
PS /> $null = New-PSDrive -Name custom -PSProvider Environment -Root ''
PS /> Get-Item -Path custom:
# => environment variables
但是,这实际上确实为您提供了一种调用Env:
驱动器的不同方法,因为它们使用相同的提供程序,并且提供程序没有作用域的概念。
答案 1 :(得分:0)
否:要获得所需的内容,您必须实现自己的PowerShell [驱动器]提供程序,该提供程序也实现IContentCmdletProvider
interface,因为{ {1}}(或$<drive>:<path>
)是语法糖,称为命名空间符号-用于以下命令:
${<drive>:<path>}
有关更多信息,请参见底部。
关于您尝试过的事情:
虽然可以基于现有的提供程序定义自定义驱动器,但是该驱动器将始终反映该提供程序的项目,而无法定义自己的驱动器。
换句话说:
Get-Content -Path <drive>:<path>
只会使驱动器New-PSDrive -Name custom -PSProvider Environment -Root ''
成为custom:
驱动器的别名。
尽管您可以将自定义项定义为环境变量,但它们会在现有项的基础上另外显示 。
Writing your own [drive] provider需要已编译的代码,因此您无法在PowerShell本身中实现自定义驱动器。
从Windows PowerShell v5.1 / PowerShell Core 6.1.0开始,实现提供程序并非易事,但是simplifying that is being considered for a future PowerShell Core version。
但是,有第三方帮助器模块可以极大地简化过程,并允许您在PowerShell代码中实现自定义驱动器。
注意:我尚未验证您的特定用例是否可以实现。
Simplex :PS Gallery link-source code and documentation-易于使用的DSL,但并未公开所有功能。
SHiPS :PS Gallery link-source code and documentation-更复杂,但功能更全。