我需要修改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
如果我理解正确,我的查询被星号通配符。注册表项(文件夹)名为*
。 如何仅针对此文件夹创建选择器而不使其作为外卡使用?还应该适用于所有其他命令,而不仅仅是dir
(Get-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
)。
答案 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 中,您可以通过在单引号内使用反引号,然后在路径后指定目录或未转义的 *
来使其工作。对于您的示例,您可以执行以下操作:
dir 'HKCU:\Software\classes\`*\*'
要创建一个项目,您可以使用以下语法:
New-Item -Path 'HKCU:\SOFTWARE\Classes\`*\shell\' -Name "My New Item"
在 PowerShell 7(也可能是 6)中,您可以使用双引号内的两个反引号 (``
) 来转义星号。对于您的示例,您可以执行以下操作:
dir "HKCU:\Software\classes\``*"
要创建一个项目,您可以使用以下语法:
New-Item -Path "HKCU:\SOFTWARE\Classes\``*\shell" -Name "My New Item"
请注意,PowerShell 5 方法在 PowerShell 7 中仍然有效,因此使用它来实现向后和向前兼容性可能是个好主意。