powershell(1)-基础的学习:
Get-Host:获取当前powershell的版本信息
变量:
变量都是以$开头, 是强类型语言, 语言是大小写不敏感的
提一提变量保护与常量的声明:New-Variable num -Value 100 -Force -Option readonly
这样就得到一个受保护的变量$num
,如果要销毁它只能通过del $num
删除。如果要声明常量则用New-Variable num -Value 100 -Force -Option readonlyNew-Variable num -Value 100 -Force -Option constant
数组:
数组的创建:
数组的创建可以通过下面五种方式来创建,在适当的条件下选择适当的方式创建即可
$array = 1,2,3,4
$array = 1..4
$array=1,"2017",([System.Guid]::NewGuid()),(get-date)
$a=@() # 空数组
$a=,"1" # 一个元素的数组
数组的访问:
**数组的访问**
数组的访问和C类似,第一位元素实用下标0来访问即$array[0],我们来看看ipconfig获取到的数据
$ip = ipconfig
$ip[1] # 获取ipconfig第二行的数据
数组的判断
$a -is [array]
数组的追加:
$a += "5"
哈希表:
哈希表的创建:
$stu=@{Name="test";Age="12";sex="man"}
哈希表里存数组:
$stu=@{ Name = "hei";Age="12";sex="man";Books="kali","sqlmap","powershell" }
哈希表的插入与删除:
插入
$Student=@{}
$Student.Name="hahaha"
-----
删除:
$stu.Remove("Name")
对象:
在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)}
函数的定义:
function Invoke-PortScan {
<#
.SYNOPSIS
简介
.DESCRIPTION
描述
.PARAMETER StartAddress
参数
.PARAMETER EndAddress
参数
.EXAMPLE
PS > Invoke-PortScan -StartAddress 192.168.0.1 -EndAddress 192.168.0.254
用例
#>
code
}
异常处理:
Try{
$connection.open()
$success = $true
}Catch{
$success = $false
}
Powershell(2)-脚本执行基础的学习:
windows平台中常用到的几种脚本:
Bat:
这就是我们常用的Bat脚本,全名为批处理文件,脚本中就是我们在CMD中使用到的命令。
这里提一个小问题:CMD的命令行执行命令的优先级是.bat > .exe,那么假如我放一个cmd.bat在system32目录下,那么优先执行的是cmd.bat,这里面的内容就变得不可描述起来了
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
Powershell:
这就是我们的主角,在现在和未来一定是powershell占据主要地位(对于这一点搞Win多一点的朋友一定不会怀疑),首先我们来看一个简单的例子
script.ps1:
脚本内容
function test-conn {
Test-Connection -Count 2 -ComputerName $args
}
载入脚本文件:
.script.ps1
调用函数:
test-conn localhost
那么我们就知道了 -count 2 连接次数为2
然后后面的-computername www.baidu.com
为域名的参数
那么上面的代码就是单纯的把这个又封装了一次 …