当前位置: 首页 > news >正文

PowerShell 第11章:过滤和比较(上)

PowerShell 第11章:过滤和比较(上)

PowerShell 第11章:过滤和比较(上) **左过滤思维 & 比较运算符全解**

  • PowerShell 第11章:过滤和比较(上)
    • 1️⃣ 为什么几乎所有命令行都要“先过滤”?
    • 2️⃣ 左过滤的常用场景与“正确用法”
      • 2.1 能用参数就不用管道
      • 2.2 不能过滤怎么办?
    • 3️⃣ 比较运算符“全家桶”
      • 3.1 基础运算符
      • 3.2 模式匹配
      • 3.3 布尔逻辑
    • 4️⃣ 实战:把“左过滤”用在日常命令
    • 5️⃣ 课后 3 分钟练习
    • 6️⃣ 一图速记

左过滤思维 & 比较运算符全解

目标:学会“在最靠近数据源的地方把不需要的对象挡在门外”,并熟练掌握比较运算符,为后续的 Where-Object、管道迭代打下基础。


1️⃣ 为什么几乎所有命令行都要“先过滤”?

  • 你真正关心的通常不是“所有进程/所有服务”,而是满足某些条件的那一小撮。

  • 左过滤(Left Filtering):尽量把过滤条件放在命令行最左边(越靠近数据源越好)。

    • 好处:减少无谓的数据传输与计算,网络/服务器更省、命令更快。
    • 代价:不同 Cmdlet 的过滤写法不尽相同,需要一点“API 记忆”。

例子

  • 直接在数据源筛选(推荐):

    # 仅要名字以 DC 开头的计算机对象(Active Directory)
    Get-ADComputer -Filter "Name -like 'DC*'"
    
  • 不能满足就交给通用过滤器(次选):

    # 只要正在运行的服务(Get-Service 不支持直接按 Status 过滤)
    Get-Service | Where-Object { $_.Status -eq 'Running' }
    

2️⃣ 左过滤的常用场景与“正确用法”

2.1 能用参数就不用管道

  • 某些 Cmdlet 提供了 “过滤参数”,直接过滤最省事:

    Get-Service -Name 'e*','s*'        # 仅按 Name 支持过滤
    Get-ADComputer -Filter "Enabled -eq 'true'"   # AD 模块支持属性级过滤
    

经验:先看完整帮助Get-Help <Cmdlet> -Full),能用参数过滤就不要把所有对象拉回来再 Where-Object

2.2 不能过滤怎么办?

  • 使用 Where-Object(下篇详谈),或使用括号表达式将另一条命令的输出作为参数值:

    Get-WmiObject -Class Win32_BIOS -ComputerName (Get-Content .\names.txt)
    

3️⃣ 比较运算符“全家桶”

规则:运算结果永远是布尔值($true/$false)。字符串比较默认不区分大小写,大小写敏感使用 -c* 版本。

3.1 基础运算符

语义不区分大小写区分大小写
相等 / 不等-eq / -ne-ceq / -cne
大于 / 小于-gt / -lt-cgt / -clt
大于等于 / 小于等于-ge / -le-cge / -cle

例子

5 -eq 5        # $true
'Hello' -eq 'hello'    # $true(不区分大小写)
(Get-Date) -ge '2012-12-02'   # 日期也能比

3.2 模式匹配

语义不区分大小写区分大小写
通配符匹配(支持 *-like / -notlike-clike / -cnotlike
正则匹配-match / -notmatch-cmatch / -cnotmatch

例子

'Hello' -like '*ll*'      # $true
'svchost.exe' -match '^svc.*\.exe$'  # $true

3.3 布尔逻辑

(5 -gt 10) -and (10 -gt 100)  # $false
(5 -gt 10) -or (10 -lt 100)   # $true
-not $true                    # $false# 判断“没有响应”的进程(两种写法)
$_.Responding -eq $false
-not $_.Responding

小技巧:布尔逻辑常与 () 配合,读起来顺、维护性高。


4️⃣ 实战:把“左过滤”用在日常命令

# AD 里只捞需要的(别 filter * 再海量回传)
Get-ADComputer -Filter "OperatingSystem -like '*Server*'"# Get-Service 只能按 Name 过滤;状态筛选放 Where(下篇继续)
Get-Service -Name 's*' # WMI/ CIM 过滤常有自己一套(后续章节详讲)

5️⃣ 课后 3 分钟练习

  1. 找出名字以 DC 开头的域控:

    Get-ADComputer -Filter "Name -like 'DC*'"
    
  2. 只显示名为 e*s* 的服务:

    Get-Service -Name 'e*','s*'
    
  3. 判断字符串是否匹配某正则:

    'conhost.exe' -match '^c.*\.exe$'
    

6️⃣ 一图速记

  • 能参数过滤,就别 Where
  • 越靠左越好,越靠近数据源越好
  • 字符串默认不区分大小写,敏感用 -c*
  • 模式匹配:简单用 -like,复杂用 -match(正则)

http://www.dtcms.com/a/334966.html

相关文章:

  • 深入分析MVCC机制
  • 16.CNN——猫狗二分类识别
  • Git使用和理解上的一些问题
  • ADHD时间感知组件
  • Java 9 新特性及具体应用
  • Flowith-节点式GPT-4 驱动的AI生产力工具
  • PS插件整合包!内置数百款PS插件,支持PS2017-PS2025所有版本!
  • 后量子密码算法SLH-DSA介绍及开源代码实现
  • 【学习嵌入式day-26-线程间通信】
  • Python脚本开发-统计Rte中未连接的Port
  • 鸿蒙应用开发和Vue网页开发中生命周期的区别
  • vue3动态的控制表格列的展示简单例子
  • Python延申内容(一)
  • GDB实战教学
  • LakeHouse--湖仓一体架构
  • 基于C++的词法分析器:使用正则表达式的实现
  • 【OpenGL】LearnOpenGL学习笔记10 - 平行光、点光源、聚光灯
  • Spring Cloud系列—Alibaba Seata分布式事务
  • Linux 文件删除后,df -h磁盘空间未更新
  • 安卓四大组件基础题
  • GPIO初始化及调用
  • Go语言指针与内存分配深度解析:从指针本质到 new、make 的底层实现
  • Spring三级缓存
  • 深入理解 Linux 线程:从概念到虚拟地址空间的全面解析
  • 机器学习的特征工程(特征构造、特征选择、特征转换和特征提取)详解
  • 028 动静态库 —— 动态库
  • 第3问 什么是数据指标?
  • 41 C++ STL模板库10-容器3-list
  • MATLAB R2010b系统环境(一)MATLAB简介
  • 云原生俱乐部-RH124知识点总结(3)