Page 1 of 1

比较运算符和条件逻辑

Posted: Wed Jan 22, 2025 4:08 am
by roseline371274
PowerShell 中有一系列用于执行对象(特别是带有 Object 名词的对象)繁重任务的 cmdlet。其中许多 cmdlet 是最常用的 cmdlet,而其他 cmdlet 则用于更专业的任务。

Where-Object cmdlet  允许您限制或过滤传递到管道的对象。例如,命令 Get-Service | Where-Object {$_.DependentServices -ne $null} 将返回具有依赖项的服务列表。Where-Object 使用的语法值得注意,并且也适用于其他一些对象 cmdlet。波浪括号用于在 PowerShell 中划定代码块,在本例中表示应用于管道中对象的条件。自动变量 $_ 用于指示正​​在评估的对象的当前实例。PowerShell 比较运算符使用带连字符的格式,因此在我们的示例中,-eq(等于)用于查找与单词“Stopped”完全匹配的内容。

对于在 PowerShell 控制台内进行交互使用,使用别名可以节省时间和精力。Where-Object cmdlet 使用问号 (?)。PowerShell 3.0 甚至允许您通过从管道中删除对脚本块和自动变量的需求来进一步简化 Where-Object 语法。在 PowerShell 3.0 中,此命令相当于上面提供的命令:  Get-Service | ? DependentServices -ne $null。

作用于对象
ForEach-Object 用于对对象的每个实例执行操作。从语法角度来看,ForE ach-Object 与 Where-Object 非常相似,两个 cmdlet 都使用脚本块和自动变量。ForEach-Object 的优势在于能够针对每个对象实例执行简单管道 克罗地亚whatsapp 数据 无法实现的复杂任务。例如,您可能需要列出文件共享的文件安全性,在这种情况下,您可以使用管道将 Get-ChildItem  cmdlet 传输到 ForEach-Object,然后对全名参数 ($_.FullName) 使用 Get-ACL 来列出文件列表的文件安全性。

与 Where-Object 一样,ForEach-Object cmdlet 可以使用别名简化,用百分号 (%) 表示。此外,还支持 PowerShell 3.0 语法,以便提供更直观的使用。

虽然筛选对象或对对象实例执行操作都是常见任务,但最好尽可能避免使用 Where-Object 和 ForEach-Object。许多 cmdlet 提供 -Filter 选项或其他参数,这些参数可以帮助限制结果数量,而无需查看对象的每个实例,通常可以显著提高性能。

同样,ForEach-Object 对管道对象的每个实例执行单独的操作。如果可能,应将对象直接管道传输到可以对整个对象执行所需操作的 cmdlet,而不必枚举对象内的每个项目。

系统管理员每天都会根据众多标准决定在服务器上执行哪些维护任务。使用 PowerShell 自动执行重复的管理任务通常需要使用逻辑来复制此决策过程。可以使用多种技术通过比较、筛选和条件逻辑来实现所需的结果。

PowerShell 比较运算符
如果不执行条件逻辑,创建 PowerShell 脚本就无法取得很大进展,条件逻辑从比较值开始。要检查用户是否存在、文件是否已创建,或者一台计算机是否能够连接到另一台计算机,都需要与值进行比较。PowerShell 中的一个大问题与语法有关:  PowerShell 使用 -lt 或 -gt 进行比较,而不是使用传统的比较运算符,如< 或 > 。

一些比较运算符最常用于数值,但它们也可用于处理日期或版本号以及其他变量类型。下表包含最常用于比较数字的比较运算符。