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)
[email protected]()  # 空数组
$a=,"1" # 一个元素的数组

数组的访问:a[4]

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

$ip = ipconfig
$ip[1] # 获取ipconfig第二行的数据

数组的判断:

$ip -is [array]

数组的追加:

$a += "6"

2.3 哈希表

哈希表的创建:

[email protected]{Name="test";Age="12";sex="man"}

哈希表里存数组:

[email protected]{ 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 参考链接

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

原文地址:https://www.cnblogs.com/-mo-/p/12017503.html

时间: 2024-10-04 08:16:59

Powershell学习的相关文章

PowerShell 学习笔记5

可重用的远程管理会话: TCP Joke: ICM进行的会话在结束之后,会话在目标计算机上进行的会话就全部销毁了. 建立Session与查看Session $Session = New-PSSession –computerName dc Get-PSSession icm –session $sessions {$var =2} 这个$Session可以被重用(Powershell V3) 测试脚本执行时间: Measure-Command { scriptblock} 重用Session的脚

PowerShell 学习笔记——PS On MacOS

? PowerShell 学习笔记--PS On MacOS ? I remember that there is a command line tool on Mac OS X using for connecting to Microsoft Azure.  But now, Microsoft is developing MacOS version PowerShell – PowerShell for MacOS v6.0 alpha.  Let's see it. 1. Downloa

powershell学习:初识

最近在学习powershell,把一些常用的命令记录下来,一方面给自己做个总结,一方面也给在学习的同学做个产考(水平有限,大家看看就好) Get-service              #查看当前服务 Get-help get-service                  #查看get-service 帮助信息 Get-Help Get-Service -Examples             #查看get-service的示例参考 Get-Help Get-Service –full 

powershell 学习------hpyer-v 虚拟机优化(备份,压缩磁盘)

学习了Robin的博文,原地址  下面是自己的总结 自动化管理越来越普遍,Hyper-v 虚拟机也同样可以. 前提:  系统server 2008以上,powershell 3.0, 导入hyper-v库 1.虚拟机自动备份 Set-ExecutionPolicy unrestricted    #信任脚本 Import-Module D:\HyperV\HyperV\HyperV.psd1  #每次执行都要到导入库  $BackupDriver = "E:"           #备

PowerShell学习的一小步,工作的一大步

现在标题不起的应景,基本就没有访客和流量了.本文首发盆盆的公众号,可以转载,但需要注明出处和作者九叔 本文提到了盆盆的公众号,因为源代码也在那里发布. 本文不装逼,只讲干货.希望作为系统工程师或者ITPro的你,加入到学习PowerShell的行列当中. 我们通过PowerShell来做一个小程序.实现什么功能呢?我们用它来查看Windows的计划任务.完成计划任务的一些常见运维操作. 首先我们看看操作界面,如果对这个界面都不满意,那基本就不要往下看了.PowerShell做出来的图形化程序,标

PowerShell 学习笔记——运行命令

谈到"Shell",很容易与脚本.编程语言等联系起来,这也是很多ITPro不去钻研PowerShell的原因.很多ITPro们认为用好PowerShell就要涉及到复杂的函数.变量.脚本,这或许是一种误解.其实,PowerShell设计的初衷是作为一个高级管理工具,提供给系统管理员使用的.因此,运行命令以达到管理系统的目的,是我们学习PowerShell的开端. 一.什么是Cmdlet Cmdlet 是一个原生的 PowerShell 命令行工具,虽然它表面上看与普通的 Dos 命令行

PowerShell 学习笔记——对象(一)

对于我这个 IT Pro 来说,PowerShell 的学习还真不轻松.无论它今后发展成什么样子,它现在却实实在在地是个脚本语言,是语言!我一听函数.变量.对象,就头疼的人,今天暂且列一些概念在这里吧,还需要进一步消化. 1. PowerShell 中的对象 [事例]:Get-Process 如上图所示,命令执行的结果以表格的形式呈现出来,每一行称为"对象",每一列称为"属性",所有行加在一起称为"集合",曾经将"集合"称为&

Windows PowerShell 学习---第一章 PowerShell介绍

第1章 PowerShell介绍 1.1.什么是PowerShell 2006年,微软发布一款叫做Windows PowerShell的全新脚本语言. PowerShell与命令提示符shell一样,PowerShell可以进行交互性地输入命令.也可以很容易的使用管道和重定向将文件和程序串联起来. 不过,PowerShell确是一个强大的面向对象的语言,可以用于复杂的脚本编程. 1.2.面向对象的命令shell 关于cmd 如果在命令提示符下输入dir,dir命令将会在屏幕打印出目录中的文件名.

Powershell学习之道-文件夹共享及磁盘映射

导读 在Linux环境下,我们很轻易就能得心应手地通过命令操作一切事物,在Windows下,Powershell也算是后起之秀,提供大量的cmdlet以及c#的横向拓展.下面将由小编带领大家通过Powershell实现文件夹共享,当然文中也不会冷落cmd这枚老将. 文件夹共享概述 共享文件夹的应用非常广泛,客户端对服务器端进行文件管理,局域网文件直传等等,在linux下,可以简单的安装smaba协议,简单的配置之后即可使用.在windows下,可以通过图形化的操作开启这项功能,当然带着一点极客风