使用PowerShell来写脚本-前置知识 day1

这是我参与11月更文挑战的第12天,活动详情查看:11月更文挑战

什么是 PowerShell 脚本?

PowerShell 脚本是包含命令和控制构造的文本文件。 命令是 cmdlet 的调用。 控制构造是 PowerShell 提供的编程功能,如循环、变量、参数、注释等。

PowerShell 脚本文件具有 .ps1 文件扩展名。 你可以使用任意文本编辑器创建和保存这些文件。

PowerShell 由命令行 shell 和脚本语言两部分组成。 它最初是一种框架,用于在 Windows 中自动执行管理任务。 PowerShell 现已发展为一种跨平台工具,用于执行多种任务。

如何执行脚本

.\myScript.ps1
复制代码

PowerShell 技术

PowerShell 具有许多以典型编程语言编写的功能。 你可以定义变量、使用分支和循环、捕获命令行参数、编写函数、添加注释等等。 我们的脚本需要有三个功能:变量、循环和参数。

使用 $ 声明变量并使用 = 赋值。 例如:

$loc = "East US"
$iterations = 3
复制代码

变量可以保存对象。 例如,以下定义将 adminCredential 变量设置为 Get-Credential cmdlet 返回的对象。

$adminCredential = Get-Credential
复制代码

若要获取存储在变量中的值,请使用 $ 前缀,且其名称,如下所示:

$loc = "East US"
New-AzResourceGroup -Name "MyResourceGroup" -Location $loc
复制代码

循环

PowerShell 有多个循环:“For”、“Do...While”、“For...Each”等。

核心语法如下所示;该示例运行两次迭代,每次都输出值 i。 比较运算符写为 -lt 表示“小于”,-le 表示“小于或等于”,-eq 表示“等于”,-ne 表示“不等于”,等等。

大于等于是gt,等于equal;不等于not equal,小于less than,小于或等于equal or less than,大于greater than,大于或等于equal or greater than

For ($i = 1; $i -lt 3; $i++)
{
    $i
}
复制代码

参数

执行脚本时,可以在命令行上传递参数。 可以为每个参数提供名称,以帮助脚本提取值。 例如:

.\setupEnvironment.ps1 -size 5 -location "East US"
复制代码

在该脚本中,你将值捕获到变量中。 在此示例中,参数按名称进行匹配:

param([string]$location, [int]$size)
复制代码

可以从命令行中省略名称。 例如:

.\setupEnvironment.ps1 5 "East US"
复制代码

在该脚本中,当参数未命名时,你依赖位置进行匹配:

param([int]$size, [string]$location)
复制代码

查找命令

cmdlet(发音为“command-let”)是已编译的命令。 可在 .NET 或 .NET Core 中开发 cmdlet,并在 PowerShell 中将其作为命令进行调用。 PowerShell 安装中提供了数千个 cmdlet。 难点在于了解它们是什么,以及它们能为你解决什么问题。

Cmdlet 根据动词-名词命名标准命名。

使用 Get-Help 来发现命令

使用 Get-Help cmdlet 了解 cmdlet

  1. 输入 help 命令:

    help Get-FileHash
    复制代码

    现在将显示更精简的帮助输出版本。 此输出类似于以下文本:

    NAME
     Get-FileHash
    ​
     SYNTAX
         Get-FileHash [-Path] <string[]> [[-Algorithm] {SHA1 | SHA256 | SHA384 | SHA512 | MD5}] [<CommonParameters>]
    ​
         Get-FileHash [-LiteralPath] <string[]> [[-Algorithm] {SHA1 | SHA256 | SHA384 | SHA512 | MD5}] [<CommonParameters>]
    ​
         Get-FileHash [-InputStream] <Stream> [[-Algorithm] {SHA1 | SHA256 | SHA384 | SHA512 | MD5}] [<CommonParameters>]
    ​
    ​
     PARAMETERS
         -Algorithm <string>
    复制代码

    可使用箭头键,按行垂直移动结果。 若要逐页查看结果,请使用空格键。

使用 Get-Member 发现对象

Get-Member cmdlet 将基于命令进行传递,以便可以筛选输出。 Get-Member 的典型命令行调用如以下示例所示:

Get-Process -Name 'name-of-process' | Get-Member
复制代码

此命令首先通过调用 Get-Process 生成对象结果。 该结果通过使用管道 (|) 作为输入传递给 Get-Member。 在返回结果中,你将获得一个表,其中包含 NameMemberTypeDefinition 列。 你还会获得返回对象的类型。

探索 PowerShell

PowerShell 的一项重要功能是其内置的帮助系统,便于你轻松访问 PowerShell 命令的相关信息。 如果在编写过程中遇到麻烦,则可以通过使用 Get-Help 命令来查找有关命令或 PowerShell 概念的帮助信息。 例如,若要查看 Write-Output 命令的所有详细信息,则可以键入并运行下面的命令:

Get-Help -Name 'Write-Output' -Full
复制代码

开始实践

使用你已经学过的技术来打印一条消息,然后收集用户输入,以便在第二条消息中重用。 前面,你只用一行代码显示了一条消息。 然后,你请求用户提供输入,并重用了此值来打印自定义消息。 使用这两种技术应对这一挑战。

无论你如何操作,代码都应生成如下输出。 在此示例中,将占位符文本 <current date> 和 <your name> 替换为你选择的值。

Today's date is <current date>.
Today is the day <your name> began their PowerShell programming journey.
复制代码

你的代码应该像这样

$date = Read-Host "What is today's date"
$name = Read-Host "Please enter your name"
Write-Output "Today's date is $date."
Write-Output "Today is the day $name began their PowerShell programming journey."
复制代码

猜你喜欢

转载自juejin.im/post/7032995243821793316