1 变量使用说明
# 声明和赋值变量
$var = "Hello, World!"
# 输出变量值
Write-Host $var
2 交互式输入
# 从用户获取输入
$name = Read-Host "Enter your name"
Write-Host "Hello, $name!"
3 多分支判断
$number = 5
if ($number -gt 10) {
Write-Host "Number is greater than 10"
} elseif ($number -lt 5) {
Write-Host "Number is less than 5"
} else {
Write-Host "Number is between 5 and 10"
}
4 foreach遍历
# 遍历数组
$fruits = @("Apple", "Banana", "Orange")
foreach ($fruit in $fruits) {
Write-Host $fruit
}
# 遍历哈希表(键值对)
$person = @{
"Name" = "John"
"Age" = 30
}
foreach ($key in $person.Keys) {
Write-Host "$key: $($person[$key])"
}
5 函数定义
# 定义函数
function SayHello($name) {
Write-Host "Hello, $name!"
}
# 调用函数
SayHello "Alice"
6 csv文件操作
# 读取 CSV 文件
$csvFilePath = "C:\data.csv"
$data = Import-Csv -Path $csvFilePath
# 遍历 CSV 数据
foreach ($row in $data) {
Write-Host "Name: $($row.Name), Age: $($row.Age)"
}
# 导出为 CSV 文件
$outputFilePath = "C:\output.csv"
$data | Export-Csv -Path $outputFilePath -NoTypeInformation
7 正则提取
# 提取行中的日期部分(YYYY-MM-DD 格式)
$line = "Today's date is 2023-08-28"
$date = [regex]::Match($line, '\d{4}-\d{2}-\d{2}').Value
Write-Host $date
# 提取第3到第7列的字符
$line = "12345-67890-ABCDE"
$columns = [regex]::Match($line, '(.{2})(.{5})').Groups[2].Value
Write-Host $columns
8 通过截取方式来获取值,类似awk
echo "123-456-789" | % {$_.split('=')[0]}
# 以-位分隔符,截取第一列,计算机是以0开始计算的
# 使用类似 AWK 的方式截取第3和第7列
Get-Content -Path "file.txt" | ForEach-Object { $_ -split '\s+' } | Select-Object -Property @{Name="Column3"; Expression={$_.[2]}}, @{Name="Column7"; Expression={$_.[6]}}
#改成多行处理
# 使用类似 AWK 的方式截取第3和第7列(多行处理)
$lines = Get-Content -Path "file.txt"
$results = foreach ($line in $lines) {
$columns = $line -split '\s+'
[PSCustomObject]@{
Column3 = $columns[2]
Column7 = $columns[6]
}
}
$results
在这个示例中,我们首先使用 Get-Content
cmdlet 将文件内容读入到 $lines
数组中。然后,通过 foreach
循环遍历每一行文本。
在循环中,我们将每一行的列拆分成数组,并使用 [PSCustomObject]
创建一个自定义对象,其中包含了第3列和第7列的值。最后,将每个自定义对象添加到 $results
数组。
通过这种方式,您可以实现逐行处理并将提取的列保存到自定义对象中。最终,$results
数组将包含所有行的截取结果,您可以随意处理或输出。