首页 > 系统相关 >(3)Powershell基础知识(一)

(3)Powershell基础知识(一)

时间:2024-01-17 16:11:59浏览次数:25  
标签:Service Get 0.0 PowerShell 命令 基础知识 Powershell

(3)Powershell基础知识(一)

上节介绍了Windows自带的Powershell开发工具:命令行行窗体和集成开发环境ISE的启动及一些配置注意事项,具体细节使劲戳Powershell开发工具

这一节介绍Powershell的基础知识,包含以下知识点

  1. Powershell的一些特性

  2. 理解Powershell中的一些重要概念

  3. 理解Powershell中命令的命名规范

  4. 总结


Powershell的一些特性

Powershell对命令行和脚本环境添加了许多新的功能,以此来改善Powershell的管理和脚本脚本交互能力,想对于其他的命令脚本,Powershell有以下特性。

  • 可发现特性

可发现特性是指,Powershell可以轻松发现(找出)与执行具体操作有关的命令。比如现在想对Window服务,即对service进行操作(停止或是启动服务等其它操作),可以通过以下命令来查找与操作service有关的命令。

PS C:\WINDOWS\system32> Get-Command *service

CommandType     Name                                               Version    Source                                                                 
-----------     ----                                               -------    ------                                                                 
Cmdlet          Get-Service                                        3.1.0.0    Microsoft.PowerShell.Management                                        
Cmdlet          New-Service                                        3.1.0.0    Microsoft.PowerShell.Management                                        
Cmdlet          Restart-Service                                    3.1.0.0    Microsoft.PowerShell.Management                                        
Cmdlet          Resume-Service                                     3.1.0.0    Microsoft.PowerShell.Management                                        
Cmdlet          Set-Service                                        3.1.0.0    Microsoft.PowerShell.Management                                        
Cmdlet          Start-Service                                      3.1.0.0    Microsoft.PowerShell.Management                                        
Cmdlet          Stop-Service                                       3.1.0.0    Microsoft.PowerShell.Management                                        
Cmdlet          Suspend-Service                                    3.1.0.0    Microsoft.PowerShell.Management          

从输出结果中,可以看到可以获取指定的service,新建新的service,重启,设置service的一些状态,启动,停止等操作。注意在Definition列,内容并没有完全显示,可以后面会讲到如何调节其输出格式。

通过Powershell的发现特性,找到具体的命令之后,就可以通过Get-Help cmdlet 了解有关该mdlet 的详细信息。例如,要显示有关 Get-Service cmdlet 的帮助,在命令行输入以下命令。

PS C:\WINDOWS\system32> Get-Help Get-Service

NAME
    Get-Service
    
SYNTAX
    Get-Service [[-Name] <string[]>] [-ComputerName <string[]>] [-DependentServices] [-RequiredServices] [-Include <string[]>] [-Exclude <string[]>]  [<CommonParameters>
    ]
    
    Get-Service -DisplayName <string[]> [-ComputerName <string[]>] [-DependentServices] [-RequiredServices] [-Include <string[]>] [-Exclude <string[]>]  [<CommonParamete
    rs>]
    
    Get-Service [-ComputerName <string[]>] [-DependentServices] [-RequiredServices] [-Include <string[]>] [-Exclude <string[]>] [-InputObject <ServiceController[]>]  [<C
    ommonParameters>]
    

ALIASES
    gsv
    

REMARKS
    Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
        -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
        -- To view the Help topic for this cmdlet online, type: "Get-Help Get-Service -Online" or 
           go to https://go.microsoft.com/fwlink/?LinkID=113332.

如果要查看该输出结果的成员信息,比如该输出结果有哪些成员,方法,返回类型等,可以通过管道运算符(|)将其执行结果传递给Get-Member,如输入以下命令可以查看Get-Service输出对象的成员信息(以下是部分输出信息)。
PS C:\WINDOWS\system32>  Get-Service | Get-Member


   TypeName: System.ServiceProcess.ServiceController

Name                      MemberType    Definition                                                                                                                       
----                      ----------    ----------                                                                                                                       
Name                      AliasProperty Name = ServiceName                                                                                                               
RequiredServices          AliasProperty RequiredServices = ServicesDependedOn                                                                                            
Disposed                  Event         System.EventHandler Disposed(System.Object, System.EventArgs)                                                                    
Close                     Method        void Close()                                                                                                                     
Continue                  Method        void Continue()                                                                                                                  
CreateObjRef              Method        System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType)                                                                  
Dispose                   Method        void Dispose(), void IDisposable.Dispose()                                                                                       
Equals                    Method        bool Equals(System.Object obj)                                                                                                   
ExecuteCommand            Method        void ExecuteCommand(int command)                                                                                                 
GetHashCode               Method        int GetHashCode()                                                                                                                
GetLifetimeService        Method        System.Object GetLifetimeService()                                                                                               
GetType                   Method        type GetType()                                                                                                                   
InitializeLifetimeService Method        System.Object InitializeLifetimeService()                                                                                        
Pause                     Method        void Pause()                                                                                                                     
Refresh                   Method        void Refresh()                                                                                                                   
Start                     Method        void Start(), void Start(string[] args)                                                                                          
Stop                      Method        void Stop()                                                                                                                      
WaitForStatus             Method        void WaitForStatus(System.ServiceProcess.ServiceControllerStatus desiredStatus), void WaitForStatus(System.ServiceProcess.Serv...
CanPauseAndContinue       Property      bool CanPauseAndContinue {get;}                                                                                                  
CanShutdown               Property      bool CanShutdown {get;}                                                                                                          
CanStop                   Property      bool CanStop {get;}                                                                                                              
Container                 Property      System.ComponentModel.IContainer Container {get;}                                                                                
DependentServices         Property      System.ServiceProcess.ServiceController[] DependentServices {get;}                                                               
DisplayName               Property      string DisplayName {get;set;}                                                                                                    
MachineName               Property      string MachineName {get;set;}                                                                                                    
ServiceHandle             Property      System.Runtime.InteropServices.SafeHandle ServiceHandle {get;}                                                                   
ServiceName               Property      string ServiceName {get;set;}                                                                                                    
ServicesDependedOn        Property      System.ServiceProcess.ServiceController[] ServicesDependedOn {get;}                                                              
ServiceType               Property      System.ServiceProcess.ServiceType ServiceType {get;}                                                                             
Site                      Property      System.ComponentModel.ISite Site {get;set;}                                                                                      
StartType                 Property      System.ServiceProcess.ServiceStartMode StartType {get;}                                                                          
Status                    Property      System.ServiceProcess.ServiceControllerStatus Status {get;}                                                                      
ToString                  ScriptMethod  System.Object ToString();                                                                                                        

其中MemberType列是成员信息的属性,是属性,事件,还是方法等。

  • 一致性

    一致性是Powershell主要优点之一,同一的接口降低了管理任务的复杂性。例如如果你学会了获取Get-Servce的帮助信息,那么就学会了查看所有命令的帮助信息。

  • 交互式脚本环境

    PowerShell 将交互式环境和脚本环境组合在一起,从而允许访问命令行工具和 COM 对象,同时还可利用 .NET Framework 类库 (FCL) 的强大功能(可以加载调用cmd,exe,dll外部,在企业级实战部分会介绍到)。Powershell对命令提示符进行了改进,提供了带有多种命令的交互式环境。PowerShell 扩展了交互用户和脚本编写者的能力,从而更易于进行相关作业脚本的开发,系统管理。

  • 面向对象

    虽然可以通过以文本方式键入命令与 PowerShell 进行交互,但 Windows PowerShell是基于对象的,而不是基于文本的。意味着Powershell命令的输出即为对象。可以将输出对象发送给另一条命令以作为其输入(通过管道运算符"|")。因此,Windows PowerShell 为曾使用过其他 shell的人员提供了熟悉的界面,同时引入了新的、功能强大的命令行范例。通过允许发送对象(而不是文本),它扩展了在命令之间发送数据的概念。

  • 右命令行很容易过度到脚本

    使用 Windows PowerShell,可以很方便地从以交互方式键入命令过渡到创建和运行脚本。可以在 Windows PowerShell命令提示符下键入命令以找到可执行任务的命令。随后,可将这些命令保存到脚本或历史记录中,然后将其复制到文件中以用作脚本。


理解Powershell中的一些重要概念

在开始Powershell的实际开发之前,理解以下概念非常有助于了解Powershell设计思想。

  • 命令不是基于文本的,是基于.Net对象的

    与传统的命令(如perl,bat,cmd,bash等)不同,Powershell可处理对象(结构化的信息),而不只是显示在屏幕上的字符串,命令输出始终提供可能会需要的额外信息,通过标准的Powershell对象操作命令,即可操作命令返回数据的任何部分。

  • 命令系列是可扩展的

    许多接口(例如 Cmd.exe)均不能提供直接扩展内置命令集的方法。可以创建在 Cmd.exe 中运行的外部命令行工具,但这些外部工具不能提供服务(例如帮助集成),而且 Cmd.exe 不能自动识别它们是否是有效的命令。

    PowerShell 中的本机二进制命令cmdlet可以通过创建并使用管理单元添加到 Windows PowerShell 中的 cmdlet 进行补充。与任何其他接口中的二进制工具相同,Windows PowerShell 管理单元已经过编译。可以使用它们将 Windows PowerShell 提供程序以及新的 cmdlet 添加到 shell 中。最重要的是,Powershell能够识别这些新添加的命令是否是有效的命令。
    除此之外,Powershell还可以调用外部的.ps1脚本文件,也可以在脚本中创建自己的函数。

  • Windows Powershell处理控制台输入和显示

    输入命令时,PowerShell 始终会直接处理命令行输入。PowerShell 还可以设置屏幕上显示的输出格式。这个功能十分重要,因为它可以减少处理每个命令所需的工作,并确保在使用任何一种 cmdlet 时都能始终以相同方式进行操作。这样可以简化脚本工具开发人员和使用者的工作。

    举个例子,对于请求和显示帮助,传统的命令行工具都有它们自己的方案。一些命令行工具使用 /? 来触发帮助显示,而其他一些命令行工具则使用 -?、/H 甚至 //。其中一些工具会在 GUI 窗口中显示帮助,而不以控制台显示。某些复杂工具(例如应用程序更新程序)会先将内部文件解包,然后才显示其帮助。如果使用的参数不正确,则该工具可能会忽略键入的内容,并自动开始执行任务。

    但在 PowerShell 中输入命令时,它会自动分析并预处理所输入的全部内容。如果在 PowerShell cmdlet 中使用 -? 参数,则始终表示“显示此命令的帮助”。脚本命令开发人员无需分析该命令,他们只需提供帮助文本。即使是在 PowerShell 中运行传统命令行工具,也可以使用 PowerShell 的帮助功能。PowerShell 将对参数进行处理并将结果传递给外部工具。

  • Windows Powershell使用某些C#语法

    由于 PowerShell 基于 .NET Framework,因此 PowerShell 的语法功能和关键字与 C# 编程语言中所使用的语法功能和关键字十分类似。换句话说,学习C#和Powershell是相互促进的,如果您不是 C# 程序员或是完全不了解C#,也没有关系,了解任何一门面对对象的编程语言都有助于学习Powershell。如果已经熟悉 C#,则这些相似性可以帮助你更轻松地了解PowerShell。


理解Powershell中命令的命名规范

使用大多数命令行界面时,通常会遇到以下问题。

  • 了解命令名称及命令参数需要花费大量的时间。
    使用新命令或参数时,通常无法使用已知的名称,而必须查找和了解新的名称。考虑到界面是如何从一个小工具集经过不断添加的新增功能发展而来,就很容易了解为何其结构会是非标准的。尤其是使用命令名称时,这一点可能是必然的,因为每种命令都是单独的工具。

  • 命令没有统一的模式,因此只能通过记住常用的每种命令和每个参数来了解这些命令行界面。
    大多数命令都是为管理操作系统或应用程序的元素(如服务或进程)构建的。这些命令有不同 的名称,它们可能属于或不属于一个系列。例如,在 Windows 系统上可以使用 net start 和 net stop 命令来启动和停止服务。另外还有一个名为 sc 的更通用的 Windows 服务控制工具,这一完全不同的名称与 net 服务命令的命名模式不一致。对于进程管理,Windows 使用 tasklist 命令来列出进程,并使用 taskkill 命令来终止进程。

    但是不能使用 net start 命令来启动远程计算机上的服务。sc 命令可以启动远程计算机上的服务,但是,若要操作远程计算机上的服务,必须在其名称前添加双反斜杠作为前缀。例如,若要在名为 PC01 的远程计算机上启动后台打印程序服务,您可以键入 sc \PC01 start spooler。若要列出在 PC01 上运行的任务,需要使用 /S(代表“system”)参数,并提供如下所示的不带反斜杠的名称 PC01:tasklist /S PC01。
    尽管服务与进程之间有很大的技术差别,但它们都是计算机上具有定义完整的生命周期的可管理元素示例。可能需要启动或停止服务或进程,或获得所有当前正在运行的服务或进程的列表。换而言之,尽管服务和进程并不相同,但从概念上来看,对服务或进程执行的操作通常是相同的。PowerShell 通过统一的模式(类似的命令)来减少要了解和使用 cmdlet 所需知道的不同名称数。

Powershell命令集cmdlet通过使用"动词-名词"名称以减少命令记忆量。

PowerShell 使用"动词-名词"命名系统,其中的每个 cmdlet 名称均由标准动词、连字符和特定名词组成。PowerShell 动词并非一定为英语动词,但其表示 Windows PowerShell 中的特定操作。名词与所有语言中的名词十分类似,名词所受的限制较少,但它们应始终描述命令的操作对象。

举几个动词和名词的示例,来说明他们是如何减少您了解命令所需的记忆量。PowerShell 具有 Get-Process、Stop-Process、Get-Service 和 Stop-Service 等命令。

如果仅有两个名词和两个动词,则一致性并不会极大地简化您了解这些命令的过程。但是,假定是由 10 个动词和 10 个名词组成的一组标准命令名称,则您只需记住 20 个单词,而使用这些单词可以构成 100 个不同的命令名称。

常,只需通过命令的名称即可识别其用途,而对新命令应使用什么样的名称,这通常也是显而易见的。例如,计算机关闭命令可能为 Stop-Computer。用于列出网络上的所有计算机的命令可能为 Get-Computer。用于获取系统日期的命令为 Get-Date。

在 Get-Command 中使用 -Verb 参数可以列出所有包含特定动词的命令(在后面的文章中会详细介绍 Get-Command)。例如,若要查看所有使用动词 Get 的 cmdlet,输入:

PS C:\WINDOWS\system32> Get-Command -Verb Get

CommandType     Name                                               Version    Source                                                                                     
-----------     ----                                               -------    ------                                                                                     
Alias           Get-AppPackage                                     2.0.1.0    Appx                                                                                       
Alias           Get-AppPackageAutoUpdateSettings                   2.0.1.0    Appx                                                                                       
Alias           Get-AppPackageDefaultVolume                        2.0.1.0    Appx                                                                                       
Alias           Get-AppPackageLastError                            2.0.1.0    Appx                                                                                       
Alias           Get-AppPackageLog                                  2.0.1.0    Appx                                                                                       
Alias           Get-AppPackageManifest                             2.0.1.0    Appx                                                                                       
Alias           Get-AppPackageVolume                               2.0.1.0    Appx                                                                                       
Alias           Get-AppProvisionedPackage                          3.0        Dism                                                                                       
Alias           Get-DiskSNV                                        2.0.0.0    Storage                                                                                    
Alias           Get-DiskSNV                                        1.0.0.0    VMDirectStorage                                                                            
Alias           Get-PhysicalDiskSNV                                2.0.0.0    Storage                                                                                    
Alias           Get-PhysicalDiskSNV                                1.0.0.0    VMDirectStorage                                                                            
Alias           Get-ProvisionedAppPackage                          3.0        Dism                                                                                       
Alias           Get-ProvisionedAppSharedPackageContainer           3.0        Dism                                                                                       
Alias           Get-ProvisionedAppxPackage                         3.0        Dism                                                                                       
Alias           Get-StorageEnclosureSNV                            2.0.0.0    Storage                                                                                    
Alias           Get-StorageEnclosureSNV                            1.0.0.0    VMDirectStorage                                                                            
Function        Get-AppBackgroundTask                              1.0.0.0    AppBackgroundTask                                                                          
Function        Get-AppvVirtualProcess                             1.0.0.0    AppvClient                                                                                 
Function        Get-AppxLastError                                  2.0.1.0    Appx                                                                                       
Function        Get-AppxLog                                        2.0.1.0    Appx      
......      

-Noun 参数用处更大,因为使用该参数可以查看影响同一对象类型的所有命令。例如,若要显示可用于管理服务的命令,请输入以下命令
PS C:\WINDOWS\system32> Get-Command -Noun Service


CommandType     Name                                               Version    Source                                                                                     
-----------     ----                                               -------    ------                                                                                     
Cmdlet          Get-Service                                        3.1.0.0    Microsoft.PowerShell.Management                                                            
Cmdlet          New-Service                                        3.1.0.0    Microsoft.PowerShell.Management                                                            
Cmdlet          Restart-Service                                    3.1.0.0    Microsoft.PowerShell.Management                                                            
Cmdlet          Resume-Service                                     3.1.0.0    Microsoft.PowerShell.Management                                                            
Cmdlet          Set-Service                                        3.1.0.0    Microsoft.PowerShell.Management                                                            
Cmdlet          Start-Service                                      3.1.0.0    Microsoft.PowerShell.Management                                                            
Cmdlet          Stop-Service                                       3.1.0.0    Microsoft.PowerShell.Management                                                            
Cmdlet          Suspend-Service                                    3.1.0.0    Microsoft.PowerShell.Management                            

总结

通过学习本节内容,应当掌握以下内容

  1. Powershell中的可发现,一致性,面向对象等特性

  2. Powershell是基于.Net对象,而不是基于文本的。

  3. Powershell中"动词-名词"的命名规范。

标签:Service,Get,0.0,PowerShell,命令,基础知识,Powershell
From: https://www.cnblogs.com/zhang-snail/p/17970114

相关文章

  • 不可不看的Java基础知识整理,注释、关键字、运算符
    写在开头万丈高楼平地起,要想学好汉语首先学拼音,想学好英语首先学26个字母,对于编程语言来说,一样的道理,要想学好必须先掌握其基础语法和知识,今天我们就来唠一唠Java语言中那些出现频率极高,又很基础的知识点吧!Java中的注释注释的作用:拨云见日!在日常的工作中,总会遇到很多大段的代......
  • 如何编写一个 PowerShell 脚本
    PowerShell脚本的后缀是.ps1前提:ps1脚本可以帮忙我们快速修改文件内容,还不需要调用文件的底层api,方便快捷在编写CMakeLists时发现,项目不能够很好的使用vcpkgtoolchain,哪怕是在命令行中指定vcpkg.cmake如果只是简单的项目,vcpkgtoolchain可以正常工作,但是在稍微复......
  • 在CMD和PowerShell下如何制作图片马
    目录在CMD中使用copy命令:在PowerShell中使用gc命令:总结:图片马通常是在图片文件中嵌入其他信息,以隐藏额外的数据。当使用命令行工具(如CMD或PowerShell)制作图片马时,copy命令和Get-Content(简写为gc)命令的目标是将一段数据(可能是一段脚本或其他二进制数据)嵌入到图片文......
  • (2)Powershell开发工具
    (2)Powershell开发工具在上一节对Powershell进行了简单介绍,详细内容参考Powershell简介,这一节介绍Powershell的开发工具及其设置注意事项。本文包含以下知识点如何启动WindowsPowershell命令行开发工具WindowsPowershell命令行的简单设置如何启动WindowsPowershel......
  • (1)Powershell简介
    (1)Powershell简介本文会包含以下三个知识点什么是Powershell?学习Powershell有什么好处?学习Powershell需要哪些条件?什么是Powershell?Powershell(WindowsPowershell)是Microsoft为Windows设计的新的命令行程序,这个Windows内置的命令行shell包括交互式提示和脚本环......
  • 深度学习基础知识整理
    自动编码器Auto-encoders是一种人工神经网络,用于学习未标记数据的有效编码。它由两个部分组成:编码器和解码器。编码器将输入数据转换为一种更紧凑的表示形式,而解码器则将该表示形式转换回原始数据。这种方法可以用于降维,去噪,特征提取和生成模型。自编码器的训练过程是无监督的,因......
  • 软件测试基础知识 - 集成测试和系统测试的区别,以及它们的应用场景
    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击人工智能教程区别1、测试计划和测试用例编制的先后顺序:从V模型来讲,在需求阶段就要制定系统测试计划和测试用例,概要设计的时候做集成测试计划和测试用例,有些公司的具体实践不一样,但......
  • 利用PowerShell修改网络配置
    title:利用PowerShell修改网络配置date:2022-03-30categories:编程tags:-PowerShell-网络-Windows前言修改IP、网关、子网掩码、DNS等配置时需要打开网络配置器配置,有些麻烦。尤其是经常需要重复性操作时(例如去学校图书馆蹭网)。用PowerShell脚本自动修改,方便简单而......
  • 【Powershell】管理DHCPServer
    欢迎购买课程:https://edu.51cto.com/course/35515.html适合人群:对Powershell和域控有一定基础和感兴趣的运维你将会学到:利用Powershell创建和管理DHCPServer课程简介:本课程将教你利用Powershell创建和管理DHCPServer,特别是管理DHCPFailover,详解故障转移中的负载均衡和热备模式的差......
  • 【Powershell】域用户提权
    适合人群:适合对Powershell和域有一定基础和感兴趣的运维。课程目标:利用Powershell和计划任务让普通用户能用管理员权限执行程序或脚本课程简介:以往都需要借助收费第三方软件来完成的事情,现在可以通过强大的Powershell完成。利用Powershell和计划任务让普通用户能用管理员权限执行......