PowerShell 编辑 Cmdlets/ 制作新的 Cmdlets/ 合并 Cmdlets

PowerShell Editing Cmdlets/ Making new ones/ Merging Cmdlets

我一直在尝试使用 PowerShell 快速搜索 Windows 文件和设置(比 GUI 更快),但在提高搜索速度方面遇到了一些困难,我无法在网络上找到解决方案.

首先,我想制作自己的 cmdlet,它可以按需显示我自己的文本(我想把我定义的常用命令放在那里,因为 'get-command' 对于快速搜索来说太大了,但是不要我不知道该怎么做。我用 'echo' cmdlet 编写了简单的脚本,但它只显示了一次。

其次,如何将Set-Location、Get-ChildItem和Sort-Object合并在一起,快速切换目录并自动显示按名称排序的目录内容列表?它可能是自定义 cmdlet 左右。

第三,如何将 Set-Location 与 Push-Location 合并在一起,以便轻松地键入 'popd' 到 return 到上一个目录?

我觉得你的语言在这里有点混乱。实际的 Cmdlet 是 written in .Net.

但是,我认为这不是您想要的。您描述的任务可以使用脚本文件和函数来完成,它们的开发复杂度要低一个数量级。

First I'd like to make own cmdlet which displays my own text on demand (I want to put there frequently used commends defined by me, cuz 'get-command' is way to big for quick search, but don't know how do it. I made simply script with 'echo' cmdlet, but it's shown only once.

这听起来像剧本。请参阅获取帮助 about_Scripts。

Secondly how to merge together Set-Location, Get-ChildItem and Sort-Object to quickly change directory and automatically display sorted by name list of dir content? It could be custom cmdlet or so.

您可以创建一个带有参数的脚本来非常轻松地完成此操作(好吧,当您熟悉它时很容易)。

Thirdly how to merge together Set-Location with Push-Location to easily type 'popd' to return to previous dir?

这是一个例子吗? Pop-Location 已经存在,并且它已经有别名 popd

如果您想查看 MS 文档,我会从 Microsoft Virtual Academy 的 Get-Help about_Scripts. It also might be worthwhile to complete the Getting Started with PowerShell 3.0 Jump Start class 开始,这是我听过的为数不多的任何类型的教程之一关于。您谈论的内容从第 9 部分开始,但老实说,您听起来很新,您可能会从整个 class.

中受益

some Microsoft doc 可以作为 howto,但老实说,它很随意。总体而言,PowerShell 文档的最大问题在于,它是一份很好的技术参考、一本平庸的说明书、一份糟糕的用户手册,甚至不假装是教程。它适用于已经知道如何使用脚本的人。

我不知道还有其他好的在线教程,但您可能想查看其他地方,例如 /r/PowerShell subreddit。

我想你想要做的是在你的配置文件中定义你自己的 functions/aliases,每次启动 shell 时都会加载它。

要创建一个空白配置文件(您可能想测试一下您是否还没有 Test-Path $profile):

New-Item $profile -Type File -Force

然后您可以在记事本、ISE 或其他软件中编辑它并添加函数和别名。

函数在功能上类似于 cmdlet,只是它们是用 powershell 编写的。 Cmdlet 实际上是用 .NET dll 编写的。别名(例如 cd)仅指向 cmdlets/functions.

修改现有 cmdlet 是一个高级主题,但这可以通过 proxy functions 完成。但是,我认为您现在应该坚持只定义自己的函数和别名,并在需要时提出有关代理函数的更具体的问题。

第一个

高级功能

Get-Help about_advanced_functions

您要查找的术语是函数,特别是具有 cmdletbinding() 的高级函数。这使您可以构建自己的函数,充当命令行开关,甚至可以调试、假设、命名参数集、管道输入等。

简介

Get-Help about_Profiles

将您常用的函数存储在一个文件中,每次使用您的配置文件执行它。

别名

Get-Help alias get-aliasgal 列出所有当前定义的别名。几乎所有常用的命令都有 CLI 别名。 (在包括我在内的许多人看来,在脚本中使用它们会使您的脚本不可读。)

使用别名命令行开关和配置文件设置永久别名。

模块

将您的功能合并到一个可以自动加载和共享的模块中。

ISE 片段

Edit, Start SnippetsCTRL+J

第二

Get-ChildItem or gci or dir or ls 允许指定一个路径(位置参数),默认排序是按名称排序。

如果要更改目录,并强制目录列表按名称排序,您可以使用 cd c:\windows;gci|sort name 或类似这样的东西

第三

(pushd和popd已经是别名了)

Push-Location
# do stuff
Pop-Location

pushd
# do stuff
popd

最后的想法

get-helpget-memberget-aliasget-command 都是非常强大的工具。请记住,Set-Location 和 Get-ChildItem 以及所有 -Location 和 -Item 命令不仅可以用于带字母的驱动器。它们可用于任何 PSDrive。 PSDrives 包括 Registry、AD、Env、Alias、Variable、Function 以及模块添加的其他驱动器等。因此,给 get-psdrive 一个驱动器,看看如何在一个地方学习命令,你真的在​​学习很多其他的东西同时。