欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

powershell 视频教程 bilibili 1111 有大用 有大大用

powerShell的优势:

一、扩展性: import-module

在Windows Server 2012中,已经大量扩展了基础角色的管理命令。

二、易用性:

1.语法:命令由动词和名词组成,例如: 

Get-EventLog

Set-Aduser

New-VM

2、利用Tab键自动补全命令。

3、PoxerShell快速入门]命令:

Get-command:支持通配符。

Get-Help: Windows Server 2012默认不包含详细信息,需要Update Help

4、自动向下兼容传命令行工具:利用别名实现,也可以自定义别名。

三、脚本的支持:可以在http://technet.microsoft com/zh-cn/的脚本中心获取脚本以及学习制作脚本

四、批量处理:灵活使用管道符“|”:

Get-ADUser | Where-0bject {$_.distinguishedname  -ilike "*ou=sales, dc=adatum, dc=com" }| Enable-Mailbox -database  "Mailbox Database 1"

五、轻松实现远程管理。

image.png


来自  https://www.bilibili.com/video/BV1j44115727?p=2&vd_source=346847773d1f74962a4daab9ddf7f228  



因为可能涉及到权限的问题,如下图,最好以管理员身份来运行 powershell

image.png


1) 算术运算计算

image.png

PS C:\Users\16666739> 1+1

2

PS C:\Users\16666739> 


image.png

PS C:\Users\16666739> $var1=1

PS C:\Users\16666739> $var2=2

PS C:\Users\16666739> $var1+$var2

3

PS C:\Users\16666739>


comlet是一种在powershell中使用的命令,, 由.net库编写,命令规范遵循 动词-名称 的格式

# Get-Process 获取当前进程

# Set-Location 切换目录,

# Get-Process:获取当前运行的进程。

# Set-ExecutionPolicy:设置脚本执行策略。

# New-Item:创建新的项(如文件、文件夹等)。



comlet  返回的是 .net对象


poweshell ,,,get-aduser 获取 用户名为 11111111 的用户信息,以表格显示出来

Import-Module ActiveDirectory  # 确保导入AD模块 

# 使用Get-ADUser获取用户信息,并通过Format-Table(或别名ft)以表格形式显示  

Get-ADUser -Filter "SamAccountName -eq '11111111'" | Format-Table Name, SamAccountName, UserPrincipalName, EmailAddress, DisplayName


旧版的cmd命令在powershell中通过别名链接到一个cmdlet命令,,,也有 linux 命令别名到cmdlet

别名 

cd --------------->   Set-Location

ls --------------->   Get-ChildItem

image.png

PS C:\Users\16666739> Get-Alias cd


CommandType     Name                                               Version    Source

-----------     ----                                               -------    ------

Alias           cd -> Set-Location



PS C:\Users\11111111>

image.png

PS C:\Users\16666739> Get-Alias   #查看所有别名


CommandType     Name                                               Version    Source

-----------     ----                                               -------    ------

Alias           % -> ForEach-Object

Alias           ? -> Where-Object

Alias           ac -> Add-Content

Alias           asnp -> Add-PSSnapin

Alias           cat -> Get-Content

Alias           cd -> Set-Location

Alias           CFS -> ConvertFrom-String                          3.1.0.0    Microsoft.PowerShell.Utility

Alias           chdir -> Set-Location

Alias           clc -> Clear-Content




image.png

PS C:\Users\11111111> Get-Command ls


CommandType     Name                                               Version    Source

-----------     ----                                               -------    ------

Alias           ls -> Get-ChildItem    #可以看出 ls 是别名



PS C:\Users\11111111>

image.png

PS C:\Users\16666739> Get-Command  get-ad*


CommandType     Name                                               Version    Source

-----------     ----                                               -------    ------

Cmdlet          Get-ADAccountAuthorizationGroup                    1.0.1.0    ActiveDirectory

Cmdlet          Get-ADAccountResultantPasswordReplicationPolicy    1.0.1.0    ActiveDirectory

Cmdlet          Get-ADAuthenticationPolicy                         1.0.1.0    ActiveDirectory

Cmdlet          Get-ADAuthenticationPolicySilo                     1.0.1.0    ActiveDirectory

Cmdlet          Get-ADCentralAccessPolicy                          1.0.1.0    ActiveDirectory

Cmdlet          Get-ADCentralAccessRule                            1.0.1.0    ActiveDirectory

Cmdlet          Get-ADClaimTransformPolicy                         1.0.1.0    ActiveDirectory

Cmdlet          Get-ADClaimType                                    1.0.1.0    ActiveDirectory

Cmdlet          Get-ADComputer                                     1.0.1.0    ActiveDirectory

Cmdlet          Get-ADComputerServiceAccount                       1.0.1.0    ActiveDirectory

Cmdlet          Get-ADDCCloningExcludedApplicationList             1.0.1.0    ActiveDirectory

Cmdlet          Get-ADDefaultDomainPasswordPolicy                  1.0.1.0    ActiveDirectory

Cmdlet          Get-ADDomain                                       1.0.1.0    ActiveDirectory

Cmdlet          Get-ADDomainController                             1.0.1.0    ActiveDirectory

Cmdlet          Get-ADDomainControllerPasswordReplicationPolicy    1.0.1.0    ActiveDirectory

Cmdlet          Get-ADDomainControllerPasswordReplicationPolicy... 1.0.1.0    ActiveDirectory

Cmdlet          Get-ADFineGrainedPasswordPolicy                    1.0.1.0    ActiveDirectory

Cmdlet          Get-ADFineGrainedPasswordPolicySubject             1.0.1.0    ActiveDirectory

Cmdlet          Get-ADForest                                       1.0.1.0    ActiveDirectory

Cmdlet          Get-ADGroup                                        1.0.1.0    ActiveDirectory

Cmdlet          Get-ADGroupMember                                  1.0.1.0    ActiveDirectory

Cmdlet          Get-ADObject                                       1.0.1.0    ActiveDirectory

Cmdlet          Get-ADOptionalFeature                              1.0.1.0    ActiveDirectory

Cmdlet          Get-ADOrganizationalUnit                           1.0.1.0    ActiveDirectory

Cmdlet          Get-ADPrincipalGroupMembership                     1.0.1.0    ActiveDirectory

Cmdlet          Get-ADReplicationAttributeMetadata                 1.0.1.0    ActiveDirectory

Cmdlet          Get-ADReplicationConnection                        1.0.1.0    ActiveDirectory

Cmdlet          Get-ADReplicationFailure                           1.0.1.0    ActiveDirectory

Cmdlet          Get-ADReplicationPartnerMetadata                   1.0.1.0    ActiveDirectory

Cmdlet          Get-ADReplicationQueueOperation                    1.0.1.0    ActiveDirectory

Cmdlet          Get-ADReplicationSite                              1.0.1.0    ActiveDirectory

Cmdlet          Get-ADReplicationSiteLink                          1.0.1.0    ActiveDirectory

Cmdlet          Get-ADReplicationSiteLinkBridge                    1.0.1.0    ActiveDirectory

Cmdlet          Get-ADReplicationSubnet                            1.0.1.0    ActiveDirectory

Cmdlet          Get-ADReplicationUpToDatenessVectorTable           1.0.1.0    ActiveDirectory

Cmdlet          Get-ADResourceProperty                             1.0.1.0    ActiveDirectory

Cmdlet          Get-ADResourcePropertyList                         1.0.1.0    ActiveDirectory

Cmdlet          Get-ADResourcePropertyValueType                    1.0.1.0    ActiveDirectory

Cmdlet          Get-ADRootDSE                                      1.0.1.0    ActiveDirectory

Cmdlet          Get-ADServiceAccount                               1.0.1.0    ActiveDirectory

Cmdlet          Get-ADTrust                                        1.0.1.0    ActiveDirectory

Cmdlet          Get-ADUser                                         1.0.1.0    ActiveDirectory

Cmdlet          Get-ADUserResultantPasswordPolicy                  1.0.1.0    ActiveDirectory



PS C:\Users\16666739>


image.png

PS C:\Users\16666739> Get-ADComputer  -filter *


image.png

PS C:\Users\16666739> Get-aduser  -filter *


image.png

PS C:\Users\16666739> get-aduser -filter * 

PS C:\Users\16666739> Get-ADUser -Filter "DistinguishedName -like '1111111*'"

PS C:\Users\16666739> Get-ADUser -Filter "DistinguishedName -like '*1111111*'"

PS C:\Users\16666739>  






image.png

#   Get-Process                                  #获取所有进程

#   Sort-Object CPU -Descending    #根据cpu的时间进行倒序排序

#   Select-Object -First 5                   #是获取前5个对象


PS C:\Users\16666739> Get-Process | Sort-Object CPU -Descending | Select-Object -First 5    #获取cpu占用率最高的前5个进程


Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName

-------  ------    -----      -----     ------     --  -- -----------

   1825      91   402920     268220     975.38  14384   1 chrome

   9638       0      196       1060     797.31      4   0 System

    928      40   695192     659376     686.64  15216   1 chrome

    545      26   865308     811052     677.81   3644   1 chrome

   3897     153   262480     211192     567.94   9672   1 chrome



PS C:\Users\16666739>



image.png

PS C:\Users\shipingzhong> Get-ChildItem $env:windir -Filter *.exe | Measure-Object -sum Length

#求出 C:\windows 下的 exe 文件的大小之和   


Count    : 12

Average  :

Sum      : 11062184

Maximum  :

Minimum  :

Property : Length




PS C:\Users\shipingzhong>

PS C:\Users\shipingzhong> Import-Csv data.csv | Where-Object {$_.age -gt 30} | ConvertTo-Html | Out-File output.html

PS C:\Users\shipingzhong>

# Import-Csv data.csv   #读取data.csv

# Where-Object {$_.age -gt 30}   #筛选出年龄大于30岁的用户

# ConvertTo-Html   #转换成html格式

# Out-File output.html  #输出成output.html文件


image.png

image.png

CMD的脚本语会扩展名是.bat文件

PowerShell的扩展名是.ps15文件

bat 文件不友好

image.png

powershell代码比较友好

image.png

image.png

PS C:\Users\shipingzhong> Get-Command            #获取powershell所有的命令


CommandType     Name                                               Version    Source

-----------     ----                                               -------    ------

Alias           Add-AppPackage                                     2.0.1.0    Appx

Alias           Add-AppPackageVolume                               2.0.1.0    Appx

Alias           Add-AppProvisionedPackage                          3.0        Dism


image.png

PS C:\Users\shipingzhong> Update-Help        #更新命令的帮助文档


image.png

PS C:\Users\shipingzhong> Get-Help Get-Command            #获取单个命令 Get-Command 的帮助文档

名称

    Get-Command


语法

    Get-Command [[-ArgumentList] <Object[]>]  [<CommonParameters>]


    Get-Command [[-Name] <string[]>] [[-ArgumentList] <Object[]>]  [<CommonParameters>]



别名

    gcm



备注

    Get-Help 在此计算机上找不到该 cmdlet 的帮助文件。它仅显示部分帮助。

        -- 若要下载并安装包含此 cmdlet 的模块的帮助文件,请使用 Update-Help。

        -- 若要联机查看此 cmdlet 的帮助主题,请键入: "Get-Help Get-Command -Online" 或

           转到 https://go.microsoft.com/fwlink/?LinkID=113309




PS C:\Users\shipingzhong>


与 linux 完全相同的命令

image.png

PS C:\Users\shipingzhong> pwd            #输出当前的工作目录


Path

----

C:\Users\shipingzhong



PS C:\Users\shipingzhong> Get-Alias pwd  #查看pwd是哪个命令的别名


CommandType     Name                                               Version    Source

-----------     ----                                               -------    ------

Alias           pwd -> Get-Location



PS C:\Users\shipingzhong>



image.png


PS C:\Users\shipingzhong> ls        #列出当前目录的文件和文件夹



    目录: C:\Users\shipingzhong



Mode                 LastWriteTime         Length Name

----                 -------------         ------ ----

d-----         2024/6/29     11:40                .cisco

d-----         2024/6/29     11:53                .config

d-----         2024/6/29     22:45                .vscode

d-----         2024/6/30      1:15                .WebIde90

d-r---         2024/6/29      9:43                3D Objects

d-r---         2024/6/29      9:43                Contacts

d-r---         2024/9/16     16:05                Desktop

d-r---         2024/9/18     21:06                Documents

d-r---         2024/9/16     15:22                Downloads

d-r---         2024/6/29      9:43                Favorites

d-----         2024/6/29     10:30                Intel

d-r---         2024/6/29      9:43                Links

d-r---         2024/6/29      9:43                Music

d-r---         2024/6/29     14:23                OneDrive

d-----         2024/7/17     20:07                OpenVPN

d-r---         2024/6/29     13:19                Pictures

d-----          2024/8/3     19:43                PycharmProjects

d-----         2024/7/14     21:42                sangfor

d-r---         2024/6/29      9:43                Saved Games

d-r---          2024/7/7     11:25                Searches

d-r---         2024/6/30     12:55                Videos

-a----         2024/9/18     21:06             32 data.csv

-a----         2024/6/29     20:35            475 my.js

-a----         2024/9/18     21:06            762 output.html



PS C:\Users\shipingzhong>


image.png

PS C:\Users\shipingzhong> clear            #清屏命令


image.png

PS C:\Users\shipingzhong> cat data.csv        #cat文件,查看data.csv文件的内容

Age

20

30

40

50

60

70

PS C:\Users\shipingzhong>


image.png

PS C:\Users\shipingzhong> mkdir 测试2            #新建文件夹  "测试2"


    

    目录: C:\Users\shipingzhong



Mode                 LastWriteTime         Length Name

----                 -------------         ------ ----

d-----         2024/9/18     21:28                测试2



PS C:\Users\shipingzhong>


image.png

PS C:\Users\shipingzhong> mv .\data.csv 测试2            #把 data.csv 移动到 "测试2"文件夹

PS C:\Users\shipingzhong>


image.png

PS C:\Users\shipingzhong> cp .\测试2\data.csv ./                #把 ".\测试2\data.csv" 复制到当前目录下

PS C:\Users\shipingzhong>


image.png

PS C:\Users\shipingzhong> rm .\data.csv            #删除文件

PS C:\Users\shipingzhong>


image.png

PS C:\Users\shipingzhong> ps | Export-csv test1.csv            #把所有进程输出到test1.csv 文件里面

PS C:\Users\shipingzhong>   ps | Export-Csv -Path test.csv      #这个命令里多出一个-path ,似乎不理想,界面一直在等待


image.png

PS C:\Users\shipingzhong> ps | ConvertTo-Html > test.html        #输出为 test.html文件

PS C:\Users\shipingzhong>


来自  https://www.bilibili.com/video/BV1Nx4y147n3/?spm_id_from=333.337.search-card.all.click&vd_source=346847773d1f74962a4daab9ddf7f228  



PowerShell入门

01 | PowerShell编程基础

02| 对象与.NET

03 | Cmdlets与Pipeline

04 | 高级编程

05 | 模块创建



PowerShell编程基础

变量

运行时数据的存储

数据结构

●运行时数据的组织

控制结构

程序流控制


变量

●运行时数据的存储

-如:计算结果,字符串等

●PowerShell 是动态类型

●$<变量名> = <值>

-例子: $surname = "John'

$length = 32

变量名称不区分大小写

预定义变量

●$null  ---> 空值

●$true ---> 真值为真

●$false ---> 真值为假

●$_   ---> 当前处理的元素

image.png

创建   @(<元素>,<元素>,...)

索引   <数组>[<索引>]

运用赋值操作符,可将数组元素添加到对应的位置

因为 powershell 是动态类型,所以 powershell 数组可以储存不同类型的数据,如数字,字符串

powershell中数组的索引是从零开始

image.png


哈希表通过键值对来组织数据

我们不需要事先知道哈希表的大小

创建  ->   @{<键> = <值>;...}

索引  ->  <哈希表>[<键>]

括号里用赋值操作符给键值对赋值 ,, 用分号或者换行来分隔键值对

数据结构的索引也是用变量名后加方括号 ,, 但不同于数组,方括号里不添加下标,而是对应的键名

image.png

PS C:\Windows\system32> $var = 5

PS C:\Windows\system32> $var

5

image.png

PS C:\Windows\system32> $var.GetType()        #获取变量的类型信息


IsPublic IsSerial Name                                     BaseType

-------- -------- ----                                     --------

True     True     Int32                                    System.ValueType



PS C:\Windows\system32>

image.png

PS C:\Windows\system32> $var = "Hello world"        #将变量赋为字符串类型

PS C:\Windows\system32> $var.GetType()           #获取变量的类型信息


IsPublic IsSerial Name                                     BaseType

-------- -------- ----                                     --------

True     True     String                                   System.Object



PS C:\Windows\system32>

image.png

PS C:\Windows\system32> $uninitalized            # 未赋值,自动初始化为$null

PS C:\Windows\system32> $uninitalized -eq $null

True

PS C:\Windows\system32> $uninitalized -eq 0        #与0比较,结果为假

False

PS C:\Windows\system32>

image.png

PS C:\Windows\system32> $a = @('john',42,'jane')            #定义数组,里面的字符串可为单引号或双引号

PS C:\Windows\system32> $a[0]

john

PS C:\Windows\system32>

image.png

PS C:\Windows\system32> $a[0] = "jenny"     #给数组元素赋值

PS C:\Windows\system32> $a            #逐行输出数组的所有值,

jenny

42

jane

PS C:\Windows\system32>

image.png

image.png

image.png

PS C:\Windows\system32> $person = @{name="john";age=12}        #定义哈希表,每个元素以键值对的形式表示,每个元素以分号分隔

PS C:\Windows\system32> $person['name']  #以变量名后面加上方括号取一个元素的值

john

PS C:\Windows\system32> $person.age        #以变量名后面加上点来取一个元素的值

12

PS C:\Windows\system32> $person.age = 33        #给哈希表某一个元素赋值

PS C:\Windows\system32> $person.age

33

PS C:\Windows\system32>


控制结构-分支

●程序流的控制

-lf-Else分支

- Switch语句.

控制结构-lf-Else

, 或条件决定后面语句的进一步执行

If (<条件>)

{

<语句>

}

ElseIf (<条件>)

{

<语句>

}

Else

{

<语句>

}


控制结构-Switch

●值决定后面语句的进一 步执行

Switch (<表达式>)

{

<测试值> { <语句> ;break}

Default { <语句> }

}


使用  visual studio code 开发工具 安装 powershell 扩展

image.png


$_   美元符下划线,在 switch 语句中,指的是当前的测试的变量的值

$_   美元符下划线,在 循环或迭代语句中, 通过 $_ 的属性 可以获取当前的迭代数,当前的元素等 



$var = 7
if ($var -gt 25) {
   Write-Output "$var is great than 25" <# Action to perform if the condition is true #>
} else{
    Write-Output "$var is not great than 25"
}

$x = 0
switch ($x) {
    7 { Write-Output "Value is 7 " }
    42 { Write-Output "Value is 42" ;break;}
    {$_ -gt 25} {Write-Output "value is greater then 25"}
    default {Write-Output "Value is anything else"}
}


控制结构~循环

条件

语句

语句


控制结构循环

条件

语句

语句


控制结构-For循环

For (<开始值>; <循环条件>; <迭代步骤>) { <语句> }

-例子:For($i=0;$i-1t10;i++)

{

...

}


ForEach (<元素> in <集合>) { <语句> }

-例子: ForEach ($number in $NumbersArray )

{

 ...

}



控制结构-While循环

While (<循环条件>) { <语句> }

-例子: While ($something -eq $true)

{

...

}

Do

{ <语句> } While |Until (<循环条件>)

例子: Do

{

...

} While ($something -eq $true )

Do

{

...

} Until ($something -eq  $true)


示例

$var = 7
if ($var -gt 25) {
   Write-Output "$var is great than 25" <# Action to perform if the condition is true #>
} else{
    Write-Output "$var is not great than 25"
}

$x = 0
switch ($x) {
    7 { Write-Output "Value is 7 " }
    42 { Write-Output "Value is 42" ;break;}
    {$_ -gt 25} {Write-Output "value is greater then 25"}
    default {Write-Output "Value is anything else"}
}

for($i=1;$i -le 5;$i++){
    $i
}

$numbers = @("one","two","three","four","five")
foreach($number in $numbers){
    $number
}


$x = 0
while ($x -lt 3){
    $x++
    Write-Host "Hello world"
}


image.png

来自  https://www.bilibili.com/video/BV1yb411g7n7/?spm_id_from=333.337.search-card.all.click&vd_source=346847773d1f74962a4daab9ddf7f228    有大用



image.png


章节概览

对象与.NET

类与对象

●PowerShell是面向对象的

.NET

访问.NET类

PowerShell中的类

●自定义类


powershell 是基于对象,而不是基于文本的,,,通过 pipeline 传递到下一个的是对象,而不是文本

image.png


对象通过 点 加上属性名来访问对象的属性,这与哈希表一样



什么是对象?

, 对象.属性

, 对象.方法()

对象.方法(参数1,参数2)


image.png


PS C:\Users\shipingzhong> Get-Location        #返回当前目录,,,   类似于 # cd 命令

# 但是  Get-Location  返回的是一个对象,,,Path 是它的一个属性,,这个命令显示为一个表格

#有些 cmdlet 的命令 的结果显示为一个列表


Path

----

C:\Users\shipingzhong



PS C:\Users\shipingzhong>


image.png



PS C:\Users\shipingzhong> $location = Get-Location

PS C:\Users\shipingzhong> $location.Path   #通过 点 加上属性来访问属性的值

C:\Users\shipingzhong

PS C:\Users\shipingzhong>

image.png


PS C:\Users\shipingzhong> $location | gm   # gm 是 GET-Member 的别名



   TypeName:System.Management.Automation.PathInfo


Name         MemberType Definition

----         ---------- ----------

Equals       Method     bool Equals(System.Object obj)

GetHashCode  Method     int GetHashCode()

GetType      Method     type GetType()

ToString     Method     string ToString()

Drive        Property   System.Management.Automation.PSDriveInfo Drive {get;}

Path         Property   string Path {get;}

Provider     Property   System.Management.Automation.ProviderInfo Provider {get;}

ProviderPath Property   string ProviderPath {get;}



PS C:\Users\shipingzhong>


System.Management.Automation.PathInfo  是 .net 框架中的一个类

image.png

PS C:\Users\shipingzhong> $location.Drive        #它的Drive 属性,,,它含用关于底层驱动器目录的信息,,,它作为一个表格来显示,说明这个信息是一个对象的属性


Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation

----           ---------     --------- --------      ----                                               ---------------

C                 301.81         98.19 FileSystem    C:\                                             Users\shipingzhong



PS C:\Users\shipingzhong>

PowerShell中使用.NET

●完全访问.NET框架类

New-Object 创建对象

- New-Object <类型名> <构造函数参数>



PowerShell中使用.NET

访问类通过[<类型名>]

-例如: [System.Version]

类型转换

-例如: [System.Version] "1.0.3.4"

●访问类的静态元素

-类方法枚举,

-例如: [System.Version]::New0

(Ssystem.ConsoleColor::Red


https://learn.microsoft.com/de-de/dotnet/api/system.version?view=net-8.0  



PowerShell的类

●PowerShellv5.0-自定义类

新关键字

- Class

- Enum

- Static

一...

New-Object


image.png


PS C:\Windows\system32> $version = New-Object System.Version      #创建对象

PS C:\Windows\system32> $version


Major  Minor  Build  Revision

-----  -----  -----  --------

0      0      -1     -1



PS C:\Windows\system32>

image.pngPS C:\Windows\system32> $version=  New-Object System.Version 3,6       #创建对象

PS C:\Windows\system32> $version


Major  Minor  Build  Revision

-----  -----  -----  --------

3      6      -1     -1



PS C:\Windows\system32>

image.png

   

PS C:\Windows\system32> [System.Version]::New()    #创建对象


Major  Minor  Build  Revision

-----  -----  -----  --------

0      0      -1     -1



PS C:\Windows\system32>

image.png

PS C:\Windows\system32> [System.Version]::New(3,6)           #另一种方法来创建对象


Major  Minor  Build  Revision

-----  -----  -----  --------

3      6      -1     -1



PS C:\Windows\system32>

image.png

PS C:\Windows\system32> $version = New-Object System.Version 3,6

PS C:\Windows\system32> $version.ToString()            #对象的ToString 方法

3.6

PS C:\Windows\system32>


image.png

PS C:\Windows\system32>  [Int] 1.7            #类型转换 左方括号 类名 右方括号  加上参数

2

PS C:\Windows\system32>

image.png

PS C:\Windows\system32> [System.Version]"2.0.1.3"            #字符串转换为 .net类 (System.Version类) 的对象


Major  Minor  Build  Revision

-----  -----  -----  --------

2      0      1      3



PS C:\Windows\system32>



PowerShell的类

●PowerShellv5.0 →自定义类

●新关键字

- Class

- Enum .

-Static

-...

●New-Object



class <类名>

{

    <hidden | static>

    [<类型名>]$<属性名>


    <hidden| static>

    <构造函数名>(<参数>,...)

    {...}


    <hidden| static>

    [<返回类型>]<方法名>(<参数>,...) 

    {...}


}



class MyVersion
{
    [ Int]$Major
    [ Int ] $Minor
    [Int ]$Build
    [Int ]$Rev
    MyVersion()
    {
        $this.Major, $this.Minor, $this.Build, $this.Rev = 0
    }
    MyVersion( $Major, $Minor, $Build, $Rev)
    {
        $this.Major = $Major
        $this.Minor = $Minor
        $this.Build = $Build
        $this.Rev = $Rev
    }
    [String]ToString()
    {
        return ($this.Major , $this.Minor, $this.Build, $this.Rev) -join "."
    }

    [System.Version]Convert()
    {
        return [System.Version]$this.ToString()
    }
}
$myVersionA = New-Object MyVersion
$myVersionB = New-Object MyVersion 1, 2, 3, 4
$myVersionA. Minor      #0
$myVersionB.ToString()    #1.2.3.4


 

PowerShell枚举


enum VersionType {
    SoftwareVersion = 1
    HardwareVersion = 2
}
[VersionType]::SoftwareVersion

为什么结果是   SoftwareVersion 而不是 1  见  /node-admin/21549

课程概览

PowerShell入门

01|PowerShell编程基础

02| 对象与.NET

●对象

●类

●访问 .NET类

03 | Cmdlets与Pipeline


来自 https://www.bilibili.com/video/BV1yb411g7n7/?p=2&spm_id_from=pageDriver&vd_source=346847773d1f74962a4daab9ddf7f228  有大用



image.png

image.png


章节概览

Cmdlets 与Pipeline

Cmdlets

PowerShell命令/函数

Pipeline

● 连接Cmdlets

重要的Cmdlets与操作符

● ForEach, Where, Select, -Replace, -Join

脚本

● Windows版本字符串的格式化输出



什么是Cmdlets?

●可执行命令/PowerShell中的函数

●[<动词>-<名词>] [-<参数> <值>]

- Get-Content -Path 'C:\Logs\Log-040191.bxt'

- Set-ADAccountPassword -ldentity 'John' -NewPassword


#Get-Verb   #获取所有可用的动词列表。

image.png



image.png


Begin 里面的代码初始化

End  最终执行一次


Process 代码块里面的所有指令都将对每一个通过pipeliine接收的的对象执行一次,,,通过变量 $_ (美元符下划线 ) 来访问当前处理的元素



ForEach-Object

● 迭代对象

● -Begin, -Process, -End

● ForEach, For, %

'You',Me'| ForEach-Object { "Say $_" }

=>  Say You

    Say Me 

看到 4:20


来自  https://www.bilibili.com/video/BV1yb411g7n7?p=3 



https://www.bilibili.com/video/BV1Et4y1C7ZB/?spm_id_from=333.337.search-card.all.click&vd_source=346847773d1f74962a4daab9ddf7f228    有大用

https://search.bilibili.com/all?vt=68655503&keyword=powershell&search_source=1  

https://space.bilibili.com/297378187  

https://www.bilibili.com/video/BV1K54y1k77R/?spm_id_from=333.337.search-card.all.click 

 https://www.bilibili.com/video/BV1wH4y1v7jw?p=20&vd_source=346847773d1f74962a4daab9ddf7f228  




普通分类: