`
hongzhguan
  • 浏览: 272799 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Powershell学习笔记三

阅读更多

1.创建集合和泛型
a.创建List集合
#为了减少在同意命令空间的对象名的输入,可以使用-f操作符指定唯一的类名。
 $namespace = "System.Collections.{0}";
 $arrayList = New-Object  ($namespace -f "ArrayList");
 $queue = New-Object ($namespace -f "Queue");
 $arrayList.Add("a");
 $queue.Enqueue("b");
 或者(使用ArrayList管理动态项的集合)
 $arrayList = New-Object System.Collections.ArrayList;
    [void]$arrayList.Add("a");
    [void]$arrayList.Add(1);

    [void]$arrayList.AddRange(("hello","world","china"));

    
b.创建泛型
 $coll = New-Object 'System.Collections.ObjectModel.Collection`1[System.String]'
 $coll.Add("aaaaaa");
 $coll.Add($true);
 $coll.get_Count();
 
c.创建一个HashSet的集合
 Add-Type -ReferencedAssemblies System.Core @'
 using System.Collections.Generic;
 public class VirtualMachine {
 public string Name;
 public string HostName;
 public HashSet<string> Dependencies = new HashSet<string>();
 }
 '@

 $virtual = New-Object VirtualMachine;
 $virtual.Dependencies.Add("a");
 $virtual.Dependencies.Add("b");
 $virtual.Dependencies.Add("a");#添加失败,不允许重复,返回False。

 

 f.#在powershell中创建一个hashTable(不允许存放重复的值)
   $hash = @{"key" = "value"};

   或$has = @{key = 1;value = "aaaaa"};

    $hash = @{}创建空哈希表

    $hash.key1 = 1 将1赋给键key1

    $hash.key1和$hash["key1"]   返回key1的值


   $hash.Add(1,"aaa");
   $hash.Add(2,"bbb");
   $hash.Add(3,"ccc");
   $hash.Add("ffff","ddd");

 

  #使用foreach遍历keys/value
     foreach($obj in $hash.Keys){
            "key = " + $obj ;
             " value = "+ $hash[$obj] ;
       }

   遍历的值:

         key = 3
         value = ccc
         key = key
         value = value
         key = 2
         value = bbb
         key = 1
         value = aaa

 

       #使用enumerator遍历keys
        [System.Collections.IEnumerator]$keys =
$hash.Keys.GetEnumerator() ;
         while($keys.MoveNext()){
              "key = " + $keys.Key ;
              " value = "+ $keys.Value ;
            }

 

                  #使用hashtable的copyTo
                 [System.Object[]]$array=New-Object 
System.Object[] -ArgumentList $hash.Count;
                 $hash.CopyTo($array,0);
                    foreach($item in $array)
                    {
                         "key:"+$item.Key;
                         "value:"+$item.Value;
                    }

 

# discarding output using Out-Null输出重定向
dir | Out-Null
dir > $null # this is equivalent to the above
# Out-GridView uses a graphical interface to display the data
Get-Process *ss | Out-GridView

 

类似map集合

 $a = [collections.generic.dictionary[string,int]] ;
 $a.Set(1,"aaaa");
 $a.Set(2,"bbbb");
 $a.Set(3,"cccc");
 $a.Set(2,"dddd");
 
 $a.Get(2);  ---->输出:dddd

 

2.创建一个多行或格式化的字符串
$myString = @'
 this is the first line !
       this is the second line !
  this is the third line !
'@

b.使用here string 实现多行注释
$null = @'
 function myTest
 {
   "this should not be considered a function" ;
 }
'@

c.向字符串中插入动态信息
  $header = "Report for Today"
  $myString = "$header `n -------------"
  $myString

d.向字符串中插入动态信息(使用powershell的格式化操作符)
  $myString = "{0} `n {1}" -f $header , ('-' * $header.Length)
注意:字符串格式设置符(-f)使用与.NET框架中的String.Format()方法相同的字符串格式作为规则。

3.使用Get-Date命令的-Format参数
 $getDate = Get-Date -Date '05/09/2012 1:23 PM' -Format 'dd-MM-yyyy  hh:mm:ss'
 使用字符串格式化(-f)运算符:
 $date = [DateTime] '03/27/2021 1:19 PM';
 $getDate = '{0: dd-MM-yyyy hh:mm:ss}' -f $date
 对象的ToString()方法
 $getDate = $date.ToString("dd-MM-yyyy hh:mm:ss");

4.将文本添加到字符串的结尾对与小型到中型字符串效果非常好,但是对较大的字符串会造成极大的性能问题
 Measure-Command{
  $output = New-Object System.Text.StringBuilder;
  1..10000 | % { $output.Append("Hello World")}
 }
 TotalSeconds      : 1.5562987

 Measure-Command{
 $output = ""
 1..10000 | % { $output += "Hello World"}
}

TotalSeconds      : 4.2449152

5.运算:powershell中两个整数相除,如果需要的话返回浮点型的结果。
将浮点型转换成整型需要"四舍五入"。
$a = 3/2         返回:1.5
$a = [int]3/2    返回:2

b.计算任意的根
function root ($number, $root){
 [System.Math]::Exp($([Math]::Log($number)/$root));
}

root -number 125 -root 3

c.使用度而不是程序弧度为单位
 function Convert-RadiansToDegrees($angle) {$angle/(2*[Math]::PI)*360 }
 function Convert-DegreesToRadians($angle) { $angle/360 * (2*[Math]::PI) }
 
 Convert-RadiansToDegrees([Math]::PI)     返回:180
 Convert-DegreesToRadians -angle 360
 [Math]::Tan([Math]::PI/4);
 [Math]::Tan((Convert-DegreesToRadians -angle 45))  返回1

6.在不同的进制间转换数字
 a.直接输入一个十六进制数字,使用0x前缀:
 $hexNumber = 0x1234     返回:4660
 b.将数字转换为二进制表示,向[Convert]::ToString()方法提供2为基数
 [Convert]::ToString(1234,2);  返回:10011010010
 c.将二进制数字转换为十进制表示,向[Convert]::ToInt32()方法提供2为基数
 [Convert]::ToInt32("10011010010",2);  返回:1234
 d.将十六进制数转化为十进制表示形式,需要在数字前加入前缀0x
   $myErrorCode = 0xFE4A    返回:65098
 f.将数字转化为八进制表示形式,向[Convert]::ToInt32()方法提供参数8为基数。
   [Convert]::ToInt32("1234",8);   返回:668
   或[Convert]::ToString(1234,8);  返回:2322
 g.将数字转换到十六进制表示形式,使用[Convert]类或powershell的格式运算符:
   [Convert]::ToString(1234,16);   返回:4d2
   "{0:X4}" -f 1234 ;              返回:04D2
 
 7.(Measure-Object)度量一个列表的统计属性
  默认情况下Measure-Object命令只统计它收到对象的个数,如果你要测量这些对象中的
  其他属性(如最大值、最小值、平均值、总和、字符、单词或行),则需要命令提供选项。
  -Property参数来测量得到要测量的属性。
  例如:Get-ChildItem > output.txt
        Get-Content output.txt | Measure-Object -Character -word -Line
        Get-ChildItem | Measure-Object -Property Length -Max -Min -Average -Sum

8.编写脚本块:把不同的逻辑放到一个脚本块中,然后将脚本快作为一个参数传给需要它的代码,使用调用操  作符(&)来执行这个脚本块。
   在管道中应用脚本块
   Function Map-Object{
     Param([ScriptBlock]$mapCommand)
  Process
  {
   & $mapCommand
  }
   }
   调用:1,2,3 | Map-Object { $_  * 2 }   返回2,4,6
   注意:为了从一个脚本或函数返回数据,需要把改数据写入输出管道。但也可以使用传统的关键字return。如果不想该类的方法有返回值。可以在该方法前面加入[void]来避免返回值。
    [void]$arrayList.Add("hello");
 2.在脚本中若需要使用引用其他的脚本在这个脚本中使用".()"引入这个库文件。
  例如:.(Join-Path $scriptDirectory test.ps1)

9.用命令关键字编写脚本
  注:使用begin、process和end关键字,把你的脚本分成初始化、处理和清除几个区域。
   Function Method{
   begin{#初始化操作}
   process{#处理操作}
   end{#清理操作}
   }

分享到:
评论

相关推荐

    Powershell学习笔记--使用正则表达式查找文件

    PowerShell是一种强大的脚本语言,广泛用于Windows系统的管理和自动化任务。它提供了丰富的命令和函数,其中包括使用正则表达式进行字符串匹配和文件查找的功能。正则表达式是一种定义搜索模式的文本模式,能够对...

    Empire学习笔记.pdf

    Empire是一款强大的、开源的 PowerShell 后渗透测试框架,由 Python 编写,主要用于网络攻防演练、红蓝对抗等安全场景。它允许安全研究人员在Windows、Linux和Mac OS平台上创建自定义的 PowerShell 模块,进行隐蔽的...

    SQLServer 2012性能学习笔记

    ### SQL Server 2012 性能学习笔记 #### SQL Server 2012 新特性及简介 SQL Server 2012 是微软推出的一个重要版本,它引入了许多新特性和改进,旨在提高数据库系统的可用性、安全性、可管理性以及性能。以下是几...

    dotnet-1Password的跨平台PowerShell客户端

    3. **1Password API**:学习如何与1Password的RESTful API进行交互,获取和更新数据。 4. **身份验证和安全**:掌握如何安全地处理和存储用户凭证,以及如何进行身份验证。 5. **JSON解析**:使用.NET中的类库,如...

    python学习笔记 (2).doc

    在"Python学习笔记(2)"中,我们涵盖了多个关键主题,包括基础入门、数据类型、字符串处理、数据字典、控制语句、函数、文件和目录操作,以及一些特定模块的专题讨论。以下是对这些知识点的详细说明: 1. **入门**:...

    关于python学习笔记.docx

    无论是Windows的PowerShell还是Linux/macOS的终端,它们都提供了类似的一系列命令。例如,`pwd`用于显示当前工作目录,`hostname`显示计算机在网络中的名称,`mkdir`用于创建新的目录,`cd`用于切换目录,`ls`用于列...

    SQL+SERVER+2008+学习笔记

    ### SQL Server 2008 学习笔记关键知识点概览 #### 一、SQL Server 2008 安装与配置 ##### 1.1 版本介绍 - **企业版**: 面向大型企业,提供最全面的功能。 - **标准版**: 提供核心的数据管理和业务智能功能。 - **...

    渗透基础WMI学习笔记1

    - **PowerShell**:使用`Get-WmiObject` cmdlet,如 `$creds = New-Object System.Management.Automation.PSCredential` 创建凭据对象,然后通过`-Credential`参数指定身份验证信息。 - **Windows Credentials ...

    Azure-103 学习笔记(精华).pdf

    云管理员需要使用Azure门户进行管理,并随着经验的积累,逐渐过渡到使用PowerShell和命令行界面。一个成功的云管理员需要有操作系统、虚拟化、云基础设施、存储结构和网络方面的丰富经验。 在Azure订阅管理方面,...

    Java学习笔记

    ### Java学习笔记 #### Part1: Java入门 ##### Day1: Java基础知识概览 ###### 一、人机交互方式 人机交互是计算机科学的重要组成部分,主要包括两种方式: 1. **图形化界面(GUI)**:包括Windows视窗操作、...

    PowerShell:这些文件是我的一些个人PowerShell文件,可用于教学目的或自动执行笔记本电脑上的任务

    学习和使用这些PowerShell脚本可以帮助你提升系统管理效率,理解PowerShell的工作机制,并且在需要时能够编写自己的自动化脚本来解决特定问题。无论你是初学者还是经验丰富的IT专业人士,这个"PowerShell-master...

    【python学习笔记:Django】2.启动虚拟环境库出错——Windows PowerShell中无法加载文件 xxx\Scripts\Activate.ps1,因为在此系统上禁止运行脚本

    以管理员身份运行 PowerShell,并输入 set-executionpolicy remotesigned ,再输入“y”如图: 再次返回到VsCode中就可以使用虚拟环境库 分析原因: Windows PowerShell默认是Restricted(防止运行没有数字签名的...

    ArcGIS API for Python学习笔记(一)环境配置

    【ArcGIS API for Python学习笔记(一)环境配置】 在开始使用ArcGIS API for Python时,需要先搭建好相应的开发环境。这篇学习笔记主要记录了环境配置的过程,旨在帮助初学者避免遇到常见问题。以下是对笔记内容的...

    笔记本wifi

    4. **命令提示符或PowerShell**:对于技术爱好者,可以通过运行命令提示符或PowerShell,并输入`netsh wlan set hostednetwork mode=allow`来开启WiFi,关闭则使用`netsh wlan set hostednetwork mode=disallow`。...

    MyPoSH:我学习和收集的笔记和脚本

    【标题】 "MyPoSH:我学习和收集的笔记和脚本" 涉及的知识点主要集中在PowerShell这一强大的命令行工具上。PowerShell是微软开发的一种任务自动化和配置管理框架,它集成了命令行界面和脚本语言,特别适用于系统管理...

    内网-内网安全攻防-笔记.pdf

    3. PowerShell常用参数 - -ExecutionPolicy bypass:绕过执行安全策略。 - -WindowStyle Hidden:隐藏窗口。 - -NonInteractive:不提供交互式提示。 - -NoProfile:不加载当前用户的配置文件。 - -NoExit:执行后不...

    NoteLibrary:我的笔记图书馆

    学习和理解NoteLibrary的源代码,不仅可以提升你的PowerShell技能,也能帮助你建立一个个性化的知识管理系统,让你的笔记管理和学习过程更加高效。对于系统管理员、开发者以及任何需要整理和保存大量信息的人来说,...

    [笔记][“笨办法”学Python 3]1

    3. **数字和数学计算**:学习Python中的算术运算符,包括加减乘除、取余和幂运算,以及如何进行数学计算。 4. **变量和命名**:理解变量的含义和使用,以及如何遵循命名规则。 5. **字符串和文本**:学习字符串的...

    dos速成笔记 windows

    例如,`CMD`中的命令可与PowerShell结合,提供更强大的功能。此外,通过`CMD.exe`的命令行参数,可以在启动时指定工作目录或运行特定命令。 六、学习资源 对于想要深入学习DOS的用户,可以参考MSDN(Microsoft ...

Global site tag (gtag.js) - Google Analytics