PowerShell编辑Cmdlet /创建新的/合并Cmdlet

时间:2015-05-17 00:16:25

标签: windows powershell cmdlet

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

首先,我想制作自己的cmdlet,根据需要显示我自己的文字(我想把我经常使用的评论放在那里,因为“get-command&#39;是大的快速搜索,但不知道它是怎么做的。我只使用了回声&#39; cmdlet创建了脚本,但它只显示了一次。

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

第三,如何将Set-Location与Push-Location合并在一起,以便轻松输入&#39; popd&#39;回到上一个目录?

3 个答案:

答案 0 :(得分:1)

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

然而,我并不认为这就是你想要的。您描述的任务可以通过脚本文件和函数来完成,这些文件和函数的开发程度要低一个数量级。

  

首先,我想制作自己的cmdlet,根据需要显示我自己的文字(我想把我经常使用的评论放在那里,因为“get-command&#39;是大的快速搜索,但不知道它是怎么做的。我只使用了回声&#39; cmdlet创建了脚本,但它只显示了一次。

这听起来像一个剧本。请参阅Get-Help about_Scripts。

  

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

您可以使用参数创建一个脚本,以便轻松完成此任务(当您熟悉它时,很容易)。

  

第三,如何将Set-Location与Push-Location合并在一起,以便轻松输入&#39; popd&#39;回到上一个目录?

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

如果您想查看MS文档,我将从Get-Help about_Scripts开始。在Microsoft Virtual Academy完成Getting Started with PowerShell 3.0 Jump Start课程也是值得的,这是我所听到的任何类型的教程之一。你正在谈论的东西从第9部分开始,但老实说,你听起来很新,你可能会从整个班级中受益。

some Microsoft doc有资格作为一个方法,但老实说,这真的很棒。 PowerShell的整体文档中最大的问题是它是一个很好的技术参考,一个平庸的 cookbook ,一个糟糕的用户手册,并且甚至不假装是教程。它适用于已经知道如何使用脚本的人。

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

答案 1 :(得分:0)

我认为您要做的是在配置文件中定义自己的函数/别名,每次启动shell时都会加载它们。

要创建空白个人资料(您可能希望测试一下您还没有Test-Path $profile):

New-Item $profile -Type File -Force

然后你可以在记事本,ISE或其他任何东西中编辑它,并添加函数和别名。

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

修改现有cmdlet是一个高级主题,但这可以通过proxy functions完成。但是,我认为你现在应该坚持只定义自己的函数和别名,如果需要,可以回过头来讨论代理函数。

答案 2 :(得分:0)

第一

高级功能

Get-Help about_advanced_functions

您正在寻找的术语是函数,特别是cmdletbinding()的高级函数。这使您可以构建自己的函数,这些函数充当命令行,甚至是调试,whatif,命名参数集,pipleline输入等。

资料

Get-Help about_Profiles

将常用功能存储在文件中,并使用您的配置文件每次都执行它。

别名

Get-Help alias get-aliasgal列出所有当前定义的别名。几乎所有常用命令都有CLI别名。 (在脚本中使用它们会让你的脚本难以理解,包括我在内的很多人认为。)

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

模块

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

ISE Snippets

Edit, Start SnippetsCTRL+J

第二

Get-ChildItemgcidirls允许您指定路径(位置参数),默认排序是按名称。

如果要更改目录,并强制按名称排序的目录列表,可以使用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一个驱动器,看看如何在一个地方学习命令,你真的在​​学习很多其他的在同一时间。