当前位置: 首页 > 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.xdnf.cn/news/1312057.html

相关文章:

  • 云安全 - The Big IAM Challenge
  • 二分查找。。
  • 智能合约:区块链时代的“数字契约革命”
  • AutoDL使用学习
  • 【Java web】Servlet 详解
  • CUDA 编程笔记:CUDA延迟隐藏
  • [优选算法专题二滑动窗口——最大连续1的个数 III]
  • huggingface TRL中是怎么获取参考模型的输出的
  • Swift 实战:实现一个简化版的 Twitter(LeetCode 355)
  • 新手向:GitCode疑难问题诊疗
  • Java 10 新特性及具体应用
  • 嵌入式硬件篇---电感串并联
  • 2^{-53} 单位舍入误差、机器精度、舍入的最大相对误差界限
  • 实例分割-动手学计算机视觉13
  • docker安装mongodb及java连接实战
  • Effective C++ 条款45:运用成员函数模板接受所有兼容类型
  • Linux怎么查看服务器开放和启用的端口
  • 【原理】C# 字段、属性对比及其底层实现
  • illustrator插件大全 免费插件介绍 Ai设计插件集合 (3)
  • Python语言一键整理xhs评论 基于github的开源项目 MediaCrawler
  • Linux进程概念(四)环境地址变量
  • 同创物流学习记录2·电车
  • 链式二叉树的基本操作——遍历
  • 实时计算 记录
  • 美国服务器环境下Windows容器工作负载基于指标的自动扩缩
  • 从盲区到全域:黎阳之光视频孪生+AI智能算法驱动智慧机场三维感知革命
  • 4.6 Vue 3 中的模板引用 (Template Refs)
  • CSS复习
  • Jenkins安装部署(Win11)和常见配置镜像加速
  • SysTick寄存器(嘀嗒定时器实现延时)