Powershell:给定一个字符串,我如何知道我处理的是哪种类型的路径?
例如,我可以键入Powershell:给定一个字符串,我如何知道我处理的是哪种类型的路径?,powershell,Powershell,例如,我可以键入gci hkcu:并获取注册表项列表,或者键入gci c:\并获取目录列表 假设$list包含其中一个查询的结果,我如何知道我在处理什么 当然,我可以执行类似于$list[0].GetType()的操作并解析结果,但这不是很健壮,而且,对于空列表我该怎么办?(这意味着我可能问错了问题,因为我认为我需要在实际调用gci之前知道答案)最简单的方法是处理传递到gci的内容,而不是尝试处理输出。然后,您所要做的就是查看:,或者在最坏的情况下检查“本地”目录。您可以执行以下操作: $pa
gci hkcu:
并获取注册表项列表,或者键入gci c:\
并获取目录列表
假设$list
包含其中一个查询的结果,我如何知道我在处理什么
当然,我可以执行类似于
$list[0].GetType()
的操作并解析结果,但这不是很健壮,而且,对于空列表我该怎么办?(这意味着我可能问错了问题,因为我认为我需要在实际调用gci
之前知道答案)最简单的方法是处理传递到gci的内容,而不是尝试处理输出。然后,您所要做的就是查看:
,或者在最坏的情况下检查“本地”目录。您可以执行以下操作:
$path = "HKCU:"
$qualifier = (split-path $path -Qualifier).Trim(":")
get-psdrive | ?{ $_.Name -eq $qualifier } | select provider
如果路径是相对路径,请使用解析路径$path
此外,您不必在路径上使用gci
。您可以使用gi
:
(gi hkcu:).gettype()
在试图围绕这个问题进行编码时,我偶然发现了答案:
(获取ItemProperty$path).PSProvider.Name
这将返回
Get-PSProvider
中列出的其中一个提供程序,它们(通常)是不变的。这样做的一个问题是,这对以下内容不起作用:cd hkcu:;gci
。忽略我之前的评论,我没有立即搜索您的“最坏情况”行。假设$list包含其中一个查询的结果:@($list)[0]。PSProvider.Name