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

[PowerShell入门教程] 第2天:变量、管道、对象操作与执行策略详解

第2天:变量、管道、对象操作与执行策略详解

🎯 学习目标

  • 掌握 PowerShell 变量的声明与使用(含作用域)
  • 理解管道(|)如何传递 .NET 对象
  • 学会访问和操作对象的属性与方法
  • 了解并安全配置执行策略(ExecutionPolicy)

一、变量(Variables)

1. 基本语法

PowerShell 中所有变量以 $ 开头:

$name = "Alice"
$age = 30
$processes = Get-Process

💡 注意

  • 不需要显式声明类型(动态类型)
  • 变量名区分大小写?不区分(Windows 默认),但在 Linux/macOS 上可能区分(PowerShell Core)
2. 查看变量值
Write-Output $name
# 或直接输入变量名
$name
3. 变量类型(可选强类型)

虽然通常不需要,但可以强制指定类型:

[int]$count = 5
[string]$message = "Hello"
[datetime]$now = Get-Date

如果赋值类型不符,会尝试转换或报错:

[int]$x = "10"   # 成功
[int]$y = "abc"  # 报错:无法转换
4. 特殊变量
  • $_:在管道或脚本块中表示当前对象(类似 Python 的 x in map(lambda x: ..., list)
  • $?:上一个命令是否成功(True/False
  • $Error:错误历史记录(数组)
  • $PSVersionTable:当前 PowerShell 版本信息

二、管道(Pipeline)—— PowerShell 的灵魂

1. 什么是管道?

管道(|)将前一个命令的输出对象传递给下一个命令作为输入对象

✅ 关键区别:CMD 的管道传递的是文本,PowerShell 传递的是完整的 .NET 对象

2. 实例对比:文本 vs 对象
# 获取所有进程,只显示名称和ID
Get-Process | Select-Object Name, Id# 找出 CPU 使用超过 100 秒的进程
Get-Process | Where-Object { $_.CPU -gt 100 }# 按内存使用排序(降序),取前5个
Get-Process | Sort-Object WS -Descending | Select-Object -First 5

🔍 解析:

  • $_ 表示管道中当前处理的每个进程对象
  • .CPU 是该对象的属性(类型为 [double]
  • Where-Object 过滤对象,Select-Object 选择属性,Sort-Object 排序
3. 管道与函数组合

你可以像搭积木一样组合命令:

Get-Service |
Where-Object { $_.Status -eq 'Running' } |
Select-Object DisplayName, Status |
Format-Table -AutoSize

三、对象操作:属性与方法

PowerShell 中一切皆对象(基于 .NET)。你可以用 Get-Member 查看对象结构:

# 查看 Get-Date 返回的对象有哪些成员
Get-Date | Get-Member

输出示例:

TypeName: System.DateTimeName                 MemberType     Definition
----                 ----------     ----------
Add                  Method         datetime Add(timespan value)
Day                  Property       int Day {get;}
Hour                 Property       int Hour {get;}
ToString             Method         string ToString()
...
1. 访问属性
$date = Get-Date
$date.Year    # 输出:2025
$date.DayOfWeek  # 输出:Monday
2. 调用方法
$date.ToString("yyyy-MM-dd")  # 输出:2025-11-10
3. 多个对象批量操作
# 获取所有服务的名称,并转为大写
(Get-Service).Name.ToUpper()

⚠️ 注意:如果对象是数组,.ToUpper() 会自动对每个元素调用(PowerShell 的“成员枚举”特性)。


四、执行策略(ExecutionPolicy)—— 安全机制

1. 为什么需要 ExecutionPolicy?

为防止恶意脚本自动运行,PowerShell 默认禁止执行 .ps1 脚本。

Get-ExecutionPolicy

常见策略值:

策略说明
Restricted(默认)不允许运行任何脚本(仅交互式命令)
AllSigned仅允许运行经数字签名的脚本
RemoteSigned本地脚本可运行,远程脚本需签名(推荐开发使用)
Unrestricted允许所有脚本(⚠️ 高风险,不推荐)
Bypass无限制(用于自动化环境)
2. 修改执行策略(需管理员权限)
# 以管理员身份运行 PowerShell 后执行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

✅ 推荐使用 -Scope CurrentUser,避免影响系统全局设置。

3. 临时绕过策略(不修改设置)
# 仅本次会话允许运行脚本
PowerShell -ExecutionPolicy Bypass -File ".\myscript.ps1"

五、动手实践:综合练习

练习1:创建变量并操作对象
$myProc = Get-Process notepad -ErrorAction SilentlyContinue
if ($myProc) {Write-Host "记事本正在运行,PID: $($myProc.Id)"$myProc.Kill()  # 调用方法终止进程
} else {Write-Host "记事本未运行"
}
练习2:使用管道筛选高内存进程
Get-Process |
Where-Object { $_.WorkingSet64 -gt 100MB } |
Select-Object Name, @{Name="Memory(MB)"; Expression={[math]::Round($_.WS / 1MB, 2)}} |
Sort-Object "Memory(MB)" -Descending

💡 说明:@{} 创建计算属性(Calculated Property),用于格式化输出。

练习3:检查并设置执行策略
# 查看当前策略
$current = Get-ExecutionPolicy -Scope CurrentUser
Write-Host "当前用户策略: $current"# 如果是 Restricted,则设为 RemoteSigned
if ($current -eq "Restricted") {Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -ForceWrite-Host "已更新策略为 RemoteSigned"
}

六、今日重点总结

  • ✅ 变量以 $ 开头,支持动态/静态类型。
  • ✅ 管道传递的是对象,不是字符串,这是 PowerShell 强大的核心。
  • ✅ 用 Get-Member 探索对象结构,用 $_ 在管道中引用当前对象。
  • ✅ ExecutionPolicy 是安全机制,默认阻止脚本运行;开发建议设为 RemoteSigned(当前用户)。

📚 参考资料(来源:Microsoft Learn,已整合翻译)

  • About Variables
  • About Pipelines
  • Using the Get-Member Cmdlet
  • About Execution Policies

🏁 课后作业

  1. 编写一个命令:列出所有服务中状态为“Stopped”的服务,并只显示其名称和服务名(Name 和 DisplayName)。
  2. 创建一个变量 $files,存储当前目录下所有 .txt 文件,然后输出每个文件的名称和大小(KB)。
  3. 尝试运行一个简单的 .ps1 脚本(如 Write-Host "Hello"),观察默认策略下的报错,并通过正确方式使其运行。
http://www.dtcms.com/a/593573.html

相关文章:

  • 做网站运营的职业生涯规划wordpress 水印插件
  • 护照阅读器在酒店行业的应用
  • 继承的概念及使用
  • 建网站的地址手工制作小船
  • 技术选型深度评估:“六行神算”平台在医疗AI项目中的架构适配性
  • VLAN 和 VXLAN
  • PC微信 device uuid 算法
  • 外国网站的浏览器下载网站程序是什么意思
  • 【Docker多节点部署】基于“配置即身份“理念的 Docker 多节点 StarRocks 高可用集群自动化部署方案
  • 如何选择适合企业的数据仓库建模工具?​
  • Ethernet ip转SPI嵌入式板卡-让机器人与单片机互相联动
  • 免费推广网站大全下载安装南山网站-建设深圳信科
  • 【ZeroRange WebRTC】OpenSSL 与 WebRTC:原理、集成与实践指南
  • AnyVP*:企业级远程办公SSL深度技术解析
  • 重庆营销型网站建设多少钱学校网站功能描述
  • Spring @Component 和 @Bean 的区别与最佳实践
  • 怎么给自己公司做网站小影wordpress
  • C# 特性详解
  • 《 Linux 修炼全景指南: 六 》软件包管理器
  • QNAP紧急修复Pwn2Own 2025比赛中遭利用的7个0Day漏洞
  • 大学学部网站建设工作深圳牌申请网站空间
  • LeetCode算法学习之乘积最大子数组
  • 网站建设的业务范围福建住房城乡建设部网站
  • android启动模式使用场景具体说明
  • STM32 - Embedded IDE - GCC - 编译器设置的最佳方案
  • 霸州网站制作建免费的网站吗
  • 网站开发基本步骤adspower浏览器
  • 当机器人学会了“知轻重”:六维力传感器和关节力传感器如何重塑餐饮体验
  • TurMass 技术在语音的应用介绍- 低成本超远距离语音对讲方案
  • Linux 进程通信与同步机制:共享内存、内存映射、文件锁与信号量的深度解析