PowerShell 从基础到实战 4:从基础语法到实战应用

PowerShell 从基础到实战 4:从基础语法到实战应用

1.1 基本数组创建

使用 逗号@() 运算符 创建数组:

bash 复制代码
# 使用逗号创建数组
$fruits = "Apple", "Banana", "Orange"
Write-Host $fruits  # 输出: Apple Banana Orange

# 使用 @() 显式声明数组
$numbers = @(1, 2, 3, 4, 5)
Write-Host $numbers  # 输出: 1 2 3 4 5

1.2 多维数组

通过嵌套 @() 创建多维数组:

python 复制代码
# 二维数组(3x3)
$matrix = @(
    @(1, 2, 3),
    @(4, 5, 6),
    @(7, 8, 9)
)

# 访问元素
Write-Host $matrix[1][2]  # 输出: 6

1.3 动态添加元素

使用 += 操作符扩展数组:

bash 复制代码
$colors = @("Red", "Green")
$colors += "Blue"  # 添加单个元素
$colors += @("Yellow", "Purple")  # 添加多个元素
Write-Host $colors  # 输出: Red Green Blue Yellow Purple

二、PowerShell 访问数组

2.1 索引访问

数组索引从 0 开始:

ini 复制代码
$letters = @('A', 'B', 'C', 'D')
Write-Host $letters[0]  # 输出: A
Write-Host $letters[-1] # 输出: D(负数索引从末尾开始)

2.2 切片操作

使用 .. 操作符获取子数组:

ini 复制代码
$numbers = 0..9  # 创建 0-9 数组
$subset = $numbers[2..5]  # 获取第2到第5个元素
Write-Host $subset  # 输出: 2 3 4 5

2.3 遍历数组

使用 foreachfor 循环:

perl 复制代码
# foreach 循环
foreach ($item in $fruits) {
    Write-Host "Fruit: $item"
}

# for 循环
for ($i = 0; $i -lt $numbers.Count; $i++) {
    Write-Host "Index $i: $($numbers[$i])"
}

三、PowerShell 自定义函数及调用

3.1 定义函数

使用 function 关键字:

sql 复制代码
function Get-Greeting {
    return "Hello, World!"
}

Write-Host (Get-Greeting)  # 输出: Hello, World!

3.2 带参数的函数

使用 param 块定义参数:

php 复制代码
function Add-Numbers {
    param (
        [int]$a,
        [int]$b
    )
    return $a + $b
}

$result = Add-Numbers -a 3 -b 5
Write-Host "Sum: $result"  # 输出: Sum: 8

3.3 可变参数

使用 [params] 接收任意数量参数:

php 复制代码
function Sum-All {
    param (
        [Parameter(ValueFromRemainingArguments = $true)]
        [int[]]$nums
    )
    return ($nums | Measure-Object -Sum).Sum
}

$total = Sum-All 1 2 3 4 5
Write-Host "Total: $total"  # 输出: Total: 15

四、PowerShell 函数返回值

4.1 返回单个值

默认返回最后一个表达式的值:

bash 复制代码
function Get-Value {
    42  # 隐式返回
}

Write-Host (Get-Value)  # 输出: 42

4.2 显式返回

使用 return 关键字:

php 复制代码
function Is-Even {
    param ([int]$num)
    return $num % 2 -eq 0
}

Write-Host (Is-Even 4)  # 输出: True

4.3 返回多个值

返回数组或哈希表:

ini 复制代码
function Get-Stats {
    return @{
        Count = 5
        Total = 20
        Average = 4
    }
}

$stats = Get-Stats
Write-Host "Average: $($stats.Average)"  # 输出: Average: 4

五、PowerShell 定义文本

5.1 单引号 vs 双引号

  • 单引号:变量不会解析
  • 双引号:变量会被解析
bash 复制代码
$name = "Alice"
Write-Host 'Hello, $name'   # 输出: Hello, $name
Write-Host "Hello, $name"   # 输出: Hello, Alice

5.2 多行字符串

使用 @""@ 定义多行文本:

bash 复制代码
$message = @"
This is a multi-line
string in PowerShell.
Variables like $name are not expanded.
"@

Write-Host $message

六、PowerShell 实现用户交互

6.1 获取输入

使用 Read-Host

bash 复制代码
$name = Read-Host "Enter your name"
Write-Host "Hello, $name"

6.2 获取密码

使用 Read-Host -AsSecureString

ruby 复制代码
$securePassword = Read-Host -AsSecureString "Enter password"
# 转换为明文(仅用于调试)
$plainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securePassword))
Write-Host "Password: $plainPassword"

6.3 输入验证

结合 while 循环验证输入:

perl 复制代码
do {
    $age = Read-Host "Enter your age (must be >=18)"
    if ($age -lt 18) {
        Write-Host "Invalid input. Try again." -ForegroundColor Red
    }
} while ($age -lt 18)

七、PowerShell 格式化字符串

7.1 使用 -f 运算符

ini 复制代码
$name = "Bob"
$score = 95
$message = "Name: {0}, Score: {1}" -f $name, $score
Write-Host $message  # 输出: Name: Bob, Score: 95

7.2 对齐和格式化

bash 复制代码
# 左对齐(-10),右对齐(10)
Write-Host "{0,-10} {1,5}" -f "Apple", 1.2
Write-Host "{0,-10} {1,5}" -f "Banana", 3.5

# 数字格式化
Write-Host "Price: {0:C}" -f 19.99  # 输出: Price: $19.99

八、PowerShell String 对象方法

8.1 常用方法

bash 复制代码
$text = "  Hello, PowerShell!  "

# 去除空格
$trimmed = $text.Trim()
Write-Host "Trimmed: '$trimmed'"

# 大写/小写转换
Write-Host "Upper: '$($text.ToUpper())'"
Write-Host "Lower: '$($text.ToLower())'"

# 替换内容
$replaced = $text.Replace("PowerShell", "PS")
Write-Host "Replaced: '$replaced'"

# 查找子串
if ($text.Contains("PowerShell")) {
    Write-Host "Found PowerShell"
}

# 分割字符串
$words = $text.Split(" ")
Write-Host "Words: $words"

8.2 正则表达式

perl 复制代码
# 替换所有数字
$result = "abc123def456" -replace "\d", "*"
Write-Host "Replaced: $result"  # 输出: Replaced: abc***def***

# 提取匹配项
if ("Email: test@example.com" -match "(\w+)@(\w+).\w+") {
    Write-Host "User: $matches[1], Domain: $matches[2]"
}

总结

功能 关键点
数组操作 使用 @() 创建数组,通过索引和循环访问元素
函数定义与调用 使用 functionparam 定义函数,支持可变参数和返回值
字符串处理 区分单引号和双引号,使用 @""@ 定义多行文本
用户交互 使用 Read-Host 获取输入,Read-Host -AsSecureString 处理密码
字符串格式化 使用 -f 运算符进行格式化,支持对齐、数字格式化等
String 对象方法 掌握 Trim(), Replace(), Split() 等常用方法,结合正则表达式处理文本

通过以上内容的学习,您已掌握了 PowerShell 的核心语法和实用技巧。建议结合实际需求编写脚本,例如自动化部署、日志分析、系统监控等,进一步提升技能!

相关推荐
C4程序员2 分钟前
北京JAVA基础面试30天打卡03
java·开发语言·面试
Java技术小馆1 小时前
PromptPilot打造高效AI提示词
java·后端·面试
国家不保护废物1 小时前
Web Worker 多线程魔法:告别卡顿,轻松实现图片压缩!😎
前端·javascript·面试
BOB_BOB_BOB_2 小时前
【ee类保研面试】其他类---计算机网络
计算机网络·面试·职场和发展·保研
UrbanJazzerati4 小时前
如何使用 PowerShell 动态授权不同 Salesforce 环境的详细指南
面试·shell
ZzMemory5 小时前
深入理解JS(八):事件循环,单线程的“一心多用”
前端·javascript·面试
小高0077 小时前
🚀前端异步编程:Promise vs Async/Await,实战对比与应用
前端·javascript·面试
amazinging8 小时前
北京-4年功能测试2年空窗-报培训班学测开-第七十一天-面试第二天
python·学习·面试
丘山子8 小时前
如何规避 A/B Testing 中的致命错误?何时进行 A/B 测试?
前端·后端·面试