PowerShell教程 - 编程结构(Program Struct)- 第四部分
2022/8/22 5:24:11
本文主要是介绍PowerShell教程 - 编程结构(Program Struct)- 第四部分,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
更新记录
转载请注明出处。
2022年8月21日 发布。
2022年8月18日 从笔记迁移到博客。
分支结构(Branching)
if语句(if Statement)
if(条件) { #code }
实例:
$userInput = Read-Host "Input Number"; if([int]$userInput -eq 666) { "Panda666.com" | Out-Default; }
if-else语句(if-else Statement)
if(条件) { #code } else { #code }
实例:
$userInput = Read-Host "请输入你的长度"; if([int] $userInput -ge 18) { "很长" | Out-Host; } else { "一般般" | Out-Host; }
if-elseif-else语句(if-elseif-else Statement)
if(Boolean_expression 1) { // Executes when the Boolean expression 1 is true }elseif(Boolean_expression 2) { // Executes when the Boolean expression 2 is true }elseif(Boolean_expression 3) { // Executes when the Boolean expression 3 is true }else { // Executes when the none of the above condition is true. }
实例:
$x = 30 if($x -eq 10){ write-host("Value of X is 10") } elseif($x -eq 20){ write-host("Value of X is 20") } elseif($x -eq 30){ write-host("Value of X is 30") } else { write-host("This is else statement") }
switch语句(Switch Statement)
形式1:
switch [-regex|-wildcard][-casesensitive] (<value>) { <condition> { <statements> } <condition> { <statements> } }
形式2:处理文件
switch [-regex|-wildcard][-casesensitive] -File <Name> { <condition> { <statements> } <condition> { <statements> } }
匹配数值
switch(3){ 1 {"One"} 2 {"Two"} 3 {"Three"} 4 {"Four"} 3 {"Three Again"} }
测试数值
switch(3){ 1 {"One"} 2 {"Two"} 3 {"Three"; break } 4 {"Four"} 3 {"Three Again"} }
测试多个数值
switch(4,2){ 1 {"One"} 2 {"Two"} 3 {"Three"; break } 4 {"Four"} 3 {"Three Again"} }
测试变量
$value = 2 switch ($value) { 1 { Write-Host 'value is 1' } default { Write-Host 'No conditions matched' } }
测试多个值
switch (1, 2) { 1 { Write-Host 'Equals 1' } 2 { Write-Host 'Equals 2' } }
测试正则表达式
switch -Wildcard ('cat') { 'c*' { Write-Host 'The word begins with c' } '???' { Write-Host 'The word is 3 characters long' } '*t' { Write-Host 'The word ends with t' } }
switch -Regex ('cat') { '^c' { Write-Host 'The word begins with c' } '[a-z]{3}' { Write-Host 'The word is 3 characters long' } 't$' { Write-Host 'The word ends with t' } }
测试表达式
switch (Get-Date) { { $_ -is [DateTime] } { Write-Host 'This is a DateTime type' } { $_.Year -ge 2017 } { Write-Host 'It is 2017 or later' } }
循环结构(Looping)
for语句(for Statement)
和C#中的for语句没有两样,但注意数据类型
for (<intial>; <exit condition>; <repeat>){ <body-statements> }
实例:
遍历输出数值
$userInput = Read-Host "Input Number"; for([int]$i = 0; $i -lt [int]$userInput; $i++) { "Number = $i" | Out-Default; }
遍历输出数组
$array = @("item1", "item2", "item3") for($i = 0; $i -lt $array.length; $i++) { $array[$i]; }
while语句(while Statement)
和C#中的for语句没有两样,但注意数据类型
while (<condition>) { <body-statements> }
实例:
打印小于用户输入数值的数值
$userInput = Read-Host "Input Number"; [int]$i = 0; while($i -lt [int]$userInput) { "Number = $i" | Out-Default; $i++; }
将数值的元素值自增1
$array = @("item1", "item2", "item3") $counter = 0; while($counter -lt $array.length){ $array[$counter] $counter += 1 }
等待文件存在检测
while (-not (Test-Path $env:TEMP\test.txt -PathType Leaf)) { Start-Sleep -Seconds 10 }
do-while语句(do-while Statement)
和C#中的for语句没有两样,但注意数据类型
do { <body-statements> } <until | while> (<condition>)
注意:分为until和while
Loops based on do until will exit when the condition evaluates to true
Loops based on do while will exit when the condition evaluates to false
实例:
遍历输出小于指定值的数值
[int]$i = 10 do { "Number = $i" | Out-Default; $i--; }while($i -gt 0)
遍历输出数组元素
$array = @("item1", "item2", "item3") $counter = 0; do { $array[$counter] $counter += 1 } while($counter -lt $array.length)
foreach语句(foreach Statement)
foreach (<element> in <collection>) { <body-statements> }
实例:
遍历数组
$array = @("item1", "item2", "item3") foreach ($element in $array) { $element } $array | foreach { $_ }
遍历命令结果
foreach ($process in Get-Process) { Write-Host $process.Name }
跳出结构(Jump Struct)
break语句
和C#中的break语句没有两样
实例:
[int]$i = 10 do { "Number = $i" | Out-Default; $i--; if($i -eq 5) { break; } }while($i -gt 0)
continue语句
和C#中的break语句没有两样
实例:
[int]$i = 10 do { $i--; if($i -eq 5) { continue; } "Number = $i" | Out-Default; }while($i -gt 0)
分支和赋值(Branching and assignment)
分支和循环语句可以直接返回值
实例:
获得计算后的值
$value = 20 $units = 'TB' $bytes = switch ($Units) { 'TB' { $value * 1TB } 'GB' { $value * 1GB } 'MB' { $value * 1MB } default { $value } }
获得正在运行的服务
$serviceProcesses = foreach ($service in Get-CimInstance Win32_Service - Filter 'State="Running"') { Get-Process -Id $service.ProcessId }
异常处理
try-finally
try { } finally { }
try-catch-finally
try { 1/0 } catch [DivideByZeroException] { Write-Host "除数为零异常" } catch [System.Net.WebException],[System.Exception] { Write-Host "其他异常" } finally { Write-Host "正在清理..." }
脚本块(Script Block)
定义脚本块
{ #code }
使用脚本块
&脚本块
实例:
定义和执行脚本块
$panda = { Get-ChildItem } &$panda
直接执行脚本块
&{ Get-ChildItem }
函数(Functions)
说明
Functions can be described as building blocks in PowerShell
Functions are often grouped together in modules
The functions within a module often share a common purpose or act on a single system
定义函数
格式
简单格式
function Get-Panda { }
带参数格式
function Get-Panda { param ( $Parameter1, $Parameter2 ) }
参数带类型格式
function Get-Panda { param ( [Version]$Parameter1, [int]$Parameter2 ) }
参数设置默认值
function Get-Panda { param ( [Version]$Parameter1, [int]$Parameter2 = 666 ) }
实例
定义简单函数
function Get-PandaWebSiteUrl{ return 'www.Panda666.com' }
定义带一个参数的函数
function Set-Version { param( [Version]$version ) $Script:Version = $version } Set-Version 0.2
函数指定参数类型
function Test-DateTime { param( [DateTime]$Date ) $Date } Test-DateTime -Date "11/10/2000"
可以Nullable的参数
function Test-Nullable { param ( [Nullable[DateTime]]$Date ) }
函数内定义函数
注意:这是非常不推荐的实践
function Outer { param ( $Parameter1 ) function Inner1 { } function Inner2 { } Write-Host 'Hello world' }
函数注释
说明
函数有一套特别的注释描述格式
叫做Microsoft Assistance Markup Language,是一种XML格式的描述语
支持的描述段包括:
.SYNOPSIS
.DESCRIPTION
.PARAMETER
.EXAMPLE
.INPUTS
.OUTPUTS
.NOTES
.LINK
注意:.SYNOPSIS 和 .DESCRIPTION是强制的,其他是可选的
实例
简单的函数注释
function Get-Something { <# .SYNOPSIS Briefly describes the main action performed by Get-Something .DESCRIPTION A detailed description of the activities of Get-Something. #> }
带参数描述的函数注释
function Get-Something { <# .SYNOPSIS Briefly describes the main action performed by Get-Something .DESCRIPTION A detailed description of the activities of Get-Something. .PARAMETER Parameter1 Describes the purpose of Parameter1. .PARAMETER Parameter2 Describes the purpose of Parameter2. #> param ( $Parameter1, $Parameter2 ) }
也可以将参数的描述放在参数前面
function Get-Something { <# .SYNOPSIS Briefly describes the main action performed by Get-Something .DESCRIPTION A detailed description of the activities of Get-Something. #> param ( # Describes the purpose of Parameter1. $Parameter1, # Describes the purpose of Parameter2. $Parameter2 ) }
使用帮助命令查看函数的参数信息
因为我们已经给函数进行了注释,所以可以使用帮助命令查看函数的帮助信息
Get-Help Get-Something -Parameter Parameter1
函数之内的代码块
函数最开始执行的代码块
使用begin块即可
function Show-Pipeline { begin { Write-Host 'Pipeline start' } }
函数执行的代码块
使用process块即可
function Show-Pipeline { begin { $position = $myinvocation.PipelinePosition Write-Host "Pipeline position ${position}: Start" } process { Write-Host "Pipeline position ${position}: $_" $_ } }
函数最后执行的代码块
使用End块即可
function Show-Pipeline { begin { $position = $myinvocation.PipelinePosition Write-Host "Pipeline position ${position}: Start" } process { Write-Host "Pipeline position ${position}: $_" $_ } end { Write-Host "Pipeline position ${position}: End" } }
变量共享
各个代码块之间的变量是互同的,即都在函数作用域之下
function Measure-Item { begin { $count = 0 $count | Write-Host } process { $count++ $count | Write-Host } end { $count $count | Write-Host } }
这篇关于PowerShell教程 - 编程结构(Program Struct)- 第四部分的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享
- 2024-11-22ansible 的archive 参数是什么意思?-icode9专业技术文章分享
- 2024-11-22ansible 中怎么只用archive 排除某个目录?-icode9专业技术文章分享
- 2024-11-22exclude_path参数是什么作用?-icode9专业技术文章分享
- 2024-11-22微信开放平台第三方平台什么时候调用数据预拉取和数据周期性更新接口?-icode9专业技术文章分享
- 2024-11-22uniapp 实现聊天消息会话的列表功能怎么实现?-icode9专业技术文章分享
- 2024-11-22在Mac系统上将图片中的文字提取出来有哪些方法?-icode9专业技术文章分享
- 2024-11-22excel 表格中怎么固定一行显示不滚动?-icode9专业技术文章分享
- 2024-11-22怎么将 -rwxr-xr-x 修改为 drwxr-xr-x?-icode9专业技术文章分享
- 2024-11-22在Excel中怎么将小数向上取整到最接近的整数?-icode9专业技术文章分享