PowerShell:如何在文件/文件夹上创建选择器,其名称为“*”(星号/星号)?

时间:2018-02-14 11:25:05

标签: powershell registry filepath

我需要修改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)。

2 个答案:

答案 0 :(得分:1)

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 '*'

答案 1 :(得分:1)

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 中仍然有效,因此使用它来实现向后和向前兼容性可能是个好主意。