Linux和Powershell

2021-01-20 00:17:09

Powershell是2006年出生于Microsoft的基于对象的Shell,十年后成为开源软件。它的特征是称为cmdlet的命令,这些命令遵守某种模式。 cmdlet示例如下:

有问题的模式是动词-名词-Option参数,其中动词是动词列表。名词是对命令动词有影响的描述。相反,该选项前面带有破折号及其名称。跟随,该选项的所有参数。

可读性:如果您阅读该命令,则知道它的作用。例如,上一条命令显示:我得到给定路径的所有子对象(文件和文件夹)。

标准:遵循如此严格的标准,可以引入各种新命令,这些命令已经知道(由于可读性)它们的作用。

Linux有一个很棒的脚本工具:bash。 Bash是一个外壳程序,为我们提供了一种非常简单但有效的脚本语言来编写各种自动机。 bash的唯一问题是任何输出都是字符串,必须将其视为字符串。因此,我们在Powershell中使用与示例相同的任务;我们在给定路径中列出文件和目录:

该命令产生的输出是一个字符串,因此,如果我们需要搜索某些内容,则必须通过管道将输出作为另一个命令的输入。

每个powershell输出都是一个对象。每个对象都有其自己的属性,可以通过其他cmdlet使用这些属性。例如,上面的命令将输出System.Array类型。此类对象可以由迭代器(例如for循环)或过滤器cmdlet(例如Where-Object)使用。

Powershell是Linux发行版的出色工具,因为它提供了一系列命令,这些命令对于开发使用简单字符串很难实现的工具和自动程序非常有用。

根据您的发行版,在Linux上安装Powershell是一项相当简单的任务。如果您拥有Debian或Ubuntu,我们可以通过snapd进行安装,如下所示:

powershell的优点之一是可以将命令和各种代码部分保存在脚本和模块文件中。

要创建脚本文件,只需将powershell写入扩展名为.ps1的文件,然后将其解析为pwsh解释器。

#file myscript.ps1#获取最近3天修改的所有文件Get-ChildItem-路径path -Recurse |哪里对象{$ _。 LastWriteTime -gt(Get-Date)。 AddDays(-3)}

我们创建了一个脚本,该脚本可以告诉我们最近3天中所有已更改的文件。太棒了现在从命令行调用它:pwsh myscript.ps1

并非所有任务都是顺序命令,并且并非所有任务都可以包含在单个powershell文件中。为此,我们将使用模块来收集我们的功能。

让我们以较早的脚本为例。让我们将其转换为功能并将其放入模块中。该模块由扩展名为.psm1的模块文件和扩展名为.psd1的模块清单文件组成。首先,让我们创建模块。

$ mkdir mymodule $ touch mymodule / mymodule.psm1 $ pwshPowerShell 7.1.1版权所有(c)Microsoft Corporation.https://aka.ms/powershellType' help'获得帮助。PS> New-ModuleManifest -Path mymodule / mymodule.psd1 -ModuleVersion" 0.0.1" -作者"您的名字在这里"

我们已经创建了模块的结构。现在,让我们执行一个包含上述脚本的名为Get-LastThreeDaysModifiedFiles的函数。

#mymodule / mymodule.psm1新别名-Name" ls3" Get-LastThreeDaysModifiedFiles函数Get-LastThreeDaysModifiedFiles($ Path){Get-ChildItem -Path $ Path -Recurse |哪里对象{$ _。 LastWriteTime -gt(Get-Date)。 AddDays(-3)}}

现在,编辑mymodule.psd1清单文件,以添加我们的函数和别名以进行导出。找到这两个变量并按如下所示对其进行编辑:

现在,将我们的模块文件夹mymodule复制到以下路径(对于所有用户)/ usr / local / share / powershell / Modules或〜/ .local / share / powershell / Modules(对于您的用户),然后打开新的powershell会话:

当然,可以从官方存储库安装模块以用于各种用途。例如,在Linux发行版中,如果您是非SQL数据库(例如CouchDB)的管理员,则PSCouchDB模块非常有用。

该模块简化了定义CouchDB特征结构的数据库和文档的管理。 另外,您可以使用curl,但是用于复杂任务的命令将非常长。 最后,Powershell的总体目标是帮助最终用户编写简单和复杂的任务脚本。 Bash是执行许多任务的出色工具,但由于其面向对象的结构,Powershell可以帮助解决一些问题,例如过滤复杂的输出。 绝对是许多活动的绝佳选择。