PowerShell:如何在名称为“*”(asterisk/star) 的 file/folder 上创建选择器?

PowerShell: How do I create selector on file/folder, whose name is '*' (asterisk/star)?

我需要从 PS 修改注册表。此注册表项与特定文件(所有扩展名的文件夹)的上下文菜单相关。

\HKEY_CURRENT_USER\Software\Classes\*

目前我想将项目添加到此路径:

HKCU:\Software\classes\*
|- shell
|- shellex

然而,当我在此路径上执行 dir 时,classes 文件夹中的所有项目都有输出:

PS D:\> dir "HKCU:\Software\classes\*"   

    Hive: HKEY_CURRENT_USER\Software\classes    

Name                           Property
----                           --------
*
.3g2                           VLC.backup : WMP11.AssocFile.3G2
                               (default)  : VLC.3g2
.3gp                           VLC.backup : WMP11.AssocFile.3GP
                               (default)  : VLC.3gp
.3gp2                          VLC.backup : WMP11.AssocFile.3G2
                               (default)  : VLC.3gp2
.3gpp                          VLC.backup : WMP11.AssocFile.3GP
                               (default)  : VLC.3gpp
.3mf

如果我理解正确的话,我的查询被星号通配了。注册表项(文件夹)名为 *我如何只为这个文件夹创建选择器,而不是让它作为通配符使用?也应该适用于所有其他命令,而不仅仅是 dirGet-ChildItem).

已经尝试过这些但没有成功:

PS D:\> dir "HKCU:\Software\classes\**"
PS D:\> dir "HKCU:\Software\classes\*"
PS D:\> dir "HKCU:\Software\classes\'*'"
PS D:\> dir "HKCU:\Software\classes\`*"

Get-ChildItem 的解决方法:

# argument -LiteralPath, unfortunatelly only for "dir" command
PS D:\> dir -LiteralPath "HKCU:\Software\classes\*"

编辑: 由于我收到了与 Get-ChildItem 相关的特定答案,请假设相同的路径适用于 New-Item(不支持 -LiteralPath)。

Get-ChildItem -LiteralPath "HKCU:\Software\classes\*"

或者:

Get-ChildItem "HKCU:\Software\classes\" | Where-Object PSChildName -eq '*' | Get-ChildItem

如果您想要对象本身的通用解决方案:

Get-ChildItem "HKCU:\Software\classes\" | Where-Object PSChildName -eq '*'

PowerShell 5

在 PowerShell 5 中,您可以通过在单引号内使用反引号,然后在路径后指定目录或未转义的 * 来实现此目的。对于您的示例,您可以这样做:

dir 'HKCU:\Software\classes\`*\*'

要创建项目,您可以使用以下语法:

New-Item -Path 'HKCU:\SOFTWARE\Classes\`*\shell\' -Name "My New Item"

PowerShell 7(6?)

在 PowerShell 7(可能还有 6)中,您可以使用双引号内的两个反引号 (``) 转义星号。对于您的示例,您可以这样做:

dir "HKCU:\Software\classes\``*"

要创建项目,您可以使用以下语法:

New-Item -Path "HKCU:\SOFTWARE\Classes\``*\shell" -Name "My New Item"

请注意,PowerShell 5 方法在 PowerShell 7 中仍然有效,因此使用它实现向后和向前兼容性可能是个好主意。