【问题标题】:PowerShell Editing Cmdlets/ Making new ones/ Merging CmdletsPowerShell 编辑 Cmdlet/制作新的 Cmdlet/合并 Cmdlet
【发布时间】:2015-05-19 02:56:50
【问题描述】:

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

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

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

三、如何将Set-Location和Push-Location合并在一起,轻松输入'popd'返回上一个目录?

【问题讨论】:

  • 仅供参考——编写 cmdlet 是在 C# 中完成的,而不是在 PowerShell 中。
  • 合并Set-LocationPush-Location是什么意思? Push-Location 将当前位置推送到堆栈将提供程序中的当前位置设置为路径。第二部分是 Set-Location 自己做的。 Push-Location的别名是pushd,逆运算是Pop-Location(别名popd)。
  • 哦,我不知道除了制作目录堆栈之外的 Push-Location 正在更改目录。我的错...对不起,我是 PS 新手。但问题是仍然活着,因为输入“pushd”比输入“cd”需要更多时间。现在我需要弄清楚如何更改/交换 cmdlet 命令..

标签: windows powershell powershell-cmdlet


【解决方案1】:

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

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

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

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

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

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

三、如何将Set-Location和Push-Location合并在一起,轻松输入'popd'返回上一个目录?

这是一个例子吗? 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。

【讨论】:

  • 感谢您的快速响应。我会看看你提到的事情:) 希望我能把事情做好。顺便说一句,我对我在 PS 方面的低经验感到抱歉。这是我想在业余时间学习的东西,以扩展我的基于 IT 的知识(因为我没有像大学那样的 PS 课程),以便在未来的雇主眼中更具吸引力,所以再次感谢。
  • @Emtec165 你不需要为没有PS经验而道歉。无知无耻,只有不愿学习!
【解决方案2】:

首先

高级功能

Get-Help about_advanced_functions

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

简介

Get-Help about_Profiles

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

别名

Get-Help alias get-alias OR gal 列出所有当前定义的别名。几乎所有常用命令都有 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 一个驱动器,看看如何在一个地方学习命令,你真的在​​同时学习许多其他命令.

【讨论】:

    【解决方案3】:

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

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

    New-Item $profile -Type File -Force
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      • 2010-11-09
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多