使用静态方法

$now = [DateTime]::Now

实例化

$var=New-Object System.DateTime(1991,12,14)
#实例化不需要[]

函数定义

Function Hi([string] $name){ 
  Write-Host "Hi $name"
}

调用:

Hi("lucy")

或者
Hi lucy

或者

Hi -name lucy

语句块

begin{} end{}都只做一次,而process{},管道传入了多少个对象,就做多少次

而非管道传入的,process{}只干一次

CmdletBinding、parmeter

Function  FindComputer(){

  #这个类似于C#的Atrribute
  [CmdletBinding(

    ConfirmImpace = [System.Management.Automation.ConfirmImpact]::High #如果设置为High,那么执行这个函数前,有用户提示,是否要执行。如果调用它的函数,低于或等于它,也会发出警告

    DefaultParameterSetName=”ByComputerIds“#默认的参数集,相当于方法重载,在敲命令的时候,默认是用那种重载

    HelpURI=

    SupportsPaging=

    )]   #CmdletBinding 是用来控制命令的行为的

  Param   #Param这个是必须写的,即使为空,如果不写,那么写[CmdletBinding]就会报错

  (

     [parmeter(

      Mandatory = $true #参数是否是必须的

      ValueFromPipleline= $true #是否接受管道输入 ,那么就可以Get-Service Mysql | Hi 这样子

      HelpMessage = "需要输入电脑名称"

               )]   #parmeter是用来限制,或者检查输入的参数的

   $ComputerNames , #这个位置写了就不能在方法名后边写了

  )

  begin {  

       }

  process{

    #会对传入的参数进行遍历,当参数没有指定类型时,语句“ 1,2,3|FindComputer” ,只能在这里获取到1、2、3,否则在其他地方就是“1,2,3”连在一起

  }

  end{

    #可以使用$PsCmdlet.WriteObject()返回值

  }

}

[parmeter(ParmeterSetName="...",Position="...")]

假如同时有:

param(

  [parmeter(Mandatory=$true,ParmeterSetName="ByComputerNames")] 
  $ComputerNames 

  [parmeter(Mandatory=$true,ParmeterSetName="ByComputerIds",Position=1,

  VaildateCount(1,5)# 限制参数个数至少1,最多5个。如果类型是string,就限制字符串长度。GetComputer -ByComputerIds 1,2,3,4,5

  VaildatePattern("正则表达式")

  )]

  $ComputerIds 

  [parmeter(Mandatory=$true,ParmeterSetName="ByComputerIds",Position=2)]

  [Alias("CA")] #使用的时候就可以GetComputer -CA "cmpname"

  $ComputerAlias 

  [VaildateSet("VM","RM")] #参数值只能为”VM“或者”RM“

  $ComputerType

  [Parmeter( ValidateScript( $_ = get-date))] #使用脚本,为CreateDate赋默认值

  $CreateDate

)

#提示:使用$PSCmdlet.ParmeterSetName来查看,当前是用了哪个参数集。

当写了不同的ParmeterSetName(参数集),也就意味着,方法Process体要为两个不同的参数集做不同的逻辑(相当于方法重载,全部写到一个方法体内)

if($PSCmdlet.ParmeterSetName -eq "ByComputerNames" ) {  #... }

#使用 get-help Get-Service -Full 也能获取整个方法的参数集介绍

注意:

1. 必须写Position,Position说明了默认的参数集,就是使用ByComputerIds,也就是当FindComputer xxxx,相当于调用FindComputer -ComputerIds xxxxx

2. 当两个[parmeter],都设置了Position=1是,默认的是哪个?

使用的是[CmdletBinding(DefaultParameterSetName=...)]指定的那个

3. 当两个参数,使用相同的参数集,如上:$ComputerIds、$ComputerAlias时,调用FindComputer "12345" "cp1",等价于FindComputer  -ComputerIds "12345"  - ComputerAlias "cp1"

[CmdletBinding(SupportsShouldProcess=$true)]

如果使用了这个,就可以在

process

{

  if($PSCmdlet.ShouldProcess($ComputerId,"执行XXX" ))#此处会弹出确认框提示:正在ComputerId上执行xxx,是否继续?

  {

    

  }

}

文件操作

$fs = New-Object System.IO.FileStream("C:\Users\pyl\1.TXT",[System.IO.FileMode]::Create,[System.IO.FileAccess]::Write)
$fs.Write([System.Text.UTF8Encoding]::UTF8.GetBytes("aaa"),0,3)
$fs.Close()

和C#一模一样

注意:只能保存到当前工作目录下,如果要保存到其他目录,需要先cd到其他目录

删除文件 

Remove-Item C:\D\GCJP006

获取文件信息

$fileinfo = Get-Item .\aa.csv

$fileinfo的类型是FileInfo,这点和C#一样

解析: “.\” 是指当前工作目录下的位置,“..\”是当前工作目录的上一个位置,多一个".",就上多一层。

自定义对象

$data = @{

  name = "tom"

  age =18

}

#注意,是要用回车,不能用“,”分隔

保存对象

如果是自定义对象,使用JSON

$data| ConvertTo-JSON | Out-File   .\ bb.json

注意:Out-File 是以覆盖,或则新建的方式

如果是管道接受的对象,使用CSV

Get-Service mysql| Export-Csv -Path .\aa.csv

Get-Service mysql| ConvertTo-Csv | Out-File "dd.csv"

读取对象

Json

$dt = Get-Content .\bb.json | ConvertFrom-Json

csv

Get-Content .\aa.csv | ConvertFrom-Csv

字符操作

1. 像C#一样多行字符串   var str = @"

  ";

在PowserShell中,使用

$str = '

' #用单引号

2. 转义字符,使用"`n",表示换行

3.

数组

1. [int[]] $id=@() ,追加元素 $id +=1

2.  $List =  New-Object  System.Collections.ArrayList,追加元素

3.

$lenght= $lines.Length
$List = [System.Int32[] ]::new($lenght)  #注意,不能 ::new($lines.Length )
$List.Length

C#模板

4.$List  = [System.Collections.Generic.List[PYLMath.Coordinate]]::new(100);

PowerShell学习笔记四_函数、IO操作、字符操作、数组的更多相关文章

  1. openresty 学习笔记四:连接mysql和进行相关操作

    openresty 学习笔记四:连接mysql和进行相关操作 毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库.比如首次查询数据在red ...

  2. C# LINQ学习笔记四:LINQ to OBJECT之操作文件目录

    本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5816051.html,记录一下学习过程以备后续查用. 许多文件系统操作实质上是查询,因此非常适合使用LINQ方 ...

  3. Python学习笔记(四)Python函数的参数

    Python的函数除了正常使用的必选参数外,还可以使用默认参数.可变参数和关键字参数. 默认参数 基本使用 默认参数就是可以给特定的参数设置一个默认值,调用函数时,有默认值得参数可以不进行赋值,如: ...

  4. scala 学习笔记四 匿名函数

    1.介绍 Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体. 使用匿名函数后,我们的代码变得更简洁了. 下面的表达式就定义了一个接受一个Int类型输入参数的匿名函数: var ...

  5. Java IO学习笔记四:Socket基础

    作者:Grey 原文地址:Java IO学习笔记四:Socket基础 准备两个Linux实例(安装好jdk1.8),我准备的两个实例的ip地址分别为: io1实例:192.168.205.138 io ...

  6. 零拷贝详解 Java NIO学习笔记四(零拷贝详解)

    转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...

  7. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

  8. javascript学习笔记(四) Number 数字类型

    数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数  toExponential() 方法 用科学 ...

  9. ES6学习笔记<四> default、rest、Multi-line Strings

    default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...

  10. ES6学习笔记<三> 生成器函数与yield

    为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...

随机推荐

  1. 通过Sql Server 作业实现定时任务

    最近需要一个业务需求.一条数据的状态在指定时间更改状态并且要在另一张表中添加条数据.要实现这个需求有两种方式:一种方式是使用Windows服务来实现,另一种是通过Sql Server作业的方式来实现. ...

  2. python + pyqt 实现的你下载css背景图片的小工具(最终版)

    学习python有三个星期了,算是做的第一个小工具,其实也没必要做成图形界面,只是为的GUI学习(再说技术总归给人使用的,熟练很多shell命令只是个"匠人".) win8下面: ...

  3. 最全面 think php 实现微信公众号回复编号进行投票,自定义菜单功能

    前期准备工作 https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_standard_messag ...

  4. codeforce C. Maximal Intersection

    http://codeforces.com/contest/1029/problem/C 从第一天吃晚饭做到第二天吃完饭--你无法想象我的代码曾经150行 o( ̄┰ ̄*)ゞ 找到所有线段最远的左边和最 ...

  5. CentOS Linux release 7.6 zabbix5.0 安装

    # zabbix 安装关方文档 https://www.zabbix.com/cn/download?zabbix=5.0&os_distribution=centos&os_vers ...

  6. maven-阿里云镜像

    <mirror>     <id>nexus-aliyun</id>     <mirrorOf>*,!jeecg,!jeecg-snapshots&l ...

  7. [iOS] iPhone,开发工具的一些杂项

    1.在safari的开发菜单里一直不显示我当前的iPhone,后来机缘巧合在 设置- 开发者 - Clear Trusted Computers ,重新信任电脑之后,就OK了(️)

  8. tesseract-ocr 安装、语言库、使用 随记

    前几日才听说ocr的图片识别功能.觉得很有意思.先体验一下. 地址: GitHub - tesseract-ocr/tesseract: Tesseract Open Source OCR Engin ...

  9. 使用win10 wsl中的Debian编译lean 的 lede

    安装Debian发行版 启用windows 适用于linux 的 windows子系统 安装Debian 参考p3terx的文章把debian装到非系统盘上: https://p3terx.com/a ...

  10. Windows Terminal 中 WSL2 默认打开路径

    打开Windows Terminal.鼠标点击进入设置,或者同时按ctrl和逗号.找到如下内容: { "guid": "{07b52e3e-de2c-5db4-bd2d- ...