PowerShell学习基础篇(使用帮助)

一、背景介绍

       PowerShell不仅仅是一门脚本语言,其实是一种运行命令行工具的命令行Shell。虽然PowerShell可以通过脚本实现很复杂的功能,但脚本仅是使用PowerShell的一种方式。PowerShell为Windows管理员提供自动化管理的工具,微软的多个产品组都采用了PowerShell,第三方生态系统扩展也是基于PowerShell,并且全球的社区专家与爱好者也都帮助PowerShell变得越来越好。

       微软对Windows PowerShell的定位是我们可以通过该Shell管理该Windows系统中的所有功能。微软仍然继续开发GUI的控制台,但是底层运行的仍然是PowerShell命令。通过这种方式,微软保证我们可以在该Shell中完成Windows系统中任意的工作。如果需要自动化一个重复性的任务或者完成在GUI中不支持的工作,那么你可以使用该Shell来达成所愿。

       很多微软的产品都已经采用了这种开发方法,如Exchange Server、SQL Server、Sharepoint Server、大部分System Center产品、Office 365以及Windows系统中大量的组件。接下来,越来越多的产品和Windows组件会采用这个Shell。PowerShell会成为越来越多的管理功能的底层实现。PowerShell已经成为大量高层技术的基础。

     以后的Windows系统工程师可以简单分为两类,一部分会使用PowerShell,另一部分则不会。在2016年中期,微软迈出了在此之前不敢想象的一步,那就是完整开源了Windows PowerShell。同时,还发布了非Windows版本的PowerShell,包括macOS与大量Linux发行版。现在,这个面向对象的Shell在多种操作系统上可用,并且可以被世界范围内的社区共同提升。

二、初识PowerShell

2.1、选择你的“武器”

       在Windows中,64位系统中,最多有4个Powershell图标。

  1. Windows Powershell——64位系统上的64位控制台和32位系统上的32位控制台。
  2. Windows PowerShell(x86)——64位系统上的32位控制台。
  3. Windows PowerShell ISE——64位系统上的64位图形化控制台和32位系统上的32位图形化控制。
  4. Windows PowerShell(x86)——64位系统上的32位图形化控制台。

提示:在64位系统中,人们经常会错误的打开32位应用程序,此时应该注意窗体的标题,如果显示“x86”,证明你在运行32位程序,另外,64位扩展程序不能运行在32位应用程序中,所以建议用户把64位应用程序以快捷方式的形式固定在【开始】菜单中。

2.1.2、控制台窗口

从使用简单的PowerShell控制台命令和参数开始。

  1. PowerShell不支持双字节字符集,也就是说,大部分非英语语言不能很好的展示出来。
  2. 剪切板操作(复制和粘贴)使用的是非标准键,意味使用起来较为不便。
  3. PowerShell在输入时会提供少量帮助信息(这个相对于ISE而言)。

综上所述,PowerShell控制台应用程序将是你在没有安装GUI Shell的服务器上运行PowerShell的唯一选择(如Server Core与Nano Server版本,或者Windows Server中服务器GUI Shell功能被移除或未安装的情景)。其优点是:

  1. 控制台程序非常轻量,可以快速加载且不需要太多内存。
  2. 不需要任何非PowerShell自身必需的.NET Framework之外的资源。
  3. 可以在黑色背景中设置绿色字体。

如果你打算使用控制台应用程序,在你配置时有些建议可供参考。可以通过单击窗体左上角的图标,并选择【属性】实现,如图所示。在Windows 10中该窗口看上去会略有不同,因为该版本增加了一些选项,但这里提到的主旨并无不同。

  1. 在【选项】标签页,可以调大“命令记录”的缓冲区大小。这个缓冲区可以记住你在控制台输入的命令,并且通过键盘的上、下键重新调用它们。你也可以通过按F7键弹出命令列表。
  2. 在【字体】标签页,选择稍微大于默认12像素的字体。不管你是否拥有1.5的视力,稍微提高一下字体大小也没什么坏处。PowerShell需要你能快速区分相似的字符,比如’(撇号或单引号)和`(重音符)。
  3. 如果使用小像素字体,区分这类字符将比较困难。

2.1.3、集成脚本环境(ISE)

提示:

如果你不经意打开了标准控制台应用程序,可以输入“ise”并按回车键,从而打开ISE。

2.2、重新认识代码输入

PowerShell是一个命令行接口,意味着你需要大量输入代码。然而输入命令就可能出现错误,例如拼写错误。幸运的是,这两种PowerShell应用程序都提供了帮助减少打错的方式。

控制台应用程序支持4种“Tab键补全”。

  • 输入“Get-S”,然后按几下Tab键,再按Shift+Tab组合键。PowerShell会循环地显示以Get-S开头的所有命令。然后不停按Shift+Tab组合键,直到出现你期望的命令为止。
  • 输入“Dir”,按空格键,然后输入“C:\”,再按Tab键,PowerShell会从当前文件夹开始循环遍历所有可用的文件和文件夹名。
  • 输入“Set-Execu”,按Tab键,然后输入一个空格和横杠(-),再开始按Tab键,可以看到PowerShell循环显示当前命令的所有可用参数。另外,也可以输入参数名的一部分,例如-E,然后按Tab键,开始循环匹配的参数名。按Esc键可以清空命令行。
  • 再次输入“Set-Execu”,按Tab键,再按空格键,然后输入“-E”,再次按Tab键,然后按一次空格键,再按Tab键。PowerShell会循环显示关于这些参数的合法值。这个功能仅对那些已经预设了可用值(称为枚举)的参数有效。按Esc键同样可以清空命令行。

PowerShell ISE提供了类似功能,甚至可以说比“Tab键补全”功能更好的功能:智能提示。该功能在上面提到的4种场景下都能运行。下图演示了如何通过弹出菜单实现你在使用Tab键时完成的功能。可以使用上下箭头按钮来滚动菜单,找到你想要的选项,然后按Tab键或者按回车键选择,再继续输入剩余代码。

警告:

当你在PowerShell中输入时,请极其小心。在某些情况下,一个错位的空格、引号或者单引号都会带来错误或者失败。如果出现了错误,请再三检查你的输入内容。

2.3、查看当前版本

在很大程度上,找出当前使用的PowerShell版本不是件容易的事,因为每个发布版本都安装在“1.0”的目录下面(1.0是引用的Shell引擎语言版本,即所有版本都向后兼容到v1)。针对PowerShell v3或更新版本,有一种简单的方式检查版本。输入“$PSVersionTable”并按回车键。

2.4、使用帮助系统

  • 如果你需要执行一项任务,但是却不知道应该使用什么命令,帮助系统就可以帮助你找到这个命令。
  • 如果你在运行一个命令的时候返回错误信息,帮助系统就可以告诉你如何正确运行命令,因此不再出现错误。
  • 如果你想将多个命令组合在一起来执行一项复杂的任务,帮助系统就可以帮你找到哪些命令是可以和其他命令结合使用。

2.4.1、可更新的帮助

微软在PowerShell中加入了一个新的功能,叫作“可更新的帮助”。PowerShell可以通过互联网下载帮助文件的更新、修正和扩展。不过,为了做到可更新,微软不能把任何帮助放到安装包中。当你需要查看一个命令的帮助时,你可以得到一个自动生成的简易版的帮助,以及如何更新帮助文档的信息,如下:

更新PowerShell的帮助文档应该是你的首要任务。这些文件存储在System32这个目录下,这意味着你的Shell必须在更高特权下运行。如果在PowerShell 的标题中没有出现“管理员”的字眼,你将会获得一个错误信息。

2.4.2、查看帮助

Windows的PowerShell提供了Get-Help这个Cmdlet命令访问帮助系统。你可能看到很多示例(特别是在互联网)都是使用“Help”或“Man”(来自UNIX,指代Manual)关键字来代替Get-Help。Man和Help都不是原生的Cmdlet命令,而是对核心Cmdlet命令进行封装后的函数。

macOS与Linux中的帮助

macOS与Linux中的帮助文件,都使用操作系统传统的Man(manual)功能进行显示,该命令会“接管”屏幕,从而显示帮助,在阅读完帮助后返回正常屏幕。

Help的工作原理类似Get-Help,但它可以把输出的信息通过管道传送给More命令。这样你就可以以分屏这样友好的方式来查看帮助的内容,而不是一次性打印出所有的帮助信息。运行Help Get-Content和Get-Help Get-Content,会返回相同的结果。前者是一次一页显示,你也可以使用Get-Help Get-Content | More分页显示,但这需要输入更多的字符,我们通常仅使用Help。但我们想让你知道底层实现。

注意:

从技术上来说,Help是一个函数,而Man是Help的一个别名,或者叫昵称。但是它们返回的结果相同。

顺便提醒一下,有些时候你可能会讨厌分页显示,因为你想一次性获取所有的信息,但是它却一次次让你输入空格键显示余下的信息。如果你遇到这样的情况,在Shell控制台窗口按Ctrl+C组合键取消命令并立即返回到Shell。Ctrl+C组合键总是表示“返回”的意思,而不是“拷贝到剪切板”的意思。而在图形化Windows PowerShell ISE中,Ctrl+C表示拷贝到剪切板。工具栏中有一个红色按钮“停止”,它可以用于停止正在运行的命令。

注意:

很多命令在图形化的ISE中不起作用,即使使用Help或Man时,它也会一次性返回所有的帮助信息,而不是一次返回一页。

帮助系统有两个主要的目标:一个是帮助你找到实现特定任务的命令,另一个就是找到命令后帮助你学会如何使用它们。

2.4.3、使用帮助系统查看命令

从技术上来说,帮助系统不知道Shell中存在哪些命令。它只知道有哪些可用的帮助主题。某些命令可能并没有帮助文档,这会导致帮助系统不能确认这个命令是否存在。幸好微软几乎发布的每个Cmdlet都包含一个帮助主题,这意味着你通常不会发现不同。另外,帮助系统也包含了除特定Cmdlet之外的其他信息,包括背景概念和其他基础信息。

与大多数命令一样,Get-Help(等同于Help)有几个参数。其中一个最为重要的参数是-Name。该参数指定你想要访问帮助的主题名称,并且它是一个位置参数,所以你无需输入-Name,只需提供所需查找的命令名称。它也支持通配符,这让帮助系统更加容易找到命令。

例如,你想操作系统事件日志,但是你却不知道使用哪个命令,你决定搜索包含事件日志的帮助主题,可以运行下面两个命令中的一个。

Help *log*

Help *event*

2.4.4、帮助详解

大部分命令可以有多种使用方式,这依赖于你需要用它们来做什么。例如,下面是Get-EventLog的语法帮助部分。

注意,该命令在语法部分出现了两次,这表示这个命令提供了两个不同的参数集,你可以有两种方式使用该命令。你可能已经注意到,有些参数是这两个参数集共享的。例如,这两个参数集都包含`-ComputerName`参数。但是这两个参数集总会有些差异。在这个实例中,第一个参数集提供了`-AsString`和`-List`,这两个参数都没有出现在第二个参数集中;而第二个参数集包含许多第一个参数集中没有的参数。

下面来说明它们是如何工作的:如果你使用一个只包含在某个参数集中的参数,那么你就只能使用同一个参数集里的其他参数。如果你选择使用`-List`参数,那么你能够使用的其他参数就只能是`-AsString`和`-ComputerName`,因为存在`-List`的参数集中只剩这两个参数可选。你不能添加`-LogName`参数,因为它不存在于第一个参数集中。这意味着`-List`和`-LogName`是相互排斥的,即你不能同时使用它们,因为它们存在于不同的参数集中。

有些时候,可以只带有所有参数集中共有的参数运行命令。在这种情况下,Shell通常会选择第一个参数集。理解你运行的命令带有的参数属于哪个参数集非常重要,因为每个参数集意味着不同的功能。

2.4.5、可选参数和必选参数

运行一个Cmdlet命令时,你无需提供全部参数。PowerShell的帮助文档把可选参数放到一个方括号中。例如,`[-ComputerName <string[]>]`表示整个`-ComputerName`参数是可选的。你可以不使用该参数,因为在没有为该参数指定一个具体值的时候,Cmdlet会默认为本地计算机。这也就是为什么`[<CommonParameters>]`在方括号内,你就可以在不使用任何通用参数的情况下运行该命令。

几乎所有的Cmdlet命令都最少有一个可选参数。你可能永远不会需要使用其中的一些参数,以及可能日常使用其他参数。记住,当你选择一个参数时,你只需输入足够的参数名称就可以让PowerShell明白你所需的参数是什么。例如,`-L`不能充分表示`-List`,因为`-L`可以表示`-LogName`。但是`-Li`是一个适合`-List`的的缩写,因为其他参数名称没有以`-Li`开头的。

如果运行命令时忘了指定必选参数,会发生什么呢?来看看`Get-EventLog`的帮助。例如,你可以看到`-LogName`参数是必选参数,该参数并不在方括号内。尝试在没有指定日志名称的情况下运行`Get-EventLog`。

2.4.6、位置参数

PowerShell设计者知道有些参数会被频繁地使用,而你不希望不断地输入参数名称。通常来说,参数是具有位置性的。这意味着只要你把参数值放在正确的位置,你就可以只提供这个参数值,而不需要输入具体的参数名。

在语法概要中找到位置参数

只有参数名被方括号括起来的参数。比如,查看`Get-EventLog`的第二个参数集的前两个参数。

 [-LogName]  [[-InstanceId] ]

第一个参数:`-LogName`。它是必选参数。我们可以识别出它是必选参数,是因为它的参数名称和参数值不在一个方括号里面。但是它的参数名称处在一个方括号内,这让它成了一个位置参数,所以我们可以只提供日志名称而不需要输入参数名称`-LogName`。并且由于该参数出现在帮助文档的第一个位置,所以我们知道这个日志名称是我们必须提供的第一个参数。

第二个参数:`-InstanceId`。它是可选的,因为它的参数名称与参数值位于同一个方括号内。在方括号内,`-InstanceId`本身又处在一个方括号里,意味着它同时还是一个位置参数。它出现在第二个位置,所以我们省略这个参数名称,就必须在该位置提供一个参数值。

2.4.7、参数值

帮助文档同样给你提供了每个参数的数据类型。有些参数被称为开关参数,无需任何输入值。在缩写语法中,它们看起来如下所示。

[-AsString]

在详细语法中,它们看起来如下所示。

-AsString [<SwitchParameter>]

    以字符串而非对象的形式返回输出。

    是否必需?                   False

    位置?                      named

    默认值               

    是否接受管道输入?            False

    是否接受通配符?              False

通过`[<SwitchParameter>]`可以确认这是一个开关参数,并不需要任何输入值。开关参数的位置可以随意放置,你必须输入参数名(或者至少是一个缩写)。开关参数总是可选的,这可以让你选择是否使用它们。

其他参数希望获得的数据类型,通常会跟在参数名称之后,并使用空格与参数名称分开(不是冒号、等号或者其他字符,虽然你时不时可能会遇到错误)。在缩写语法里面,输入的类型使用尖括号表明,例如:

[-Logname] <string>

       在详细语法中以相同的方式显示:

-Message <string>

       获取其消息中具有指定字符串的事件。可以使用此属性来搜索包含特定单词或短语的消息。允许使用通配符。

    是否必需?                     False

    位置?                        named

    默认值

    是否接受管道输入?              False

    是否接受通配符?                True

  1. `string`——一系列字母和数字,有些时候也会包含空格符。如果出现空格符,那么全部字符串必须包含在引号内。例如,类似`C:\Windows`的字符串不需要使用引号,但是`C:\Program Files`这样的字符串就需要,因为它包含了一个空格。现在,你可以交替使用单引号或者双引号,但是最好坚持使用单引号。
  2. `Int`、`Int32`或`Int64`——一个整数类型(整个数字不包含小数)。
  3. `DateTime`——通常,基于你本地计算机的时区配置,字符串被解释成的日期会有所不同。在美国,通过的日期格式为`10-10-2010`,即月-日-年。

`string`后面的方括号并不意味着某些东西是可选的。事实上,`string[]`意味着该参数可以接受数组、集合,或者是一个列表类型的字符串。在这种情况下,只提供一个值也符合语法。

但是指定多个值也符合语法。一个简单的方式是提供一个以逗号为分隔符的列表。PowerShell把以逗号为分隔符的列表作为数组值对待。

Get-EventLog Security -computer Server-R2,DC4,Files02

再次说明,任何一个单一值中如果包含了空格,就必须使用引号。但是作为一个整体的列表,不需要使用引号,只有单一值才需要使用引号。如果你想为每个值都加上引号,这也是可以的(即使这些值没有一个需要引号)。

可以使用`Get-Content`这个Cmdlet命令来读取该文件的内容,并且发送这些内容到`-computerName`参数中。你可以强制Shell先执行`Get-Content`命令,这样就可以把结果送到这个参数了。

`()`圆括号可以用来在数学表达式中指定操作的顺序。这同样适用于PowerShell。使用圆括号把命令括起来,就强制这些命令先执行。

Get-EventLog Application -computer (Get-Content names.txt)

前面一个示例展示了一个有用的技巧:我们可以把Web服务器、域名控制器和数据库服务器等不同类型的服务器放到一个文本文件中,接着使用这个技巧再次运行这个包含全部计算机集合的命令。

2.5、PowerShell的对象

Get-Process  |  ConvertTo-HTML | Out-File C:\Users\Administrator\Desktop\processes.html

该命令不会过滤列,而是生成包含所有列的HTML文件。这是查看整个表的一种方式。

整个表通过管道进行传输。该表在传输过程中并不会过滤到只有一小部分列,而是直到所有的命令都运行后才会进行过滤。

下面是一些术语的变化。PowerShell并不会将这些内存中的表命名为“表”,而是使用下述4个术语:

- 对象——这也就是所谓的“表行”。它代表单个事物,比如说单个进程或是单个服务。

- 属性——这也就是所谓的“表列”。它代表关于对象的一部分信息,比如说进程名称、进程ID或服务状态。

- 方法——这也就是所谓的“行为”。方法与某个对象关联并使得对象完成某些任务,比如说杀死进程或启动服务。

- 集合——这是整个对象的集合,我们曾称之为“表”。

PowerShell使用对象代表数据的一个原因是:

第一个原因是Windows本身就是一个面向对象的操作系统——或者至少,大部分在Windows上运行的软件是面向对象的。选择以对象集合的方式组织数据非常容易,因为大多数操作系统适用这种结构的数据。

另一个使用对象的原因是这样会使事情简单,并给你提供更加强大的功能和更好的灵活性。现在,让我们假装PowerShell并不会生成对象作为命令的输出结果,而是生成一个简单的文本表。这也是你一开始认为的方式。当你运行类似Get-Process的命令时,你将会得到格式化好的文本作为输出结果。

2.5.1、探索对象

如果需要了解更多关于对象的内容,使用另一个命令:Get-Member。一个对象的属性、方法以及其他附加到对象的东西都被称为成员

很多对象都支持一个或多个方法,是指导对象的行为。

例如,如果你需要终止一个进程,可以通过3个办法实现。其中一个办法是获取对象并执行Kill方法,另一个办法是使用一系列Cmdlets:

Get-Process  -Name  Notepad  |  Stop-Process

Stop-Process  -name  Notepad

例如,假设我们希望显示一个进程列表,按照对虚拟内存(Vitrual Memory,VM)的消耗由高到低进行排列。我们将需要基于VM属性对列表进行重新排序。PowerShell提供了一个简单的Cmdlet、Sort-Object,就像其名称那样,可以对对象进行排序:

Get-Process  |  Sort-Object  -property  VM

Get-Process  |  Sort  VM,ID  –desc

2.5.2、选择所需的对象

Select-Object从管道接受对象,你可以指定希望显示的属性。这使得你可以访问任意属性,减少返回列表,只返回你感兴趣的列,而默认情况下由PowerShell配置规则控制。这对于将对象输出到HTML的ConvertTo-HTML命令来说非常有用,因为该Cmdlet通常会创建包含所有属性的表。

Get-Process | Select-Object -property Name,ID,VM,PM |ConvertTo-HTML | Out-File 

➥C:\Users\Administrator\Desktop\test2.html

`Select-Object`还拥有`-First`和`-Last`参数,这两个参数可以保留管道中对象的子集。例如,`Get-Process | Select First 10`将会保留前10个对象。但不能加过滤条件,比如选择特定的进程,只能选择前(或最后)10个。

`Select-Object`用于选择所需的属性(或列),还可以选择输出行的任意子集(使用`-First`和`-Last`)。`Where-object`基于筛选条件从管道中移除或过滤对象。

2.6、PowerShell如何传输数据给管道

New-ADUser命令包含一些参数,每个参数用来匹配一个新的活动目录账号的信息,比如:

  • -Name(该参数是必要参数)
  • -samAccountName(从语法角度,可以不提供。但是仍然需要提供该参数,使得AD账号可用)
  • -Department
  • -City
  • -Title

Import-CSV .\NewUsers.CSV | 

>> Select-Object -Property *, 

>> @{name='samAccountName';expression={$_.login}}, 

>> @{label='Name';expression={$_.login}}, 

>> @{n='Department';e={$_.Dept}} 

- 这里我们使用了`Select-Object`命令以及它的`-Property`参数。最开始,我们指定了`*`这个属性(`*`是指“所有存在的属性”)。在`*`后面,我们使用了逗号,也就意味着我们还会输入其他的一些属性列。

- 之后我们创建一个哈希表,哈希表的结构是以`@{`为起始,以`}`为结尾。哈希表中包含了一个或者多个成对的键-值(`Key-Value`)数据。我们使用`Select-Object`寻找我们指定的一些特定键。

- `Select-Object`需要寻找的第一个键可以是`Name`、`N`、`Label`或者`L`,该键对应的值也就是我们想创建的属性的名称。在第一个哈希表中,我们指定了`samAccountName`,第二个哈希表中为`Name`,第三个哈希表中指定为`Department`。这三个属性的名称正好可以对应到`New-ADUser`命令的3个参数。

- `Select-Object`需要的第二个键可以是`expression`或者`E`。该键对应的值是一个包含在`{}`中的脚本块。在脚本块中,使用特定的`$_`占位符关联到已存在的管道对象(CSV文件中每行的数据)。通过`$_`可以读取管道对象的属性,或者说是CSV文件的一个列。也就是说,通过这种方法来指定新属性的值。

PowerShell会采用如下顺序来执行这个命令:先执行括号里的命令;命令执行的结果被传递给相关的参数。

2.7、过滤和比较

  1. “左过滤”意味着尽可能把过滤条件放置在左侧或靠近命令行的开始部分。越早过滤不需要的对象,就越能减轻其他Cmdlets命令的工作,并且能减少不必要的信息通过网络传输到你的电脑。

左过滤技术的缺点是每个Cmdlet都可以通过自己的方式指定过滤,并且每个Cmdlet都会有不同的过滤方式。例如Get-Service,你只能通过Name属性过滤服务。但是使用Get-ADComputer,你可以根据computer对象可能存在的任何活动目录属性进行过滤。

当无法通过一个Cmdlet就可以完成你所需的所有过滤时,你可以使用一个叫作Where-Object(它的别名为Where)的核心PowerShell命令。这是一个通用的语法。当需要检索的时候,使用它过滤任何类型的对象,并把它传入管道。

    2. PowerShell使用如下比较操作符。请注意,当比较文本字符串时会忽略大小写。大写字母与小写字母等价:

  • -eq——相等,例如-eq(返回true)或者"hello" -eq "help"(返回false)。
  • -ne——不等于,例如10 -ne 5(返回true)或者-ne 10(返回false,因为它们实际上相等的,这里测试它们是否不相等)。
  • -ge和-le——大于等于,小于等于,例如10 -ge 5(返回true)或者Get-Date -le '2012-12-02'(这取决于你运行该命令的时间,这意味着可以比较日期)。
  • -gt和-lt——大于和小于,例如-lt(返回false)或者100 -gt 10(返回true)。

对于字符串的比较,如果需要区分大小写,可以使用下面的集合:-ceq,-cne,-cgt,-clt,-cge,-cle。

如果想一次比较多个对象,可以使用布尔运算符-and和-or。通常在每个子表达式两边加上圆括号,使得表达式更容易阅读。

  • (5 -gt 10) -and (10 -gt 100)返回false,因为一个或两个子表达式返回值为false。
  • (5 -gt 10) -or (10 -lt 100)返回true,因为最后一个子表达式返回值为true。

另外,布尔值-not对true和false取反。在处理一个变量或者已经包含true或false的属性时,这可能会有用。

当你需要比较文本字符串时,还有其他几个有用的比较运算符:

- `-like`接受`*`作为通配符,所以可以比较:`"Hello" -like "*ll*"`(返回`true`)。它的反义运算符为`-notlike`。它们不区分大小写。区分大小写可以使用`-clike`和`-cnotlike`。

- `-match`用于文本字符串与正则表达式进行比较。`-notmatch`是个逻辑上的反义词。并且正如你所想,`-cmatch`和`-cnotmatch`提供了区分大小写的语法。

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值