2017-02-16 107 views
0

我正在做一个函数,可以采取可以是文件系统或注册表路径的参数。例如如何确定路径是文件系统还是注册表?

'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 
'C:\ProgramData\Microsoft\Windows' 

我不想通过命名参数划分它们,但它们的接口不兼容。我如何对它们进行分类?

+0

如果冒号前有一个字符?如果冒号前的部分在'(get-psprovider filesystem).drives.name'中?如果'(get-item $ x).GetType()'是一个DirectoryInfo与RegistryKey? – TessellatingHeckler

回答

1

您可以使用此方法($ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath),这样做。它有重载,允许您从路径中提取PowerShell提供程序和PowerShell驱动器信息。

'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 
'C:\ProgramData\Microsoft\Windows' | 
ForEach-Object { $Provider = $null } { 
    [void]$ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($_, [ref]$Provider, [ref]$null) 
    $Provider 
} 
0

这些命令告诉你类型:

(Get-Item 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run').GetType().Name # returns RegistryKey 
(Get-Item 'C:\ProgramData\Microsoft\Windows').GetType().Name # returns DirectoryInfo 

...还是得到同样信息的另一种方式......

$item = Get-Item 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' 
$item.GetType().Name # returns RegistryKey 

$item = Get-Item 'C:\ProgramData\Microsoft\Windows' 
$item.GetType().Name # returns DirectoryInfo 
+0

如果具有此路径的项目不存在? – PetSerAl

+0

'测试路径'path_string'' – TechSpud

+0

'测试路径'说,它是哪个提供者? – PetSerAl

相关问题