2.Powershell基础入门学习必备语法介绍

2022-09-29 14:51:15 浏览数 (1)

[TOC]

0x01 开始使用 PowerShell

Q: 在哪里可以找到 以及打开 PowerShell?

  • 1.在 Windows 10 上查找 PowerShell 的最简单方法是在搜索栏中键入”PowerShell”此时出现有64版本和32位; (Tips:建议运行 64 位版本的 PowerShell 除非出于特殊原因才运行 32 位版本)
  • 2.在 桌面 任意地方按住 Shift 右键 此时出现在此打开PowerShell窗口点击即可打开。
  • 3.启动PowerShell非常简单可以直接在CMD命令行之中键入以下命令PowerShell 或者 PowerShell_ISE

TIPS: 默认键入一个字符串PS会将它原样输出,如果该字符串是一个命令或者启动程序,在字符串前加‘&’可以执行命令,或者启动程序。

代码语言:javascript复制
PS C:UsersWeiyiGeek> "ls"
ls
PS C:UsersWeiyiGeek> &"ls"
#     目录: C:UsersWeiyiGeek
# Mode                LastWriteTime         Length Name
# ----                -------------         ------ ----
# d-----        2019/7/26      8:45                .android
# d-----        2019/8/19     17:27                .config

Q: 如何以管理员启动 PowerShell?

  • 1.在点击开始然后右键单击 Windows PowerShell 快捷方式,然后选择“以管理员身份运行”,如图 1-5 所示 。

以管理员身份运行

  • 2.如果以普通用户身份登录 Windows,系统将提示你输入凭据。 我将输入我的用户帐户的凭据,其身份是域用户和本地管理员如图 1-6 所示。

用户帐户的凭据

  • 3.在任务栏上的 PowerShell 快捷方式,右键打开属性并单击的“高级”,然后选中所表示的"以管理员身份运行"复选框,然后双击“确定”,以接受更改并退出这两个对话框。

PowerShell属性

Tips : 较新版本的 Windows PowerShell 作为 Windows Management Framework (WMF) 的一部分分发, 并且 WMF 的版决定了要使用哪个特定版本的 .NET Framework。


0x02 命名规则

描述: PowerShell 中的编译命令称为 cmdlet (发音为“command-let”(而不是 CMD-let))。mdlet 名称采用单数形式的"动词-名词、连字符"命令形式, 一般的动词与名称的首字母为大写(在编程中需要抱持良好开发的风格); 比如: PowerShell 具有Get-Process(正在运行哪些进程)、Stop-Process、Get-Service(检索服务及其状态的列表) 和 Stop-Service 一看就一目了然等命令。说白了原来您需要记忆100个命令现在只需要10个动词和 10 个名词就能搞定, PS 利用这些相似之处减少了解和使用 cmdlet 时需要知道的不同名称的数量。

Cmdlet 使用标准参数以及命令名称

  • 1.PS标准化参数分隔符,参数名称前面始终带有“-”
    • Get-Command -Name Clear-Host
  • 2.帮助参数 (?):在任何 cmdlet 上指定 -? 参数时,PowerShell 将显示该 cmdlet 的帮助。
    • Get-Service -?
  • 3.通用参数: 参数由 PowerShell 引擎控制, 通用参数的行为方式始终相同。
    • 通用参数: WhatIf、Confirm、Verbose、Debug、Warn、ErrorAction、ErrorVariable、OutVariable 和 OutBuffer
  • 4.建议的参数名称:PowerShell 核心 cmdlet 使用标准名称
    • 指示计算机的参数的建议名称是 ComputerName,而不是 Server、Host、System、Node 或其他常见的备选单词。 其他重要的建议参数名称是 Force、Exclude、Include、PassThru、Path 和 CaseSensitive。
  • 5.PS支持别名以通过备用名称引用命令(Get-Alias获取别名),别名将新名称与其他命令关联。
    • 例如 PS 具有名为 Clear-Host 的内部函数,该函数清空输出窗口。可以在命令提示符下键入cls 或 clear 别名, PS解释这些别名并运行Clear-Host 函数
  • 6.解释标准别名: PS 别名尝试兼顾清晰度和简洁性(可以进行缩写-进截取动词第一个字母和名词的前两个字母)
    • 比如: 熟悉 PowerShell 别名后就很容易猜到 sal 别名指的是 Set-Alias , 又比如gcm等同于Get-Command

PS 支持几种其他类型的命令:

  • 别名: Alias
  • 功能: Function
  • 脚本: Script
  • 命令: Cmdlet

Tips : PowerShell 命令是一个通用术语,通常用于指代 PowerShell 中任何类型的命令,不管是 cmdlet、函数还是别名。

  • 1.在 PS 6 之前 sc 是 Set-Content cmdlet 的别名, 因此若要在 ps6 之前的 PowerShell 版本中运行 sc.exe 命令,必须使用包含文件扩展名 exe的完整文件名 sc.exe。
  • 2.外部可执行文件或具有已注册的文件类型处理程序的文件也被归类为命令。

0x03 基础核心 Cmdlet 命令

描述:Windows PowerShell 引入了 cmdlet(读作command-let)的概念,它是内置于 Shell 的简单的单一函数命令行工具。 PS 中包括一百多个基本核心 cmdlet 你可以编写自己的 cmdlet 并与其他用户共享。

PowerShell 中的几个基础核心 Cmdlet (开始学习PS编程前必备):

  • Get-Host (别名Host) 、$PSVersionTable
  • Get-Command
  • Get-Help (别名Help) 、Update-Help
  • Get-Alias 、Set-Aliase
  • Get-PSProvider

Get-Host 命令 - PS 版本查看

描述: 可以采用变量或者host命令的方式进行查看。

代码语言:javascript复制
# 方式1.查看PS的主此版本
PS C:Program Files> $PSVersionTable
  # Name                           Value
  # ----                           -----
  # PSVersion                      5.1.19041.610
  # PSEdition                      Desktop
  # PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
  # BuildVersion                   10.0.19041.610
  # CLRVersion                     4.0.30319.42000
  # WSManStackVersion              3.0
  # PSRemotingProtocolVersion      2.3
  # SerializationVersion           1.1.0.1

PS C:Program Files> $PSVersionTable.PSVersion
  # Major  Minor  Build  Revision
  # -----  -----  -----  --------
  # 5      1      19041  610

# 方式2.采用host得方式
PS C:Program Files> Get-Host
PS C:Program Files> Host
Name             : ConsoleHost 
Version          : 5.1.19041.610 # 当前版本
InstanceId       : 3af22fd4-3ade-4c0d-ab67-7c77cf08223a
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : zh-CN
CurrentUICulture : zh-CN
PrivateData      : Microsoft.PowerShell.ConsoleHost ConsoleColorProxy
DebuggerEnabled  : True
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

Get-Help 命令 - PS命令帮助

描述: Get-Help 是多用途命令, 其作用是帮助你了解找到CmdLet 命令后如何使用它们, 如果使用的是 help 函数man 别名(而不是 Get-Help cmdlet)则不会收到此提示Do you want to run Update-Help?

Tips : Get-Help 也可用于帮助查找 PowerShell 相关命令,但与 Get-Command 相比它采用不同且较为间接的方式

语法参数:

代码语言:javascript复制
# SYNTAX
Get-Help [[-Name] <string>]  [<CommonParameters>]

# OPTIONS
-Category <string[]>
-Component <string[]>
-Functionality <string[]>
-Name <string>
-Parameter <string>
-Path <string>
-Role <string[]>
<CommonParameters>

基础实例:

代码语言:javascript复制
# 1.例如下面的命令显示 Get-Service cmdlet 的输出对象成员的相关信息。
Get-help Get-service
Get-Help Get-Service -Online #若要联机查看此 cmdlet 的帮助主题,转到 https://go.microsoft.com/fwlink/?LinkID=113332
#备注:Get-Help 在此计算机上找不到该 cmdlet 的帮助文件它仅显示部分帮助。


# 2.若要在会话中获取所有 cmdlet 帮助文章的列表请键入
Get-Help -Category Cmdlet
Get-Help Get-ChildItem -Detailed   # 若要显示详细信息,请使用Detailed 参数
Get-Help Get-ChildItem -Full       # 若要显示帮助文章中的所有内容,请使用 Full 参数
Get-Help Get-ChildItem -Parameter *  # 若要获取有关 cmdlet 的参数的详细帮助,请使用的 Parameter 参数

# 3.获取Cmdlet命令显示帮助文章中的示例(实际显示名称、别名、备注)
Get-Help Get-ChildItem -Examples

# 4.获取有关脚本和函数的帮助
Get-Help c:ps-testTestScript.ps1 # 但是在运行 Get-Help * 时不会显示函数和脚本的帮助

# 5.单独的可搜索窗口中打开帮助主题
Get-Help -Name Get-Command -ShowWindow 

# 6.如果只找到一个结果,将显示帮助主题本身,而不显示命令列表。
Get-Help *hotfix*

WeiyiGeek.在窗口中打开帮助主题

Tips : 例如,无法同时指定 Full 和 Detailed 参数,因为它们位于不同的参数集中 。

Tips : 使用 Get-Help 搜索 PowerShell 命令时,使用更宽泛而不是更具体的搜索信息,例如 Get-Help process

Update-Help 命令 - PS命令更新帮助

描述: Update-Help cmdlet 用于更新帮助主题,建议定期更新帮助系统,因为可能会不时更新帮助内容。

Tips : 默认情况下,它需要访问 Internet,并且你需要以管理员身份运行提升的 PowerShell。

基础实例:

代码语言:javascript复制
# 1.更新系统中所有命令的文档
Update-Help

# 2.更新指定cmdlet命令帮助文档
Update-Help Get-service

WeiyiGeek.Update-Help

Tips : 如果计算机无法访问 Internet,则可以在另一台可以访问互联网的机器上使用 Save-Help cmdlet,首先将更新后的帮助信息保存到网络上的文件共享中,然后使用 Update-Help 的 SourcePath 参数为帮助主题指定此网络位置。

Help 函数 与 Man 命令帮助

描述:若要一次显示每篇帮助文章的一页,请使用 help 函数或其别名 man

基础实例:

代码语言:javascript复制
# 1.例如,若要显示 Get-ChildItem cmdlet 的帮助信息
man Get-ChildItem
help Get-ChildItem

# 2.最后两个选项每次返回一页以外,结果都一样
help -Name Get-Help -Full
help Get-Help -Full

# 3.如果需要在单独的窗口中显示帮助,建议使用 Online 参数或 Full 参数,并通过管道将结果传递给 Out-GridView;
help Get-Command -Full | Out-GridView


# 4.对 Name 参数使用星号 (*) 通配符, 指定搜索命令时使用的字词作为 Name 参数的值
PS C:UsersWeiyiGeek> help *process*
PS C:UsersWeiyiGeek> help *-process
  # Name                              Category  Module                    Synopsis
  # ----                              --------  ------                    --------
  # Debug-Process                     Cmdlet    Microsoft.PowerShell.M... ...
  # Get-Process                       Cmdlet    Microsoft.PowerShell.M... ...
  # Start-Process                     Cmdlet    Microsoft.PowerShell.M... ...
  # Stop-Process                      Cmdlet    Microsoft.PowerShell.M... ...
  # Wait-Process                      Cmdlet    Microsoft.PowerShell.M... ...
PS C:UsersWeiyiGeek> help get-*

WeiyiGeek.Out-GridView

Tips : 使用 Help 函数时,可使用空格键显示下一页内容,可使用 Ctrl C 取消在 PowerShell 控制台中运行的命令。

Tips : 除非将 通配符添加到 `prcess` 的开头或开头和结尾,否则该命令不返回任何结果。

Tips : 即 PowerShell 中的 Help 不是只能找到具有帮助主题的命令,例如help *more*其没有帮助主题,但 PowerShell 中的 Help 系统仍可以找到它。但它只找到一个匹配项,并返回了基本的语法信息,如果命令没有帮助主题,就会看到这些信息

Get-Command 命令 - 查询系统上的PS命令

描述:Get-Command 的作用是帮助查找命令,我们可以采用通配符进行匹配查看指定cmdlet命令或者运行不带任何参数的 Get-Command 会返回系统上所有命令的列表。

语法参数:

代码语言:javascript复制
# 别名
  gcm

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

# 参数
  -All
  -ArgumentList <Object[]>
  -CommandType <CommandTypes>
  -FullyQualifiedModule <ModuleSpecification[]>
  -ListImported
  -Module <string[]>
  -Name <string[]>
  -Noun <string[]>
  -ParameterName <string[]>
  -ParameterType <PSTypeName[]>
  -ShowCommandInfo
  -Syntax
  -TotalCount <int>
  -Verb <string[]>

# 输入
  System.String[]
  Microsoft.PowerShell.Commands.ModuleSpecification[]
  System.Management.Automation.CommandTypes
  System.Int32
  System.Management.Automation.SwitchParameter
  System.Object[]

# 输出
  System.Management.Automation.AliasInfo
  System.Management.Automation.ApplicationInfo
  System.Management.Automation.FunctionInfo
  System.Management.Automation.CmdletInfo
  System.Management.Automation.ExternalScriptInfo
  System.Management.Automation.FilterInfo
  System.Management.Automation.WorkflowInfo
  System.String
  System.Management.Automation.PSObject

基础实例:

代码语言:javascript复制
# 1.查看指定的Cmdlet命令/Function的信息
PS> Get-Command -Name Clear-Host
  # CommandType     Name                                               Version    Source
  # -----------     ----                                               -------    ------
  # Function        Clear-Host


# 2.例如若要查找用于查看和更改 Windows 服务的 cmdlet 列表,请键入:
PS> Get-Command *-Service
PS> Get-Command -Name *service*
PS> Get-Command -Noun Service #使用 Noun 参数查看将对同一类型的对象产生影响的命令系列,效果同上|
  # CommandType     Name                                               Version    Source
  # -----------     ----                                               -------    ------
  # Cmdlet          Get-Service                                        3.1.0.0    Microsoft.PowerShell.Management
  # Cmdlet          New-Service                                        3.1.0.0    Microsoft.PowerShell.Management
  # ...

# 3.例如若要查看使用动词 Get 的所有 cmdlet
PS> Get-Command -Verb Get # Verb 参数列出包含特定动词的所有命令(以Get开头的Cmdlet命令)
  # CommandType     Name                                               Version    Source
  # -----------     ----                                               -------    ------
  # Alias           Get-AppPackage                                     2.0.1.0    Appx
  # Alias           Get-AppPackageDefaultVolume                        2.0.1.0    Appx


# 4.获取有关命令的信息返回每个 cmdlet 语法的 Syntax 参数
PS> Get-Command Get-Help -Syntax
  # Get-Help [[-Name] <string>] [-Path <string>] [-Category <string[]>] [-Component <string[]>] [-Functionality <string[]>] [-Role <string[]>] [-Full] [<CommonParameters>]


# 5.使用 CommandType 参数可以获取其他类型的本机命令
PS> Get-Command -Name *service* -CommandType Cmdlet, Function, Alias, Script
  # CommandType     Name                                               Version    Source
  # -----------     ----                                               -------    ------
  # Function        Get-NetFirewallServiceFilter                       2.0.0.0    NetSecurity
  # Function        Set-NetFirewallServiceFilter                       2.0.0.0    NetSecurity
  # Cmdlet          Get-Service                                        3.1.0.0    Microsoft.PowerShell.Management
  # Cmdlet          New-Service                                        3.1.0.0    Microsoft.PowerShell.
  .....
  # Cmdlet          Stop-Service                                       3.1.0.0    Microsoft.PowerShell.Management
  # Cmdlet          Suspend-Service                                    3.1.0.0    Microsoft.PowerShell.Management

Tips : 更好的选择是使用 Verb 或/和 Noun 参数,因为只有 PowerShell 命令同时具有谓词和名词 。

Get-Alias 命令 - 获取别名

描述: Get-Alias cmdlet 显示与别名关联的本机 PowerShell 命令的真实名称。

PS 别名表:

代码语言:javascript复制
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                                                                                   
Alias           clear -> Clear-Host                                                                                    
Alias           clhy -> Clear-History                                                                                  
Alias           cli -> Clear-Item                                                                                      
Alias           clp -> Clear-ItemProperty                                                                              
Alias           cls -> Clear-Host                                                                                      
Alias           clv -> Clear-Variable                                                                                  
Alias           cnsn -> Connect-PSSession                                                                              
Alias           compare -> Compare-Object                                                                              
Alias           copy -> Copy-Item                                                                                      
Alias           cp -> Copy-Item                                                                                        
Alias           cpi -> Copy-Item                                                                                       
Alias           cpp -> Copy-ItemProperty                                                                               
Alias           curl -> Invoke-WebRequest                                                                              
Alias           cvpa -> Convert-Path                                                                                   
Alias           dbp -> Disable-PSBreakpoint                                                                            
Alias           del -> Remove-Item                                                                                     
Alias           diff -> Compare-Object                                                                                 
Alias           dir -> Get-ChildItem                                                                                   
Alias           dnsn -> Disconnect-PSSession                                                                           
Alias           ebp -> Enable-PSBreakpoint                                                                             
Alias           echo -> Write-Output                                                                                   
Alias           epal -> Export-Alias                                                                                   
Alias           epcsv -> Export-Csv                                                                                    
Alias           epsn -> Export-PSSession                                                                               
Alias           erase -> Remove-Item                                                                                   
Alias           etsn -> Enter-PSSession                                                                                
Alias           exsn -> Exit-PSSession                                                                                 
Alias           fc -> Format-Custom                                                                                    
Alias           fhx -> Format-Hex                                  3.1.0.0    Microsoft.PowerShell.Utility             
Alias           fl -> Format-List                                                                                      
Alias           foreach -> ForEach-Object                                                                              
Alias           ft -> Format-Table                                                                                     
Alias           fw -> Format-Wide                                                                                      
Alias           gal -> Get-Alias                                                                                       
Alias           gbp -> Get-PSBreakpoint                                                                                
Alias           gc -> Get-Content                                                                                      
Alias           gcb -> Get-Clipboard                               3.1.0.0    Microsoft.PowerShell.Management          
Alias           gci -> Get-ChildItem                                                                                   
Alias           gcm -> Get-Command                                                                                     
Alias           gcs -> Get-PSCallStack                                                                                 
Alias           gdr -> Get-PSDrive                                                                                     
Alias           ghy -> Get-History                                                                                     
Alias           gi -> Get-Item                                                                                         
Alias           gin -> Get-ComputerInfo                            3.1.0.0    Microsoft.PowerShell.Management          
Alias           gjb -> Get-Job                                                                                         
Alias           gl -> Get-Location                                                                                     
Alias           gm -> Get-Member                                                                                       
Alias           gmo -> Get-Module                                                                                      
Alias           gp -> Get-ItemProperty                                                                                 
Alias           gps -> Get-Process                                                                                     
Alias           gpv -> Get-ItemPropertyValue                                                                           
Alias           group -> Group-Object                                                                                  
Alias           gsn -> Get-PSSession                                                                                   
Alias           gsnp -> Get-PSSnapin                                                                                   
Alias           gsv -> Get-Service                                                                                     
Alias           gtz -> Get-TimeZone                                3.1.0.0    Microsoft.PowerShell.Management          
Alias           gu -> Get-Unique                                                                                       
Alias           gv -> Get-Variable                                                                                     
Alias           gwmi -> Get-WmiObject                                                                                  
Alias           h -> Get-History                                                                                       
Alias           history -> Get-History                                                                                 
Alias           icm -> Invoke-Command                                                                                  
Alias           iex -> Invoke-Expression                                                                               
Alias           ihy -> Invoke-History                                                                                  
Alias           ii -> Invoke-Item                                                                                      
Alias           ipal -> Import-Alias                                                                                   
Alias           ipcsv -> Import-Csv                                                                                    
Alias           ipmo -> Import-Module                                                                                  
Alias           ipsn -> Import-PSSession                                                                               
Alias           irm -> Invoke-RestMethod                                                                               
Alias           ise -> powershell_ise.exe                                                                              
Alias           iwmi -> Invoke-WmiMethod                                                                               
Alias           iwr -> Invoke-WebRequest                                                                               
Alias           kill -> Stop-Process                                                                                   
Alias           lp -> Out-Printer                                                                                      
Alias           ls -> Get-ChildItem                                                                                    
Alias           man -> help                                                                                            
Alias           md -> mkdir                                                                                            
Alias           measure -> Measure-Object                                                                              
Alias           mi -> Move-Item                                                                                        
Alias           mount -> New-PSDrive                                                                                   
Alias           move -> Move-Item                                                                                      
Alias           mp -> Move-ItemProperty                                                                                
Alias           mv -> Move-Item                                                                                        
Alias           nal -> New-Alias                                                                                       
Alias           ndr -> New-PSDrive                                                                                     
Alias           ni -> New-Item                                                                                         
Alias           nmo -> New-Module                                                                                      
Alias           npssc -> New-PSSessionConfigurationFile                                                                
Alias           nsn -> New-PSSession                                                                                   
Alias           nv -> New-Variable                                                                                     
Alias           ogv -> Out-GridView                                                                                    
Alias           oh -> Out-Host                                                                                         
Alias           popd -> Pop-Location                                                                                   
Alias           ps -> Get-Process                                                                                      
Alias           pushd -> Push-Location                                                                                 
Alias           pwd -> Get-Location                                                                                    
Alias           r -> Invoke-History                                                                                    
Alias           rbp -> Remove-PSBreakpoint                                                                             
Alias           rcjb -> Receive-Job                                                                                    
Alias           rcsn -> Receive-PSSession                                                                              
Alias           rd -> Remove-Item                                                                                      
Alias           rdr -> Remove-PSDrive                                                                                  
Alias           ren -> Rename-Item                                                                                     
Alias           ri -> Remove-Item                                                                                      
Alias           rjb -> Remove-Job                                                                                      
Alias           rm -> Remove-Item                                                                                      
Alias           rmdir -> Remove-Item                                                                                   
Alias           rmo -> Remove-Module                                                                                   
Alias           rni -> Rename-Item                                                                                     
Alias           rnp -> Rename-ItemProperty                                                                             
Alias           rp -> Remove-ItemProperty                                                                              
Alias           rsn -> Remove-PSSession                                                                                
Alias           rsnp -> Remove-PSSnapin                                                                                
Alias           rujb -> Resume-Job                                                                                     
Alias           rv -> Remove-Variable                                                                                  
Alias           rvpa -> Resolve-Path                                                                                   
Alias           rwmi -> Remove-WmiObject                                                                               
Alias           sajb -> Start-Job                                                                                      
Alias           sal -> Set-Alias                                                                                       
Alias           saps -> Start-Process                                                                                  
Alias           sasv -> Start-Service                                                                                  
Alias           sbp -> Set-PSBreakpoint                                                                                
Alias           sc -> Set-Content                                                                                      
Alias           scb -> Set-Clipboard                               3.1.0.0    Microsoft.PowerShell.Management          
Alias           select -> Select-Object                                                                                
Alias           set -> Set-Variable                                                                                    
Alias           shcm -> Show-Command                                                                                   
Alias           si -> Set-Item                                                                                         
Alias           sl -> Set-Location                                                                                     
Alias           sleep -> Start-Sleep                                                                                   
Alias           sls -> Select-String                                                                                   
Alias           sort -> Sort-Object                                                                                    
Alias           sp -> Set-ItemProperty                                                                                 
Alias           spjb -> Stop-Job                                                                                       
Alias           spps -> Stop-Process                                                                                   
Alias           spsv -> Stop-Service                                                                                   
Alias           start -> Start-Process                                                                                 
Alias           stz -> Set-TimeZone                                3.1.0.0    Microsoft.PowerShell.Management          
Alias           sujb -> Suspend-Job                                                                                    
Alias           sv -> Set-Variable                                                                                     
Alias           swmi -> Set-WmiInstance                                                                                
Alias           tee -> Tee-Object                                                                                      
Alias           trcm -> Trace-Command                                                                                  
Alias           type -> Get-Content                                                                                    
Alias           wget -> Invoke-WebRequest                                                                              
Alias           where -> Where-Object                                                                                  
Alias           wjb -> Wait-Job                                                                                        
Alias           write -> Write-Output

基础示例:

代码语言:javascript复制
# 1.获取别名的真实命令
PS > Get-Alias cat
  # CommandType     Name                                               Version    Source
  # -----------     ----                                               -------    ------
  # Alias           cat -> Get-Content
PS > Get-Alias cls, gcm, gm
  # Alias           cls -> Clear-Host
  # Alias           gcm -> Get-Command
  # Alias           gm -> Get-Member


# 2.如果要查找指定Cmdlet命令的别名,需要使用 Definition 参数。
PS > Get-Alias -Definition Get-Command, Get-Member
  # CommandType     Name                                               Version    Source
  # -----------     ----                                               -------    ------
  # Alias           gcm -> Get-Command
  # Alias           gm -> Get-Member

WeiyiGeek.Get-Alias

Set-Aliase 命令 - 设置别名

描述:可以使用 Set-Alias cmdlet 创建自己的别名。

代码语言:javascript复制
#1.PS设置别名样式
Set-Alias -Name gi -Value Get-Item

注意: PS内置别名无法被修改,否则会报错 Set-Alias :别名不可写入,因为别名 gi 为只读别名或常量,无法写入。

Get-PSProvider 命令 - 内置程序

描述: PowerShell 中的提供程序是一种允许文件系统访问数据存储的接口, 即PS中提供了许多内置程序可以采用Get-PSProvider命令查看。

Tips : 命令输出存在用于注册表、别名、环境变量、文件系统、函数、变量、证书和 WSMan 的内置提供程序,驱动器详细一览。

代码语言:javascript复制
Alias 	      管理别名           	  Dir Alias:  $alias:Dir
Environment 	访问环境变量的提供者  	Dir env:  $env:windir
Function 	    列出所有定义的函数, 	  Dir function:  $function:tabexpansion
FileSystem 	  访问驱动器,目录和文件 	Dir c:  $(c:autoexec.bat)
Registry 	    访问Windows注册表         	Dir variable:  $variable:pshome
Variable 	    管理定义在控制台中的所有变量 	Dir variable:  $variable:pshoMe
Certificate 	访问证书存储区的所有证书    	Dir cert:    Dir CurrentUserTrustedPublisher

基础实例:

代码语言:javascript复制
# 1.此命令显示所有可用Windows PowerShell提供程序的列表。
Get-PSProvider
  # Name                 Capabilities                                      Drives
  # ----                 ------------                                      ------
  # Registry             ShouldProcess, Transactions                       {HKLM, HKCU}
  # Alias                ShouldProcess                                     {Alias}
  # Environment          ShouldProcess                                     {Env}
  # FileSystem           Filter, ShouldProcess, Credentials                {C, D, E, F...}
  # Function             ShouldProcess                                     {Function}
  # Variable             ShouldProcess                                     {Variable}
  # Certificate          ShouldProcess                                     {Cert}
  # WSMan                Credentials                                       {WSMan}

# 2.显示以指定字母开头的所有Windows PowerShell提供程序的列表
Get-PSProvider f*, r* | Format-List
  # Name             : FileSystem
  # Drives           : {C, D, E, F...}
  # Path             :
  # Home             : C:UsersWeiyiGeek
  # Description      :
  # Capabilities     : Filter, ShouldProcess, Credentials
  # ImplementingType : Microsoft.PowerShell.Commands.FileSystemProvider


# 3.查找将提供程序添加到会话的管理单元或模块
Get-PSProvider | Format-Table name, module, pssnapin -auto
  # Name        Module       PSSnapIn
  # ----        ------       --------
  # Test        TestModule
  # WSMan                    Microsoft.WSMan.Management
  # ....
  # PS C:> Get-PSProvider | Where {$_.pssnapin -eq "Microsoft.PowerShell.Security"}

# 4.第三方模块(例如 Active Directory PowerShell 模块和 SQL Server PowerShell 模块)都添加了自己的 PowerShell 提供程序和 PSDrive。
# 例如: 导入 Active Directory 和 SQL Server PowerShell 模块。
Import-Module -Name ActiveDirectory, SQLServer
# 检查以确定是否添加了任何其他 PowerShell 提供程序。
Get-PSProvider

# 5.查看那些注册表驱动器已经被注册表提供程序被使用
Get-PSDrive -PSProvider Registry
  # Name           Used (GB)     Free (GB) Provider      Root               CurrentLocation
  # ----           ---------     --------- --------      ----               ---------------
  # HKCU                                   Registry      HKEY_CURRENT_USER
  # HKLM                                   Registry      HKEY_LOCAL_MACHINE
# - 注册表包含的根节点远不止两个我们可以自己创建
New-PSDrive -name HKCR -PSProvider registry -root HKLM:SOFTWAREClasses
  # Name           Used (GB)     Free (GB) Provider      Root                                   CurrentLocation
  # ----           ---------     --------- --------      ----                                   ---------------
  # HKCR                                   Registry      HKEY_LOCAL_MACHINESOFTWAREClasses                   
  # HKCU                                   Registry      HKEY_CURRENT_USER                                     
  # HKLM                                   Registry      HKEY_LOCAL_MACHINE

0x04 PS 脚本执行策略

描述: PowerShell的执行策略是一项安全功能有助于防止执行防止用户无意间运行脚本或者恶意脚本,可控制PS加载配置文件和运行脚本的条件。

Tips : 本地计算机和当前用户的执行策略存储在注册表中,您无需在PowerShell配置文件中设置执行策略,并且特定会话的执行策略仅存储在内存中,并且在关闭会话时丢失。

当前 Windows 操作系统的默认执行策略。

代码语言:javascript复制
Windows 操作系统版本	默认执行策略
Server 2019	           远程签名
Server 2016	           远程签名
Windows 10	           受限

PowerShell 管理执行策略

  • Get-ExecutionPolicy :要获取影响当前会话的所有执行策略;
  • Set-ExecutionPolicy :设置当前会话的执行策略;

执行策略列表(List Execution Policoes):

  • AllSigned: 签名认证,要求所有脚本和配置文件均由受信任的发布者签名,包括您在本地计算机上编写的脚本。
  • Bypass: 没有任何阻止也没有警告或提示;此执行策略设计用于将PowerShell脚本内置到更大的应用程序中的配置,或者用于以PowerShell为具有自己的安全模型的程序的基础的配置。
  • Default: 设置默认执行策略,WindowsPC端默认Restricted ,Windows服务器默认策略RemoteSigned
  • RemoteSigned: 服务器默认执行策略。脚本可以进行执行,需要从可信任的发布者处获得从互联网上下载的脚本和配置文件的数字签名,可能会运行来自Internet以外来源和已签名但恶意的脚本的未签名脚本。
  • Restricted: 严格模式,Windows客户端计算机的默认执行策略。允许使用单个命令但不允许使用脚本。阻止运行所有脚本文件,包括格式和配置文件.ps1xml , 模块脚本 .psm1 , PS配置文件.ps1;
  • Unrestricted: 未签名的脚本可以运行。有运行恶意脚本的风险。 在运行非本地Intranet区域中的脚本和配置文件之前警告用户

执行策略范围:

  • MachinePolicy: 由组策略为计算机的所有用户设置。
  • UserPolicy: 由组策略为计算机的当前用户设置。
  • Process: 进程作用域仅影响当前的PowerShell会话。
  • CurrentUser: 执行策略仅影响当前用户。它存储在HKEY_CURRENT_USER注册表子项中。
  • LocalMachine: 执行策略会影响当前计算机上的所有用户。它存储在HKEY_LOCAL_MACHINE注册表子项中

基础实例:

代码语言:javascript复制
#1.获取查看当前会话用户(以及计算机执行策略范围)执行策略权限
PS C:WeiyiGeek> Get-ExecutionPolicy
Restricted

PS C:WeiyiGeek> Get-ExecutionPolicy -list
#         Scope ExecutionPolicy
#         ----- ---------------
# MachinePolicy       Undefined
#    UserPolicy       Undefined
#       Process       Undefined
#   CurrentUser       Undefined
#  LocalMachine    Unrestricted


# 2.获取指定范围执行权限
PS C:WeiyiGeek> Get-ExecutionPolicy -Scope CurrentUser
Undefined


# 3.将 PowerShell 执行策略更改为远程签名。
PS C:WeiyiGeek> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned


# 4.更改执行政策更改立即生效,无需重新启动PowerShell。
PS C:WeiyiGeek> Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
PS C:WeiyiGeek> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser


# 5.由于已将执行策略设置为 RemoteSigned Stop-TimeService.ps1 脚本将正常运行。
echo "Get-Service -Name W32Time | Stop-Service -PassThru" > Stop-TimeService.ps1
.Stop-TimeService.ps1

WeiyiGeek.ExecutionPolicy

Tips : 在Windows各版本机器下必须以管理员权限运行Powershell采用运行上述的cmdlet;


0x05 PS 术语表

术语

定义

二进制模块

一个 PS 模块其根模块是一个二进制模块文件 (.dll)。 二进制模块可能包含或不包含模块清单。

通用参数

一个参数它由 PS 引擎添加到所有 cmdlet、高级函数和工作流中。

使用点获取来源

在 PS 中若要启动一个命令,可在该命令前键入一个点和一个空格。 采用点获取其来源的命令运行在当前范围而非新范围中。 命令创建的任何变量、别名、函数或驱动器都创建于当前范围,并在命令完成时提供给用户。

动态模块

一个仅存在于内存中的模块。 New-Module 和 Import-PSSession cmdlet 会创建动态模块。

动态参数

在某些情况下添加到 PS cmdlet、函数或脚本的一个参数。 Cmdlet、函数、提供程序和脚本可以添加动态参数。

格式设置文件

一个 PS XML 文件,它具有 .format.ps1xml 扩展名且定义 PS 如何基于对象的 .NET Framework 类型来显示对象。

全局会话状态

包含 PS 会话用户可访问的数据的会话状态。

主机

PS 引擎用于与用户进行通信的接口。 例如,主机指定 PS 和用户之间处理提示的方式。

主机应用程序

将 PS 引擎加载到其进程中并使用它执行操作的程序。

输入处理方法

Cmdlet 可用于处理其以输入形式所接收的记录的一种方法。 输入处理方法包括 BeginProcessing 方法、ProcessRecord 方法、EndProcessing 方法以及 StopProcessing 方法。

清单模块

一个 PS 模块,它具有一个清单且其 RootModule 项为空。

模块清单

一个 PS 数据文件 (.psd1),描述模块的内容并控制模块的处理方式。

模块会话状态

包含 PS 模块公用和专用数据的会话状态。 此会话状态中的私有数据不可供 PS 会话的用户使用。

非终止错误

不能阻止 PS 继续处理命令的错误。

名词

在 PS cmdlet 名称中连字符后面的单词。 名词描述了 cmdlet 在其上进行操作的资源。

参数集

可用于相同的命令中以执行特定操作的一组参数。

在 PS 中,将前一个命令的结果作为输入发送到管道中的下一个命令。

管道

一系列由管道运算符 (`

`) (ASCII 124) 连接的命令。 每个管道运算符将前一个命令的结果作为输入发送到下一个命令。

PSSession

一种由用户创建、管理和关闭的 PS 会话类型。

根模块

在模块清单的 RootModule 项中指定的模块。

运行空间

在 PS 中,在其中执行管道中每个命令的操作环境。

脚本块

在 PS 编程语言中,可作为单个单元使用的语句或表达式的一个集合。 脚本块可以接受参数并返回值。

脚本模块

一个 PS 模块,其根模块是一个脚本模块文件 (.psm1);脚本模块可能包含或不包含模块清单。

脚本模块文件

一个包含 PS 脚本的文件。 该脚本定义脚本模块导出的成员。 脚本模块文件具有 .psm1 文件扩展名。

shell

用于将命令传递到操作系统的命令解释器。

开关参数

一个不带实参的形参。

终止错误

阻止 PS 处理命令的错误。

事务

一个工作的原子单元,必须将事务中的工作作为一个整体来完成;如果该事务的任何部分失败,那么整个事务都会失败。

类型文件

一个 PS XML 文件,它具有.ps1xml 扩展名且扩展 PS 中 Microsoft.NET Framework 类型的属性。

动作

在 PS cmdlet 名称中连字符前面的单词,它说明该 cmdlet 将执行的操作。

PS

为IT管理员提供全面控制以及实现系统管理任务自动化的一个命令行 Shell 和基于任务的脚本技术;

PS命令

导致操作被执行的管道中的元素。PS 命令可以在键盘上输入或以编程方式调用。

PS数据文件

具有 .psd1 文件扩展名的文本文件。 PS 将数据文件用于多种用途,例如存储模块清单数据和存储用于脚本国际化的已翻译的字符串。

PS驱动器

一个提供直接访问数据存储的虚拟驱动器。 它可以由 PS 提供程序定义或是在命令行中创建。 在命令行创建的驱动器是特定于会话的驱动器,并在会话关闭时丢失。

PS集成脚本环境 (ISE)

一个 PS 主机应用程序,使你能够运行命令并在友好、语法着色、符合 Unicode 的环境中编写、测试和调试脚本。

PS模块

一个独立的可重用单元,使你能够对 PS 代码进行分区、组织和抽象化。 模块可以包含 cmdlet、提供程序、函数、变量和其他可作为单个单元导入的资源类型。

PS提供程序

一个基于 Microsoft .NET Framework 的程序,用于使专用数据存储中的数据在 PS 中可用,以便你可以查看和管理它。

PS脚本

以 PS 语言编写的脚本。

PS脚本文件

具有 .ps1 扩展名且包含以 PS 语言编写的脚本的文件。

PS管理单元

定义一组可以添加到 PS 环境中的 cmdlet、提供程序和 Microsoft .NET Framework 的资源。

PS工作流程

工作流是一系列经过编程的连接步骤,会执行长期运行的任务,或是需要在多个设备或托管节点之间协调多个步骤。 PS工作流使IT专业人员和开发人员可以按工作流的形式创作多设备管理活动序列,或工作流中的单个任务。 PS 工作流使你能够调整 PS 脚本和 XAML 并将其作为工作流运行。


0x06 学习建议

描述: 本章了解了PS的简单使用,以及遇到了没见过或者是不会使用的cmdlet命令,我们应该如何的获取我们想要得到的信息或者说是语法实例,但是对于学习PS编程来说语法其实难而难点在于需要记得PS常用cmdlet的作用及其使用技巧,所以为了更好的学习PS总结了如下建议。

0.多多查看参考Microsoft官网中PowerShell脚本示例。

1.每天学习一个 PowerShell 命令。

代码语言:javascript复制
Get-Command | Get-Random | Get-Help -Full

2.记录某些cmdlet命令联合使用的示例并加以说明以便后续查阅。

0 人点赞