前言:
此刻姐妹们对“空间邮箱在哪里”大约比较看重,姐妹们都想要学习一些“空间邮箱在哪里”的相关内容。那么小编在网络上网罗了一些有关“空间邮箱在哪里””的相关内容,希望朋友们能喜欢,咱们快快来了解一下吧!本章涵盖:使用变量使用写入主机检查变量内容从字符串中删除空格选择字符串的各个部分修改整个字符串的大小写
作为 IT 专业人员自动化任务是将自己从琐碎中解放出来的第一步,这样您就可以专注于为组织增加的价值。每个公司都需要完成基本的IT任务。但是,我们工作的公司往往对我们的时间有更大、更紧迫的要求。
系统中断、软件升级、硬件升级、安全问题,甚至整个远程位置。这些类型的任务经常出现在 IT 专业人员的盘子上。很多时候,管理员会同时被拉向各个方向,你的日子会觉得你只是从一个火跳到另一个火。
虽然在Active Directory用户和组中构建用户帐户听起来很简单:“这只需要我五分钟。 在宏伟的计划中,我们经常没有五分钟。
自动化是一种将简单的事情从你的清单中删除的方法,让计算机完成工作,这样你就可以专注于那些让你更有效率、更有价值、不太可能导致倦怠的事情。
注意
本书建立在读者几乎没有编程经验的假设之上。因此,有必要慢慢开始,以读者的技能为基础,构建到越来越复杂的项目。虽然本书的目的是在每个Tiny PowerShell项目脚本中提供价值,但对于那些牢牢掌握PowerShell语言的IT专业人士来说,一些早期章节的功能将不那么强大。此脚本为管理员提供的价值本质上比运行“Hello World”更多。但是,对于对脚本中的所有任务都有深刻理解的专业人士来说,这似乎是微不足道的。
如果您已经牢牢掌握了基础,请随时快速浏览脚本并进入更高级的章节。
几乎每家公司都有电子邮件,用于与员工沟通。因此,电子邮件地址几乎总是您需要知道的。它们通常是公式化的。
名字的第一个字母“点”姓氏@域名“点”com。尽管如此,当给定用户列表时,为快速通信、报告或请求构建电子邮件地址列表可能会非常耗时。在接下来的章节中,我们将探索更有效的方法来提取这些信息,但现在,让我们看看如何使用PowerShell来帮助我们完成任务。
如果我们得到一个名称列表以从列表中获取电子邮件地址,我们需要:
取名字的第一个首字母将其与姓氏合并删除名称前后的任何空格在末尾添加“@”符号最后添加域名
即使是熟练的打字员(许多系统管理员都不是),手动执行此功能也需要几秒钟的时间。当面对一个庞大的列表时,错别字的机会非常大。我们多久在域名末尾插入一次“.com”(即使我们自己的组织是 .org 或 .edu)?
这就把我们带到了我们的第一个Tiny PowerShell项目!此脚本将:
允许我们为变量分配名字和姓氏。您可以从列表中复制并粘贴它。允许我们分配一个域名(我们只需要输入一次,因此将 .org 与 .com 混淆的可能性几乎为零)清理任何空白区域,因此您无需担心在复制和粘贴之前清理列表。前导或尾随空格,甚至几个,都不会进入电子邮件地址输出查找名字的第一个首字母写出完整的电子邮件地址。(名字首字母+姓氏+@+域名+.com)2.1 项目代码:自动创建电子邮件地址
让我们看一下下面的第一个脚本:
$First_Name="John "$Last_Name=" Doe"$Domain="@ForTheITPro.com"$Email_Address= $First_Name .Trim().SubString(0,1)+ $Last_Name .Trim()+$Domain Write-Host $Email_Address
本章的其余部分将引导您完成脚本的每个步骤的功能及其工作原理。
2.1.1 如何运行脚本
我们应该讨论的第一件事是如何执行这些PowerShell脚本。在旧版Windows PowerShell 5.1中,Microsoft包含一个集成脚本环境(ISE)来运行PowerShell。但是,Microsoft已经拥有了VS Code的领先集成开发环境(IDE)。
VS Code已经内置了PowerShell支持,因此Microsoft简单地停止了对PowerShell的ISE和旧版Windows PowerShell 5.1的支持,而不是支持两个脚本环境。强烈建议您下载并Microsoft的VS Code IDE,并将其用于本书中的脚本。
Tiny PowerShell 项目代码脚本中包含的 README.md 中提供了分步说明。
在系统上安装VS Code和PowerShell 7.x后,只需打开VS Code,即可选择File Open File 并导航到要打开的脚本。VS Code 将理解 .ps1 文件是使用你安装的 PowerShell 7 软件运行的。
图 2.1 如何在 VS Code 中运行脚本。
2.1.2 这个脚本有什么作用?
项目代码可用于生成电子邮件地址。为此,脚本声明(创建)以下变量(本章后面讨论的数据占位符)并为其分配值:First_Name、Last_Name、域和Email_Address。若要在 PowerShell 中声明变量,只需使用紧跟变量名称的美元符号 ($)。
等号 (=) 是 PowerShell 中的赋值运算符;等号右侧的任何内容都被指定为左侧变量的值。如果希望First_Name变量的值为“John”,请使用等号 (=) 来执行此操作,这是第一行的作用。
通过修改 $First_ Name 和 $Last_Name 变量并将$Domain设置为正确的电子邮件地址类型,您可以为您的域生成电子邮件地址。
该脚本将自动删除空格,将$First_Name修剪为第一个首字母,并将 $First_Name, $Last_Name和$Domain连接成电子邮件地址格式。
图 2.2 用于自动创建电子邮件地址的项目代码。
2.2 什么是字符串?
当您处理数据时,直觉上并非所有数据都得到相同的处理。例如,您不能添加“John”和“Doe”。这些不是数字(整数),因此尝试将它们相加没有任何意义。相反,“John”和“Doe”都是由一串字符组成的单词,或者在编程术语中是一个字符串。大多数编程语言中使用了许多不同的数据类型,PowerShell也不例外。但是,与许多其他语言不同,PowerShell 是一种可选的强类型语言。这意味着我们作为脚本的编写者,不需要预定义我们在变量中使用的对象类型。与任何其他编程语言一样,PowerShell仍然需要知道您正在使用的数据类型。在字母字符串周围包含引号、单引号或双 ('') 或 ( “”) 是向 PowerShell 指示此值应为字符串的最佳方式。
定义:
PowerShell Cmdlets:Cmdlet(发音为command-let)是在运行时加载到PowerShell中的命令。这些 cmdlet 通常由 PowerShell 本身或通过导入模块加载(本章后面将详细介绍)。这些 cmdlet 只是让我们与 PowerShell 和 API 进行交互,以与我们的 Windows 环境、PowerShell ISE 或远程计算机进行交互。
2.3 变量
变量只是数据的占位符。把变量想象成鞋盒。你可以把各种东西放在鞋盒里,或者什么都不放。你几乎可以把任何你喜欢的东西放在你的鞋盒里,以后再拿;除非你用别的东西替换里面的东西,否则你的鞋盒里会有你以后去拿东西时放在那里的东西。在PowerShell中,变量由$后跟一些字母数字或特殊字符定义。变量名称不区分大小写,它们可以以特殊字符、字母或数字开头。变量几乎可以命名为任何你喜欢的名字,但它们应该被称为通常解释它们将持有的信息类型的东西。如果你有一个变量来保存名字,你可能想把这个变量叫做$First_Name;它使您和其他任何人都更容易准确理解该变量在任何给定时间应该包含的内容。将地址或数字放在名为“$First_Name”的变量中没有任何意义。还有一些自动(内置)只读变量应避免使用,以防止混淆。例如,$path、$host或$false不应用作变量。PowerShell有一个重要的帮助文件库。实际上,每个 cmdlet 都有一个帮助文件,该文件将提供有关对象的用法、参数和结构的更多详细信息。例如,帮助设置变量将提供有关设置变量 cmdlet 的更多详细信息。有关 PowerShell 保留关键字的详细信息,可以参考Microsoft的资源文档:
如果您在获取正确数据时遇到问题或有关变量内容的一些错误,则可能是您为变量分配了保留关键字。
2.4 写主机
由于数据存储在变量中,我们需要一种检索它的方法。最简单的方法之一是简单地在终端中显示变量的值。显示变量或字符串内容的过程称为写出。有几种方法可以写出数据,但最简单的一种是写主机。
图2.3 什么是变量?
写入主机将其输出写入您正在使用的控制台。如上面的屏幕截图所示,变量$Name的值已打印到我的VS Code IDE窗口的PowerShell输出中。
2.5 修改字符串
当PowerShell解释字符串时;它将其识别为对象。每个对象类型都有许多可以对其执行的操作。这些操作在面向对象编程 (OOP) 语言中称为方法。它们是什么以及它们如何工作对你来说并不重要。但是每个对象都有可以对它们执行的不同方法。
简要介绍编程对象
PowerShell是所谓的面向对象编程(OOP)语言。编程术语中的对象是公共属性和方法的集合。想想任何其他类型的(非编程对象),比如猫。所有猫都有一些共同点:
- 他们有四条腿
- 他们有皮毛
- 他们有牙齿
- 他们有爪子
- 他们有尾巴
等。
这些被称为对象的属性,因为它们描述了对象具有的内容。
您还可以对猫做一些事情:
- 你可以喂他们
- 你可以抚摸他们
- 你可以打电话给他们
- 你可以给他们洗澡
这些被称为对象的方法,因为它们描述了您可以对对象执行的操作。然而,通常情况下,当我们用编程术语谈论方法时,它们被描述为当我们调用它们时对象可以自己做的事情。
与非编程对象一样,PowerShell 中的对象具有它们具有的内容(属性)和可以对它们执行的操作(方法)。我们将看看其中一些方法,看看如何使用它们来修改我们的字符串。
请记住,就像不同的非编程对象可以对它们执行不同的操作一样;PowerShell中的对象也是如此。
例如,房子可能有可以打开的门,或者猫可能有可以梳理的皮毛,但你不能梳理门。有些方法可用于某些对象,而其他对象则不可用。
我们将在后面的章节中更多地介绍方法,所以不要陷入细节的泥潭。现在,我们将利用几种方法来修改我们的字符串,并帮助我们用它做有用的事情。
注意
对于对字符串的方法和属性感兴趣的任何人,可以使用获取成员 cmdlet。若要查看可用于字符串对象的所有方法,请在 PowerShell 提示符下键入以下代码。
"Test"|Get-Method
如果您此时不明白这是做什么,请不要担心,我们将在后面的章节中解释如何将数据通过管道传输到 cmdlet。现在,只需浏览对象可用的方法。我们将在本章后面详细介绍其中的一些。
2.5.1 修剪
之前,我们为两个变量分配了值:
$First_Name="John "$Last_Name=" Doe"
注意到 $First_ Name 和 $Last_Name 都有多余的空格吗?因此,$Name有两个额外的空格。它在 $First_Name 之后有一个空格,在 $Last_Name 之前有一个空格。为了解决这个问题,我们可以在 $First_Name 字符串上使用 trim 方法。
$First_Name="John "$First_Name=$First_Name.TrimEnd()Write-Host $First_Name
在这种情况下,我们使用方法TrimEnd。这将修剪字符串末尾的尾随空格或空格。
图 2.4 使用修剪端
但是,请注意,查看空间是否被删除有多困难?检查任何变量上是否有任何前导或尾随空格的一种快速方法是在写入主机中的变量之前和之后直接放置某种特殊字符。
$First_Name="John "$First_Name=$First_Name.TrimEnd()Write-Host "*$First_Name*"
在这种情况下,我在包含 $First_Name 值的变量之前和之后都放置了一个“*”。
字符串的单引号与双引号
正如我在本章前面提到的,PowerShell将单引号(')和双引号(“)识别为字符串的名称。但是,PowerShell 不一定将这两个引号一视同仁。PowerShell 将单引号视为文本字符串。这意味着PowerShell从字面上准确地键入了单引号中的内容。
但是,双引号被视为可扩展引号。这意味着PowerShell将识别引号中的变量,而不是字面上键入文本,而是替换变量的值。
您必须始终平衡您的报价。如果字符串以单引号开头,则必须以单引号结尾。如果以双引号开头,则必须以双引号结尾。
请注意差异。起初,它们看起来是一样的,但PowerShell会以非常不同的方式解释它们。
$First_Name='John'Write-Host '$First_Name' $First_Name="John"Write-Host "$First_Name"
PowerShell 在 $First_Name 被单引号括起来时显示 $First_Name(或键入的文本字符串)。
但是当我们在“$First_Name”周围使用双引号时,我们看到PowerShell理解我们希望返回变量$First_Name的值,并将“John”写入我们的终端。
图2.5 单引号和双引号示例
在脚本中混合引号很好。
$First_Name='John'Write-Host "$First_Name"
这工作得很好。但是,不要在字符串中混合引号。
图 2.6 混合引用示例。
$First_Name='John"
这将产生错误。我们将在第 4 章中了解有关错误以及如何处理它们的更多信息。
图 2.7 在字符串中混合引号会导致错误。
请注意,在下面的脚本中,我们使用双引号。单引号将给出一个文字值,而写入主机不会为我们提供所需的输出。
图 2.8 检查空格
如您所见,空白区域已随 TrimEnd 一起删除。
类似地,可以使用 TrimStart 方法删除 $Last_Name 中的前导空格。
$Last_Name= "Doe"$Last_Name=$Last_Name.TrimStart()Write-Host "*$Last_Name*"图 2.9 使用修剪启动
成功!我们已经用TrimStart删除了前导空格。
如果要从字符串 OBJECT 中删除所有前导和尾随空格,可以使用 Trim 方法。
$Last_Name="Doe"Write-Host "*$Last_Name*"$Last_Name=$Last_Name.Trim()Write-Host "*$Last_Name*"图 2.10 使用 trim() 方法
利用 Trim 方法,我们删除了变量对象中的所有前导空格和尾随空格。
2.5.2 子字符串
子字符串是与字符串关联的方法,允许您选择字符串的特定范围。您可以从字符串中选择第一个字符、中间字符或任何字符系列。在我们的例子中,我们的电子邮件地址以名字的第一个字符开头,后跟姓氏。可以使用子字符串方法选择第一个字符。
使用 Substring 方法,我们将提取字符串的第一个字母和第一个字母,并将其另存为 $First_Name。
$First_Name="John"$First_Name=$First_Name.Substring(0,1)Write-Host $First_Name
子字符串方法中的括号是什么意思?子字符串使用两个字符来表示捕获了多少字符串。括号中的第一个数字表示 PowerShell 应从该字符串开始选择字符的起点。第二个数字是我们希望 Substring 方法返回的字符数。
图 2.11 使用子字符串方法
您可能会好奇,如果第一个数字表示我们要捕获的字符串的起始位置,为什么我们使用 0 而不是 1。
这是因为在编程语言中,任何计数序列中的第一个数字都以 0 而不是 1 开头是很常见的。
如果我们将起始位置更改为 1,您会注意到我们抓取了字符串中的第二个字符,而不是第一个字符。
图 2.12 使用子字符串选择其他字符
请记住此编号。我们将在第 5 章讨论数组时详细介绍。
2.5.3 上部
使用此脚本帮助你生成电子邮件地址时,你可能会将名称复制并粘贴到脚本的 $First_Name 和 $Last_Name 字段中,然后让 PowerShell 完成其余工作。毕竟,脚本的想法是让计算机为您完成工作。但是,如果您从电子表格或其他来源中提取这些名称,并且这些名称以不同的大小写形式书写,该怎么办?
$First_Name= "john"$Last_Name="doe"$Domain="@FORTHEITPRO.COM"$Email_Address=$First_Name.SubString(0,1)+$Last_Name+$DomainWrite-Host $Email_Address
此代码仍然有效!但它看起来丑陋且不专业,尤其是与具有正确大小写格式的多个电子邮件地址相比。
图2.13 混合案例示例
您可以通过将所有字符串转换为您选择的大小写来解决此问题。ToUpper 是一种字符串方法,它将用相同的大写字母替换字符串的每个字符。
图2.14 使用ToUpper方法解决混合情况
这将使所有字符串中的每个字符都大写,以便采用更通用的格式。
2.5.4 到下
与 ToUpper 非常相似,ToLower 将字符串中的所有字符修改为字符的小写版本。
图 2.15 使用 ToLower 方法解决混合情况。
PowerShell 6.0x 以后,PowerShell 获得了跨平台工作的能力。Windows和Mac等操作系统不区分大小写;但是,Linux 操作系统不是。在非Windows操作系统上运行PowerShell时,输入和输出的情况变得很重要。利用 ToUpper、ToLower 和 Substring 应该能够正确处理任何变量,而不管变量的原始大小写如何。
2.5.5 串联
通常,您希望将刺痛的不同部分组合成一根绳子。在上面的电子邮件地址示例中,我们有一个 $First_Name、$Last_Name 和一个$Domain,我们将其组合成一个名为 $Email_Address 的单一变量。我们可以通过字符串连接来实现这一点。
像PowerShell中的许多事情一样,有很多方法可以做到这一点。在这个例子中,我们已经使用加号 (+) 完成了它。这告诉PowerShell,我们希望将所有这些内容合并到一个项目中。
$First_Name="John"$Last_Name="Doe"$Domain="@ForTheITPro.com"$Email_Address=$First_Name.SubString(0,1) + $Last_Name + $Domain Write-Host $Email_Address图 2.16 使用串联
由于我们没有在引号中或 cmdlet 之间放置任何空格,因此 PowerShell 会忽略此代码中的空格。因此,我们可以将此代码间隔一点,以突出显示此串联语句的连接器和指示器。
2.6 也试试这个!
利用子字符串命令,您可以准确修改剪切和连接的信息类型以制作电子邮件。例如,您的公司可能没有为其电子邮件系统使用“名字首字母,姓氏”格式。也许相反,他们会将人名的前两个字母和姓氏的前两个字母与他们的域名连接起来。通过使用子字符串,您可以轻松进行此修改。
$First_Name="John"$Last_Name="Doe"$Domain="@ForTheITPro.com"$Email_Address=$First_Name.Substring(0,2)+$Last_Name.Substring(0,2)+$DomainWrite-Host $Email_Address
恭喜你,从欧比旺·克诺比(ObiWan Kenobi)那里偷来一句话,“你已经迈出了迈向更大世界的第一步。拥抱脚本语言为您的 PowerShell 技能组合带来的强大功能和灵活性将改变游戏规则。
在后面的章节中,我们将探索如何使 PowerShell 直接从我们的输入源读取,而无需手动复制和粘贴!
2.7 小结PowerShell 将信息存储在称为变量的对象中。变量可以保存不同类型的数据。其中一种数据类型称为 STRING,它通过用引号将字符串括起来来定义:单引号 (') 或双引号 (“)。字符串有不同的方法,可以以有用的方式修改它们我们可以 TrimStart、TrimEnd 或 Trim STRING 来删除字符串开头或结尾的空格,或两者兼而有之。我们可以用子字符串选择字符串的任何部分。我们可以用 ToUpper 或 ToLower 更改字符串的整个大小写。我们可以通过连接多个变量和文本将其组合成另一个 STRING。我们可以通过使用 Write-Host 来检查任何 STRING 的值。