学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

948

积分

2

好友

22

主题

[原创图文] 了解PowerShell

发表于 2019-2-13 21:14:57 | 查看: 4775| 回复: 1
第一部分 基本概念

基本笔记

        微软在cmd的基础上对windows系统的维护手段进行了扩充,提供了更完善的shell。Windows 7之后系统自带powershell,在运行中输入powershell即可调用交互界面。可以通过脚本的方式组织PowerShell命令脚本后缀是.ps1.

      在powershell界面调用powershell脚本的方式是 PowerShell ”& ’脚本路径‘  参数“.

      PowerShell脚本中的注释使用#开头.

命令

      三个帮助命令: get-command, get-help, get-member.

      get-date 获取时间,输出为时间字符串格式。

      get-process 获取当前系统运行的进程。

特性

    powershell支持管道。管道中可以传递对象,基于.net的对象体系。



第二部分 变量

自定义变量

    可以把管道或者命令的输出保存在变量中,供后续使用。PowerShell可以把文本或者对象存储在变量中。变量的定义使用$加字符串的形式.

     例如:

     $process = Get-Process

     $process.Count

     $process | Where-Object { $_.ID -eq 0}

     变量可以通过赋值为$null进行释放.

环境变量

     PowerShell有以下几种方式获取环境变量:

     1)获取所有的环境变量

     Get-ChildItem env:

     2)获取单个环境变量

     $env:variablename

     例如$env:username

    3)通过Get-ChileItem获取某个环境变量

    Get-ChildItem env:variablename

    Get-ChildItem Environment::variablename

    PowerShell提供一个环境驱动器,称为env;PowerShell提供了一个环境提供者,称为Environment. 访问环境驱动器使用env:variablename, 访问环境提供者,使用Environment::variablename.

提供者

提供者是什么?

   环境提供者是Environment,通过访问环境提供者可以获取到环境变量。

   访问提供者的方法是Get-Content。

   如果访问环境变量,可以使用Get-Content env:variablename或者Get-Content Envrionment::variablename

变量的范围

    可以指定变量的范围, 可以在变量前增加范围的关键字,包括:

     GLOBAL

     SCRIPT 当前脚本范围

     LOCAL  当前范围

    例如:  $SCRIPT:myVariable = value

    当你定义了变量的范围,PowerShell 支持两个附加范围的修饰选项:Private和AllScope。

   关于变量范围的帮助在 Get-Help About-Scope

第三部分 .NET对象

访问

    PowerShell访问静态或者实例化的对象的方法如下:

    1)访问静态方法   [Classname]::MethodName(参数列表)

     [Web.HttpUtility]::UrlEncode("http://www.csdn.net")     访问这个方法需要先Load System.Web

    21)访问对象实例的方法  $ObjectRefernce.MethodName(参数列表)

    3)访问静态属性  [ClassName]:ropertyName

    4)访问对象实例的属性  $ObjectReference.PropertyName

创建.NET对象

   使用New-Object来创建对象实例。不带参数时,创建默认构造函数的对象,也可以携带参数调用带参数的构造函数进行创建。

    例如:

    $generator = New-Object System.Random

    $image = New-Object System.Drawing.Bitmap source.gif

如果希望创建的实例在独立的库文件中,则需要先加载库文件,PowerShell默认没有加载这些库文件。

     例如:

     [Reflection.Assembly]:oadWthPartialName(*System.Windows.Forms)

     $image = New-Object System.Drawing.Bitmap source.gif

    $image.Save("source_vonverted.jpg", "JPEG")

第四部分 COM对象

   使用New-Object -ComObject ProgId 的方式可以通过ProgID来创建一个COM对象。

第五部分 修改对象或类

    可以通过Add-Member方法向对象或者向类的所有对象题那家自定义的属性和方法。

第六部分 循环和流程控制

比较和逻辑操作

    可以使用 -eq等运算符进行数据的比较。比较运算符包括:-eq -ne -ge -gt -lt -le -like -notlike -match -notmatch -contains -not contains -is -isnot

    逻辑操运算符包括-and -or -xor -not

条件语句

   if  else elseif

   swith

   for  foreach while do



第六部分 字符串和非结构化文本

字符串

    PowerShell字符串分为两类:

    1)按照字面的字符串(literal) 使用单引号括起来。

    2)可扩展的字符串(expanding) 使用双引号括起来。

   这两类如果要添加对应的引号,则使用两个引号字符来表示,也可以采用另外一种方式进行表示避免转义:

    $myString = ’This‘ + “‘” +’s my world‘

多行或者格式化的字符

    存在换行的字符串在引号括起来之外再机上@符号。

    例如:

    $myString = @"        ##@"和“@成为here string,  here string 之后不允许出现其他字符。

    This is the  line

    This is the second line

    "@

在字符串中存放特殊字符

    在扩展字符串中通过转义字符来存放特殊字符。  ·n表示换行。

    主要原因是脚本中\通常用来分隔文件夹,因此不用来做转义字符。

在字符串中放入变量

    在可扩展的字符换中,可以通过包含变量名称的方式将变量的值插入。使用非扩展的方式存放时,系统不会把$以及后续部分解析成变量。

转义字符的帮助 Get-Help  About_Escape_Character 或者 Get-Help About_Special_Charater.

字符串设置格式

    PowerShell字符串设置符-f使用和.NET中String.Format()方法相同的字符格式作为规则。他将设置的格式放在左侧,将内容放在右侧。

例如

     $number1 = 111

     $number2 = 222

     "$number2 divided by $number1 is " +  $bunber2 / $number1

可以改写成

    "{0} divided by {1} is {2}" -f $number2, $number1, ($number2/$number1)

字符串查找

     可以使用-like来查找字符串中是否包含另一个含有通配符字符串表示的内容。

     "Hello World" -like '*llo w*'

     可以使用-match来查找字符串中是否包含另一个正则表达式的内容。

     使用Contains()  来表示一个字符换中是否包含另外一个字符串

     使用IndexOf()方法来表示字符串中含有应另一个字符串的位置。

字符串转换

     使用Replac()方法来在字符串中替换另一段字符串。

     使用-replace 来使用正则表达式进行替换。

     使用ToUpper()和ToLower的方法来进行大小写转换。

     使用Trim()来去掉用户输入开始或结尾的空格。

格式化日期的格式

    Get-Date -Date "03/02/2013 9:46 PM" -Format "dd-MM-yyyy hh:mm:ss"

    Get-Date -Date “03/02/2013 9:46 PM" -UFormat "%d-%m-%y %I:%M:%s"

    也可以

    $date = [DateTime]"03/02/2013 9:46 PM"

    方法一 "{0:dd-Mm-YYY hh:mm:ss} -f $date

    方法二 $date.ToString("dd-MM-yyyy hh:mm:ss")

文本流转换为对象

     Convert-TextObject可以将文本转换为一组对象。



第七部分 数字和计算

     PowerShell通过.Net Framework中的System.Math类进行数学计算。

     [Math]::Abs()

     [Math]:ow()

     [Math]::Sqrt()

     [math]::Sin()

     [Math]::Tan()

     [Math]::ACos()

     [Math]::ATan()
---------------------
原文:https://blog.csdn.net/digitalcastle/article/details/8546475

温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
发表于 2019-2-19 15:28:24
赞一个!{:3_52:}

小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

GMT+8, 2024-4-24 12:16 , Processed in 0.094746 second(s), 42 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表