[玩转系统] 如何使用 PowerShell 测试路径 Cmdlet
作者:精品下载站 日期:2024-12-14 13:04:44 浏览:13 分类:玩电脑
如何使用 PowerShell 测试路径 Cmdlet
如果您需要验证文件、注册表项、证书或任何其他 PowerShell 驱动器路径的路径,则需要 Test-Path cmdlet。
Test-Path cmdlet 是一种简单但有用的方法,可以快速检查文件和其他项目的许多属性。它可以检查文件是否存在(或其他项目类型)、字符串是否采用正确的路径格式,甚至项目是否比特定时间新或旧。
在本教程中,您将了解有关 PowerShell Test-Path cmdlet 的所有信息以及如何使用它来改进 PowerShell 脚本。
先决条件
如果您想按照本教程中的示例进行操作,您将需要一件事:电源外壳。更具体地说,本教程将在 Windows 10 上使用 PowerShell v7.03,尽管您将学到的许多技术也适用于旧版本。
测试路径 Cmdlet 的作用是什么?
PowerShell Test-Path cmdlet 是最简单的命令之一。这是一个从一开始就存在于 PowerShell 中的命令,并且只返回两个值;对或错。
但是,不要让简单性欺骗了你;它会为您节省大量时间来验证 PowerShell 脚本中的信息。
使用 PowerShell 提供程序和驱动器时,请将 PowerShell Test-Path cmdlet 视为质量控制。编写脚本时,您通常会使用 PowerShell 驱动器中包含的各种项目。 PowerShell 驱动器例如 C:\、 HKLM、Cert 等。
Test-Path
不适用于所有 PS 驱动器。例如,如果您尝试对注册表项使用Test-Path
,它将起作用。如果您尝试对注册表值使用Test-Path
,它每次都会返回False
。
如果您好奇,请立即在 PowerShel 中运行 Get-PSDrive
cmdlet,并注意为您显示的所有 PS 驱动器。
所有这些驱动器内部都有路径,例如C:\Windows、HKLM:\Software等。对于 PowerShell 脚本,最好先测试路径是否有效或不存在。这就是 PowerShell 的 Test-Path
的作用。
Test-Path
定义返回 True
或 False
的条件,具体取决于是否满足特定条件(通常是文件/文件夹、注册表项、证书,甚至变量是否存在)。
测试路径参数和用法
与许多其他 PowerShell cmdlet 一样,Test-Path
cmdlet 具有各种可更改其行为的参数。现在让我们介绍每个参数并演示其工作原理以及您可能期望看到的结果类型。
小路
Path
参数是您在每次 Test-Path
执行时使用的强制参数。 Path
参数定义您要测试其是否存在的 PSDrive 路径。
例如,如果您想测试文件夹 C:\Foo 是否存在,则需要为 Path
参数提供适当的路径。然后,根据 C:\Foo 是否实际存在,Test-Path
将返回 True
或 False
>。
PS> Test-Path -Path 'C:\Foo'
True
相同的技术也可用于任何项目路径。也许您想测试注册表项 HKLM:\Software\Foo 是否存在。只需使用带有 Path
参数的注册表项路径即可。
PS> Test-Path -Path 'HKLM:\Software\Foo'
True
请注意,本教程中演示的所有技术都适用于任何 PowerShell 驱动器路径。
使用通配符
如果您不一定关心路径是否具有文字值,会发生什么。相反,您只想检查路径是否与特定模式匹配。在这种情况下,您可以在 Path
值中使用通配符。
也许您想检查您的 C:\Foo 文件夹是否包含任何以 Bar 开头的子文件夹。在这种情况下,您可以使用通配符。
PS> Test-Path -Path 'C:\Foo\Bar*'
执行上述命令后,Test-Path
将检查是否存在以 Bar 开头的任何文件夹并返回True
或 False
取决于是否存在符合该条件的文件夹。
星号 (*
) 匹配一个或多个字符,但您也可以使用问号 (?
) 来获得更细粒度并测试单个字符特点。
以上述场景为例,如果文件夹 C:\Foo\Bar1 存在,您可以测试 Foo 中以 Bar 开头的任何子文件夹 并且使用下面的命令正好是四个字符。
PS> Test-Path -Path 'C:\Foo\Bar?'
如果出于某种原因,您想要使用带有通配符的 Path
参数,但又想逐字匹配 *
等通配符,您始终可以转义带反引号 (`) 的通配符。
文字路径
LiteralPath
参数与 Path
参数几乎相同,但有一个例外;它不允许使用通配符。使用LiteralPath
将按字面意思解释路径的值。
例如,如果您尝试使用 LIteralPath
在路径值内使用星号或问号,Test-Path
将完全忽略通配符并按字面测试 C:\Foo\Bar? 就像下面的例子一样。
PS> Test-Path -LiteralPath 'C:\Foo\Bar?'
如果您不需要使用任何通配符来确保 Test-Path
测试您期望的路径,则应该使用 LiteralPath
作为默认路径参数。
路径类型
默认情况下,当您运行 Test-Path
并为其提供路径时,如果在该路径中找到任何内容,它将返回 True
。具有路径的项目可以是一个容器,例如文件夹、注册表项、证书存储等,也可以是叶,例如文件、注册表值或证书。
您可以使用 PathType
参数强制 Test-Path
进行更精细的测试,并专门针对容器或叶项进行测试。
默认情况下,Test-Path 使用 PathType
值 Any
。
例如,如果 C:\Foo\Bar 处有一个文件夹,并且您要在该路径中查找文件,则可以使用 PathType
参数,如下所示。您只想检查名为 C:\Foo\Bar 的文件是否存在。
PS> Test-Path -LiteralPath 'C:\Foo\Bar' -PathType Leaf
也许相反,您需要确认 C:\Foo\Bar 是否实际上是一个文件。在这种情况下,您需要检查容器。
PS> Test-Path -LiteralPath 'C:\Foo\Bar' -PathType Container
包括
如果使用 Path
参数和通配符,您有时需要更具体。在这种情况下,您需要查看 Include
和 Exclude
参数。
假设您有以下文件夹:
- C:\Foo\Bar1
- C:\Foo\Bar2
- C:\Foo\Bar3
您想要检查是否存在以 Bar 开头且恰好是四个字符的文件夹,例如 Bar1、Bar2 等。
PS> Test-Path -Path C:\Foo\Bar? -PathType Container
上面的命令工作正常,但现在您只想在 C:\Foo 中查找名为 Bar2 的文件夹。在这种情况下,您可以使用 Include
参数。
PS> Test-Path -Path C:\Foo\Bar? -PathType Container -Include 'Bar2'
上面的命令现在仅测试单个文件夹 C:\Foo\Bar2。您可能最好只使用 Test-Path -Path 'C:\Foo\Bar2' -PathType Container
来代替。
排除
Exclude
参数的工作方式与 Include
参数类似,只不过这次它排除与字符串匹配的路径。
也许您想确保 C:\Foo 文件夹中至少有一个文件,并使用以下命令:
PS> Test-Path -Path C:\Foo\* -PathType Leaf
如果C:\Foo中有任何文件,上面的命令将返回True
或False
。但也许您想确保除了文件扩展名为 txt
的文件之外的所有文件都存在。在这种情况下,您可以使用带有通配符的 Exclude
参数来从测试中排除所有具有 txt
扩展名的文件。
PS> Test-Path -Path C:\Foo\* -PathType Leaf -Exclude *.txt
筛选
根据微软的文档,Filter
参数“以提供者的格式或语言指定过滤器。此参数的值符合 Path
参数的要求。过滤器的语法(包括通配符的使用)取决于提供商”。
尽管 Filter
参数应与其他 cmdlet(例如 Get-Childitem
)一起使用,但很少与 Test-Path
一起使用。如果您发现 Filter
参数有很好的用途,请通过 Twitter @adbertram 联系。
相关:Get-ChildItem:将文件、注册表、证书等作为一个列出
较新
您是否曾经需要检查文件上的时间戳并据此做出决定?如果是这样,NewerThan
和 OlderThan
参数可以节省大量代码。 NewerThan
参数检查项目的时间戳是否比特定日期新。
NewerThan
参数接受一个字符串或一个 DateTime 对象来表示要检查的时间戳。例如,要检查文件 C:\Foo\bar.txt 是否是在 2021 年 1 月 20 日之后创建的,您可以运行 Test-Path
,如下所示。
Test-Path -LiteralPath 'C:\Foo\bar.txt' -NewerThan 'January 20, 2021'
## or
Test-Path -LiteralPath 'C:\Foo\bar.txt' -NewerThan '1/20/21'
年长过
OlderThan
参数与 NewerThan
参数完全相同,但方向相反。此参数检查项目是否早于特定日期。
Test-Path -LiteralPath 'C:\Foo\bar.txt' -OlderThan 'January 20, 2021'
## or
Test-Path -LiteralPath 'C:\Foo\bar.txt' -OlderThan '1/20/21'
已验证
如果您曾经在脚本中动态构建过路径,您就会知道其中的困难。有时您可能会误按某个键或以某种方式在路径中获得一些特殊字符;如果是这样,则 IsValid
参数适合您。
IsValid
参数是一个独特的参数,它将 Test-Path
转换为检查路径语法的 cmdlet,而不是检查项目是否存在的 cmdlet。此参数仅确认路径是否有效。
例如,也许您需要验证路径在语法上是否有效。您正在使用几个变量并将它们连接起来以构建路径。
连接路径时,请始终使用Join-Path
cmdlet。这仅用于示例目的!
$someVar = 'abc:dff'
$rootPath = 'C:\'
$path = "$someVar$rootPath
现在,为了确保动态创建的路径有效,请使用 IsValid
参数,如下所示。您会发现 Test-Path
返回 False
。
PS> Test-Path -LiteralPath $path -IsValid
False
路径 abc:dffC:\
不是有效路径,现在允许您根据这种情况创建验证例程。
如果您使用的是 PowerShell v6.1.2 或更早版本,并且同时使用 IsValid
和 PathType
参数,Test-Path
将忽略PathType
参数。
凭据
尽管您会在 Test-Path
上找到 Credential
参数,但您可能认为可以使用它作为另一个用户对 PS 驱动器进行身份验证。这是一个有效的假设,但它是错误的。
不幸的是,Credential
参数对 Test-Path
cmdlet 没有太多作用。如果您想使用备用凭据调用 Test-Path
,Microsoft 建议使用 Invoke-Command
cmdlet 并使用 Credential
参数。
Invoke-Command -Credential (Get-Credential) -Scriptblock {Test-Path -LiteralPath 'C:\'}
相关:Invoke-Command:运行远程代码的最佳方式
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag