基本


  1. 注释

    • 单行注释:#

    • 多行注释:<# #>

      #this is single-line comment
      <#
      this is
      multiple-line
      comment
      #>
      
  2. 帮助命令:get-help [param]

    • param 可选,为具体的powershell命令

      #e.g.
      get-help dir
      
  3. 分号:每条语句可以使用一个分号结束,当然也可以不写。如果一行中存在多条语句,那就在每一句后加个分号用以分隔。

  4. 代码块:和C语系的大多数语言类似,PowerShell是一种块结构的语言,这些块用 {} 来界定。

  5. 缩进:powershell中的缩进不是强制的。

  6. 大小写:powershell不区分大小写。

  7. 脚本:powershell像python一样,可以交互式编程,也可以编写脚本运行,powershell的脚本扩展名为.ps1,注意是数字1不是字母l,运行脚本时只需要在终端键入./NAME.ps1即可,注意这里的./是必须的,当然也可以键入绝对路径

  8. 脚本执行策略:系统默认禁止运行脚本,故直接运行powershell脚本会报错,需要更改执行策略,脚本执行策略如下

    策略 解释
    unrestricted 最高权限,可以不受限制执行任何脚本
    default 为powershell默认的策略,即restricted
    restricted 不允许任何脚本执行
    allsigned 所有脚本都必须经过签名才能运行
    remotesigned 本地脚本无限制,但是对来自网络的脚本必须经过签名
    1. 管理员身份打开powershell
    2. 键入get-executionpolicy查看当前执行策略,默认为restricted
    3. 键入set-executionpolicy remotesigned更改执行策略
    4. 确认更改执行策略,然后即可以运行脚本
  9. 重定向:可以使用重定向来输出同时创建脚本

    #将hello powershell!输出到info.ps1中,没有则创建文件
    echo "hello powershell!" > info.ps1
    
  10. Here-String:Here-String以 @' 开头,以 '@ 结束,类似于python中的"""''',powershell中可以结合重定向将其中的内容输出到脚本中

数据类型及操作


  1. 变量

    1. $变量名=初值 的方法定义变量
    2. 解释器会根据所赋的初值判断变量类型
    3. 在声明后使用变量的过程中有时也需要加上$
    4. 对于包含特殊字符的变量可以将变量名本身用{}括起来
    5. 不能定义和保留变量名称相同的变量,可以通过ls variable:查看保留变量
    6. 可以通过$NAME.gettype()查看变量NAME的类型等信息
    7. 可以通过del variable:NAME删除变量NAME,这里不用加上$
    $info = "hello powershell!"
    ${mother's day} = 5.23
    
  2. 转义字符:powershell的转义字符是 ` 而不是 \(英文输入模式下tab上面那个键)

  3. 动态类型:powershell的变量是动态类型的,同python,即初始化后的变量可以通过之后的赋值而改变其类型

  4. 数值转换:powershell从浮点类型向整数转换时,默认四舍五入

    • [math]::floor()用于向下取整,即直接截断浮点数,但不改变类型
    • [convert]::toint32()用于改变类型为int32
    • 可以结合上面二者实现c和Java中的int()强制类型转换
    • [convert]::todouble(),[convert]::tosingle(),[convert]::toboolean,[convert]::tostring
  5. 运算符:

    • +-*/% 加减乘除取余
    • ++-- 自增自减(同c支持前置后置)
    • -and-or-not 逻辑与或非
    • -eq-ne-ge-le-gt-lt 等于、不等于、大于等于、小于等于、大于、小于
    • -is 判断变量是否为兼容类型
    #基本运算
    $a + $b
    $a - $b
    $a * $b
    $a / $b
    $a % $b
    #自增自减
    ++$a
    $a++
    --$a
    $a--
    #逻辑运算符、比较运算符
    $a -gt $b -and $b -ge $c # <==> a>b && b >= c
    #类型判断
    $a -is [double]
    -not $b -is [int]
    
  6. 数组

    • 定义
    #空数组
    $a = @()
    #单元素数组
    $ar = ,1
    #一般定义
    $arr = 1,2,3,4,5
    $arrr = 1..10
    $arrrr = 10..0
    
    • 遍历:直接输出,循环遍历
    $arr = 1..5 # <==> $arr = 1,2,3,4,5
    #直接输出
    echo $arr
    #for循环遍历
    for ($i = 0; $i -lt 5; $i++){echo $arr[$i] # 数组支持取下标运算
    }
    #foreach循环遍历
    foreach ($i in $arr){echo $i
    }
    
    • 元素访问
    $arr = 5..0
    #下标访问
    $arr[2]
    #多元素访问
    $arr[0,2,4]
    $arr[0..3] # 类似python切片
    
    • 元素新增
    $arr = 1,2,3,4,5
    $arr += 6 # 6将新增至末尾
    
    • 元素删除
    $arr = 1,2,3,4,5
    $arr = $arr[0..2]+$arr[4]
    

流程控制


  1. if判断:同cpp类似,e.g.

    $a = 3.14
    if ($a -lt 3){echo "hello"
    }
    elseif ($a -gt 3){echo "world"
    }
    else {echo "other!"
    }
    
  2. switch分支:无需case,无需break,e.g.

    $info = "this"
    switch($info){"that" {echo "that"echo "there"}"this" {echo "this"echo "there"}
    }
    

    可支持条件语句,执行所有语句值为true的内容,如下将同时满足第二和第三分支,这在cpp中是不被允许的

    $num = 5.56
    switch($num){{$num -lt 5}{write-output "num<5" # write-output同echo}{$num -ge 5}{write-output "num>=5"}5.56{write-output "num=5.56"}
    }
    
  3. for循环:同cpp

    for ($i = 1; $i -lt 10; $i++){echo $i
    }
    
  4. foreach循环:同python

    $arr = 'a','b','c','d' # arr为数组
    foreach ($each in $arr){echo $each
    }
    
  5. while循环:同cpp

    $n = 1
    while ($n -lt 10){echo $n$n++
    }
    
  6. do-while循环:同cpp

    $n = 1
    do {echo $n$n++
    }while($n -lt 10)
    
  7. 循环控制:同cpp,continuebreak

函数


  1. 函数定义

    function fun(a,b,c){<#statement#>
    }#e.g.
    function times($a){return $a*5
    }
    
  2. 函数调用

    # powershell中的函数存在以下两种调用方式
    times(5)
    times 5
    # 同理,内置函数也可write-output("hello")
    write-output hello
    # 当函数调用没有参数时,不要采用第一种方式,即不要给出括号
    fun() # ×
    fun   # √
    # 对于类方法而言,则正好相反
    $info = "this is info."
    $info.gettype() # √,返回变量类型信息
    $info.gettype   # ×,返回gettype方法定义信息
    
  3. 形参默认值

    # powershell支持形参默认值
    function fun($b = 5){return $b
    }
    # 有参调用fun(55) # 返回55
    # 无参调用
    fun # 返回5
    
  4. 多个参数调用

    # powershell的多参数传递
    function f($a, $b){return $b
    }
    # 此时两种调用方式结果不同
    f(1,2) # 1,2将被作为数组传给$a,$b将不会得到值
    f 1 2  # 1将传给$a,2将传给$b
    # 第一种方式以下写法可以达到目的,形式上类似函数柯里化
    f(1)(2) # 1将传给$a,2将传给$b
    # 同理,以下两种调用等价,1,2作为数组传给$a,3,4作为数组传给$b
    f(1,2)(3,4)
    f 1,2 3,4
    # 多余的参数将被忽略,如下1传给$a,2传给$b,3将被忽略
    f(1)(2)(3)
    f 1 2 3 # 附例
    function add($a, $b){return $a + $b
    }
    # 考虑以下各种调用函数的返回值
    add(1,2)     # 返回数组1,2,$a == 1,2,$b没有值
    add(1)(2)    # 返回3,$a == 1, $b == 2
    add 1 2      # 同上
    add(1)(2)(3) # 返回3,$a == 1, $b == 2, 3被忽略
    add 1 2 3    # 同上
    add(1,2)(3)  # 返回数组1,2,3,$a == 1,2,$b == 3,$b被视为数组,$a+$b为数组拼接
    add 1,2 3    # 同上
    
  5. powershell函数不支持定义重载,函数会以最后一次定义执行,但类方法可以定义重载,且类方法不需要function关键字声明。


  1. 作为面向对象的编程语言,类是不可或缺的,powershell的类定义方式如下

    class person{# 类成员$name = "zhang";$sex = "male";$country = "China";# 类方法info(){[console]::write("my name is " + $this.name + ", I come from " + $this.country);}
    }
    # 类实例化
    $pers = new-object person
    # 调用类方法
    $pers.info() # 将输出:my name is zhang, I come from China.
    
  2. 构造函数与实例化,同cpp,构造函数与类同名

    class person{$name = "zhang";$sex = "male";$country = "China";person(){} # 未声明构造函数时会隐式声明该无参构造函数person($name, $sex, $country){ # 自定义构造函数$this.name = $name;$this.sex = $sex;$this.country = $country;}
    }
    # 类实例化方式有两种
    # 1. new-object
    $pers1 = new-object person # 需要有无参构造函数可供调用,实例化后手动赋值
    $pers1.name = "a"
    $pers1.sex = "male"
    $pers1.country = "China"
    # 2. [CLASSNAME]::new()
    $pers2 = [person]::new("wang","male","Russia") # 实例化同时赋值
    
  3. 继承

    class person{ # 父类$name;$sex;$country;info(){[console]::write("my name is " + $this.name + ", I come from " + $this.country);}
    }
    class student : person{ # 子类,包含父类成员和方法$school;info(){ # 方法覆写[console]::write("my name is " + $this.name + ", I come from " + $this.country + ", I study in " + $this.school);}
    }
    

powershell编程相关推荐

  1. powershell编程_对Power BI PowerShell Commandlet的编程访问

    powershell编程 In this article, I am going to demonstrate how to access the Power BI PowerShell comman ...

  2. powershell 编程_如何使用PowerShell以编程方式更改Visual Studio中的默认浏览器,并可能使自己陷入困境...

    powershell 编程 UPDATE: Why my own MacGyver solution was brilliant in its horrible way, the folks over ...

  3. 【运维】PowerShell编程 目录文件相关方法的封装与案例详解

    PowerShell 目录文件管理 目录文件相关方法的封装与案例详解 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?type=blog 邮箱 :291 ...

  4. Powershell快速入门(二) Shell编程

    这一部分着重于介绍Powershell的程序知识,让我们能够编写功能强大的Powershell脚本,执行比较复杂的任务. 变量 变量使用$变量名创建和引用.举个例子,Get-Location命令用于获 ...

  5. PowerShell在SharePoint 2010自动化部署中的应用(1)--代码获取

    由于项目需要,要把项目组成员中每天的工作整合到一起.每天手动部署很是费时费力.于是有了是否能利用PowerShell进行自动化部署的想法,正好也有机会学习一下PowerShell. 先交代一下项目背景 ...

  6. Windows PowerShell简介

    什么是PowerShell? 它全名是Windows Power Shell,由微软公司开发. 首先说一下".NET":.NET Core是由微软开发,目前在.NET 基金会下进行 ...

  7. Windows PowerShell ISE

    导语:对于电脑高手来说,华丽的图形界面往往并不实用,快捷的键盘命令才是王道.Win7集成的PowerShell2.0,更是其中的王中王,让你直接掌控你的电脑命脉. Win7中集成了PowerShell ...

  8. Win7系统新的命令行PowerShell揭秘

    原文地址:http://www.xpgod.com/article/659.html 导语:对于电脑高手来说,华丽的图形界面往往并不实用,快捷的键盘命令才是王道.Win7集成的PowerShell2. ...

  9. windows 网管总结

    常用指令 shutdown -s -t 3600 # 一小时后自动关机 shutdown -a 取消关机 route add 10.1.10.0 mask 255.255.255.0 10.75.12 ...

最新文章

  1. 微软云服务器多ip,Azure 虚拟机的多个 IP 地址 - 门户 | Microsoft Docs
  2. 关于《Android应用开发揭秘》中早期版本中联系人例子错误的解决办法
  3. Spring MVC中使用Swagger生成API文档和完整项目示例Demo,swagger-server-api(二十)
  4. matlab获取标量
  5. get_called_class与get_class
  6. LSI最长递增子序列(DP问题)
  7. ansible基本模块-shell
  8. 30分钟快速上手Docker,看这篇就对了!
  9. 使用CompletableFuture实现业务服务的异步调用实战代码
  10. 那些开源程序中让人叹为观止的代码 - 1 浏览器特性判断
  11. Python3.7下载与安装pygame
  12. K均值算法(K-means)聚类
  13. 如何把Excel中表格复制粘贴到PPT中,并更改表格边框颜色
  14. tas5717php手册,TAS5715 具有扬声器均衡、双频带 DRC 和 DC 保护的 25W 立体声 I2S 音频放大器...
  15. chkdsk 停滞_职业停滞–早期发现和治疗
  16. java文件读取报(文件名、目录名或卷标语法不正确。)
  17. 微机原理与接口技术总结
  18. 机器学习--最大熵模型
  19. python+OpenCV视频检测+代码以及注解
  20. mvc mysql连接字符串_mvc与sql连接数据库

热门文章

  1. 读取layout属性-AttributeSet TypedArray
  2. Linux学习笔记:Linux常用命令总结
  3. 朱申 武汉大学计算机学院,朱申红个人简介
  4. 基于Javaee的新生报到系统管理的设计与实现
  5. 问了ChatGPT几个硬件问题
  6. Qt的alignment、margin属性
  7. maxthon 2 ua
  8. 桌面文件删除后没有在回收站原因和恢复方法
  9. Python撩妹,安慰刚刚失恋的朋友,我的机会来了
  10. 树言树语:360、金山、可牛 看清楚后面的敌人