00 Powershell 基本语法知识

您所在的位置:网站首页 add表示什么 00 Powershell 基本语法知识

00 Powershell 基本语法知识

2023-06-10 00:18| 来源: 网络整理| 查看: 265

一、逻辑语法:

1、值大小比较:i代表大小写不敏感,c代表大小写敏感;默认不敏感

1)语法:

-[i|c]eq 等于(equal to) -[i|c]ne 不等于(not equal to) -[i|c]gt 大于(greater than) -[i|c]ge 大于等于(greater than or equal to) -[i|c]lt 小于(less than) -[i|c]le 小于等于(less than or equal to)

2)实例:

"aaa" -eq "AAA" => True "aaa" -eq "AAA" => False

2、数组元素比较:-contains和-notcontains两个运算符用于判断数组中是否包含某个元素

1)语法:

-contains 包含 -notcontains 不包含

2)实例:

$system = @('1001','0201','0011','6001') $system -contains 6001 => True $system -notcontains 6001 => False

3、字符串匹配比较:-like和-notlike跟SQL里面的LIKE差不多,使用通配符*用于匹配所有字符。-match和-notmatch则使用正则表达式进行字符串匹配。

1)语法:

-like 相似 -notlike 不相似 -match 匹配 -notmatch 不匹配

2)实例:

"HelloWorld!" -like "*llo*" => True function GetProductVersionFromRdc{ param([string]$app) $result = Invoke-WebRequest -uri "http://rdc.mingyuanyun.com/rdc-service/api/v2/apps/$($app)/versions/maxpackversion" -UseBasicParsing #正则匹配规则 $parttern="\d{0,3}\.\d{0,3}\.\d{0,3}\.\d{0,3}" #匹配结果 $Status = "$result.Content" -match $parttern #版本号 $RdcVersion = $matches[0] return $RdcVersion }

4、类型比较:是-is和-isnot

1)语法:

-is -isnot

2)实例:

"Sucess" -is [int] => False "Sucess" -isnot [int] => True

5、逻辑运算:分别是-not(非,也可以用!代替)、-and(与)、-or(或)和-xor(异或)

1)语法:

-not -and -or -xor

2)实例:

if("$code" -ne "" -and "$code" -ne "二级模块编码"){ Write-Host $FunCodeList.Add($code); } if("$($app)" -eq "platform" -or "$($app)" -eq "xmk" )

二、循环和条件判断

1、循环:for、foreach、while......

1)语法和实例:

$ListDir = Get-ChildItem .\ foreach($item in $ListDir){ echo "**********************$item*******************************" $zipPath = "$ENV:PackagePath\$item" cd $zipPath\src echo "::::::: 清理 $ENV:PackagePath\$item\src 下压缩包" Remove-Item $ENV:PackagePath\$item\src\*.zip -Recurse } for($i=1;$i -lt 4;$i++){ for($j=5;$j -lt 9;$j++){ $data = $WorkSheet.Cells.Item($i,$j).Value(); if($data -eq "二级模块编码"){ $lineNo = $j; $RowNo = $i; } }

2、条件判断:if、if...else、switch

1)语法和实例:

function ScanModuleNum{ param([string]$ExcelPath,[string]$App) try{ #扫描得到模块编码开始的行号和二级模块编码所在的列号 $excel = New-Object -ComObject Excel.Application $workbook=$excel.Workbooks.open($($ExcelPath)) switch($($App)){ "0000" {$WorkSheet = $workbook.Sheets.Item("系统管理")} "0011" {$WorkSheet = $workbook.Sheets.Item("售楼系统分组信息")} "0201" {$WorkSheet = $workbook.Sheets.Item("成本系统分组信息")} "0202" {$WorkSheet = $workbook.Sheets.Item("计划系统分组信息")} "0220" {$WorkSheet = $workbook.Sheets.Item("采招系统分组信息")} "0222" {$WorkSheet = $workbook.Sheets.Item("在线投标系统分组信息")} "0301" {$WorkSheet = $workbook.Sheets.Item("项目库&主数据")} "0801" {$WorkSheet = $workbook.Sheets.Item("投资收益分组信息")} "1001" {$WorkSheet = $workbook.Sheets.Item("工作流管理")} "1206" {$WorkSheet = $workbook.Sheets.Item("费用系统分组信息")} "6001" {$WorkSheet = $workbook.Sheets.Item("投前测算分组信息")} } if($DbCodeCj -eq $ExCode.Trim("'").Trim("/")){ break; }elseif($j -eq $ExFunCodeList.Length - 1){ Write-Host $DbCodeCj "模块在Excel中没有找到!" }elseif($i -eq $DbListFun2.Length - 1 -and $j -eq $ExFunCodeList.Length - 1){ Write-Host $App"扫描完成!" }

三、函数

1、函数定义:

1)语法:

function 函数名([类型]参数1,[类型]参数2.....){ 函数体; }

2)实例:

function ScanModuleNum{ param([string]$ExcelPath,[string]$App) try{ #扫描得到模块编码开始的行号和二级模块编码所在的列号 $excel = New-Object -ComObject Excel.Application $workbook=$excel.Workbooks.open($($ExcelPath)) switch($($App)){ "0000" {$WorkSheet = $workbook.Sheets.Item("系统管理")} "0011" {$WorkSheet = $workbook.Sheets.Item("售楼系统分组信息")} "0201" {$WorkSheet = $workbook.Sheets.Item("成本系统分组信息")} "0202" {$WorkSheet = $workbook.Sheets.Item("计划系统分组信息")} "0220" {$WorkSheet = $workbook.Sheets.Item("采招系统分组信息")} "0222" {$WorkSheet = $workbook.Sheets.Item("在线投标系统分组信息")} "0301" {$WorkSheet = $workbook.Sheets.Item("项目库&主数据")} "0801" {$WorkSheet = $workbook.Sheets.Item("投资收益分组信息")} "1001" {$WorkSheet = $workbook.Sheets.Item("工作流管理")} "1206" {$WorkSheet = $workbook.Sheets.Item("费用系统分组信息")} "6001" {$WorkSheet = $workbook.Sheets.Item("投前测算分组信息")} }

2、函数调用和传参:

#拉取完整包 function GetPackageALL{ param([string]$app,[string]$appVersion) echo "===================拉取完整包-按版本号=========================" #拼接下载URL $downloadUrl = "http://pkg.mingyuanyun.com/packages/$($app)/full/$($appVersion)/$($appVersion).zip" $zipPath = "$ENV:WORKSPACE\VersionZip\$($app)_$($appVersion).zip" 。。。。。。 } #调用函数 function DownloadAppZip{ param( [string]$app,[string]$appVersion,[string]$path) Write-Host "**************************** 构建 $($app) 版本 $($appVersion) ****************************" if($($appVersion) -eq ""){ #调用获取RDC最新版本号 $NewVersion = GetProductVersionFromRdc -app $($app) #调用获取全包 GetPackageALL -app "$($app)" -appVersion $NewVersion }else{ #调用获取全包 GetPackageALL -app "$($app)" -appVersion $($appVersion) }

3、返回值:

#返回值; return $ExFunCodeList; return a,b; #接收函数返回值; $ExFunCodeList = ScanModuleNum -ExcelPath $ExcelPath -App $App;

四、文件调用:

1、可执行文件调用:可执行文件前用&;

echo "************************ 元数据同步 *************************************" $MetaDataCmd="D:\JenkinsWS\Tools\console\console\DbSync.Console.exe" #定义变量,元数据同步工具的地址 &"$MetaDataCmd" "$ENV:PackagePath\MDM\src" "$ENV:sqlCmdMDM"

2、Core.dll调用:

1)语法:dotnet dllname;前提需要安装 .net core 的 sdk;https://download.visualstudio.microsoft.com/download/pr/046165a4-10d4-4156-8e65-1d7b2cbd304e/a4c7b01f6bf7199669a45ab6a03803ac/dotnet-sdk-3.1.412-win-x64.exe

2)实例:

echo "********************* Start:刷数据库Myapplication ******************************* " echo ">>>> 刷数据库" $RefreshMyApplicationCmd = "D:\JenkinsWS\Tools\RefreshMyApplicationWithMyFunction" $MetaDataPath = "$ENV:PackagePath\ERP\src" cd $RefreshMyApplicationCmd dotnet RefreshMyApplicationWithMyFunction.dll $MetaDataPath $ENV:sqlCmdALL echo "********************* End:刷数据库Myapplication******************************* "

五、管道

1、什么是管道:每个命令的末尾可以使用新的命令对上个命令的结果做进一步处理;一个命令的输出作为下一个命令的输入;

2、语法:命令A | 命令B;

3、实例:

#Excel中模块数量去掉重复 $ExFunCodeListUnique = $ExFunCodeList | sort -Unique; #数组中去重; [Xml]$XmlContent = Get-Content "$ENV:sitePathSL\MysoftVersion.config" $xml = $XmlContent.MysoftVersion.Products.Product | Where-Object {$_.ProductKey -eq "$($app)"}

4、常用的对管道结果进一步处理的命令:

ForEach-Object: 针对每一组输入对象执行操作。 Format-List: 将输出的格式设置为属性列表,其中每个属性均各占一行显示。 Format-Table: 将输出的格式设置为表。 Format-Wide: 将对象的格式设置为只能显示每个对象的一个属性的宽表。 Get-Unique: 从排序列表返回唯一项目。 Group-Object: 指定的属性包含相同值的组对象。 Import-Clixml: 导入 CLIXML 文件,并在 Windows PowerShell 中创建相应的对象。 Measure-Object: 计算对象的数字属性以及字符串对象(如文本文件)中的字符数、单词数和行数。 more: 对结果分屏显示。 Out-File: 将输出发送到文件。 Out-Null: 删除输出,不将其发送到控制台。 Out-Printer: 将输出发送到打印机。 Out-String: 将对象作为一列字符串发送到主机。 Select-Object: 选择一个对象或一组对象的指定属性。它还可以从对象的数组中选择唯一对象,也可以从对象数组的开头或末尾选 择指定个数的对象。 Sort-Object: 按属性值对象进行排序。 Tee-Object: 将命令输出保存在文件或变量中,并将其显示在控制台中。 Where-Object: 创建控制哪些对象沿着命令管道传递的筛选器。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3