PowerShell学习笔记四_函数、IO操作、字符操作、数组
使用静态方法
$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操作、字符操作、数组的更多相关文章
- openresty 学习笔记四:连接mysql和进行相关操作
openresty 学习笔记四:连接mysql和进行相关操作 毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库.比如首次查询数据在red ...
- C# LINQ学习笔记四:LINQ to OBJECT之操作文件目录
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5816051.html,记录一下学习过程以备后续查用. 许多文件系统操作实质上是查询,因此非常适合使用LINQ方 ...
- Python学习笔记(四)Python函数的参数
Python的函数除了正常使用的必选参数外,还可以使用默认参数.可变参数和关键字参数. 默认参数 基本使用 默认参数就是可以给特定的参数设置一个默认值,调用函数时,有默认值得参数可以不进行赋值,如: ...
- scala 学习笔记四 匿名函数
1.介绍 Scala 中定义匿名函数的语法很简单,箭头左边是参数列表,右边是函数体. 使用匿名函数后,我们的代码变得更简洁了. 下面的表达式就定义了一个接受一个Int类型输入参数的匿名函数: var ...
- Java IO学习笔记四:Socket基础
作者:Grey 原文地址:Java IO学习笔记四:Socket基础 准备两个Linux实例(安装好jdk1.8),我准备的两个实例的ip地址分别为: io1实例:192.168.205.138 io ...
- 零拷贝详解 Java NIO学习笔记四(零拷贝详解)
转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- javascript学习笔记(四) Number 数字类型
数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ...
- ES6学习笔记<四> default、rest、Multi-line Strings
default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...
- ES6学习笔记<三> 生成器函数与yield
为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...
随机推荐
- api规范PHP,RESTful API规范(详细版)
rest 是一种软件架构风格,如果你们的接口是 rest 接口,那么就可被认为你们的的接口是restful的,英文名词和形容词的区别. rest 接口是围绕"资源"展开的,利用HT ...
- 【Redis的三种数据删除策略】定时定期惰性,超出内存就自动清理
https://blog.csdn.net/DQWERww/article/details/126453008 https://blog.csdn.net/qq_38056518/article/de ...
- 01.JavaSE学习
一.java入门 java三大版本(write once,run anywhere) JavaSE:标准版(用于桌面开发,控制台开发) javaME:嵌入式开发(手机,小家电) javaEE:以jav ...
- KCL v0.4.5 发布 - 更好的编写便利性改进,稳定性,体验提升与多平台支持
简介 KCL 团队很高兴地宣布 KCL v0.4.5 版本现在已经可用!本次发布主要为 KCL 语言编写便利性和稳定性提升,错误信息改进以及更多平台包括 windows 版本支持以及更多下载方式支持. ...
- 安装torch_scatter,torch-sparse,torch-cluster,torch-spline-conv,torch-geometric
1. 查询torch版本号 进入https://pytorch-geometric.com/whl/ 找到对应的torch版本>>点击进入 2. 找到匹配的包 点击下载即可 3. 使用pi ...
- 清理Linux系统无效的或者损坏的包
参考:解决Linux的 [有1 个软件包没有被完全安装或卸载] 问题 ubuntu中卸载没有安装完全的软件包 Ubuntu安装.基本命令和常见故障处理 1. 1 apt-get insta ...
- gobuster安装
Github地址:https://github.com/OJ/gobuste 第一种方式 sudo apt install golang-gogo install github.com/OJ/gobu ...
- mac + win ,用python一行代码批量下载哔哩哔哩视频
首先,你的机器已经安装python,然后是安装you-get. 打开终端,输入 pip3 install you-get,回车,即开始安装,如下图所示. 编辑 安装成功后,比如要下载某个视屏,首 ...
- 081_Introducing trigger handler class
案例分析: 我们对一个Object写多个独立得Trigger. 但最终这不是最好的做法. 在Salesforce中,只为每个SObject设置一个触发器总是好的. 原因:每个独立触发器的执行顺序始终未 ...
- nginx的优化及防盗链
简介: Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为"engine X",是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/S ...