我正在做一个函数,可以采取可以是文件系统或注册表路径的参数。例如如何确定路径是文件系统还是注册表?
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
'C:\ProgramData\Microsoft\Windows'
我不想通过命名参数划分它们,但它们的接口不兼容。我如何对它们进行分类?
我正在做一个函数,可以采取可以是文件系统或注册表路径的参数。例如如何确定路径是文件系统还是注册表?
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
'C:\ProgramData\Microsoft\Windows'
我不想通过命名参数划分它们,但它们的接口不兼容。我如何对它们进行分类?
您可以使用此方法($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
}
这些命令告诉你类型:
(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
如果冒号前有一个字符?如果冒号前的部分在'(get-psprovider filesystem).drives.name'中?如果'(get-item $ x).GetType()'是一个DirectoryInfo与RegistryKey? – TessellatingHeckler