我已经开始为一家使用完整 Windows 堆栈的公司工作。我感觉我的工作效率倒退了,不是因为 Windows 功能不够强大,而是因为我对环境真的不熟悉。我发现自己经常在 Powershell 上头疼,举手投降,然后把我想在 Cygwin 中做的事情都搞砸了。我觉得这是一个肮脏的解决方案,我更愿意在合适的 Windows 环境中安心工作。
话虽如此,像我这样的初学者应该如何在 get-command 的输出中搜索我想要执行的常规 cmdlet?我知道我应该在对象空间中思考,那么有没有一种优雅的方法来搜索所呈现的属性,以便我可以执行诸如查找特定 cmdlet 是否有别名或搜索 cmdlet 是否可用之类的操作?(正在寻找符号链接 cmdlet,如果可能的话,我更愿意留在命令行中而不是谷歌搜索)。
缺少 grep/piping 让我抓狂。我肯定漏掉了什么,针对我的困境,有什么建议吗?
答案1
好吧,我希望在启动 PowerShell 时就知道以下一些事情:
要检查命令是否存在,你可以执行以下操作:
Get-Command *Item*
要查看对象具有哪些属性,您可以执行以下操作:
$Items = Get-ChildItem -Path C:\
$Items | Get-Member
要查看是否存在可以使用的别名:
Get-Alias -Definition Get-ChildItem
最后看看如何使用您可以使用的命令:
Get-Help Get-ChildItem
此外,PowerShells Pipline 是其最强大的卖点之一,您知道“|”管道符号吗?
答案2
我将使用缩写形式,假设您在命令行中输入内容并且希望提高速度。在脚本中,我喜欢使用全名,以便于维护。
查明特定 cmdlet 是否有别名
这可行,但我永远记不住:
PS> gal -def get-childitem
所以我使用查询来代替:
PS> gal | ? { $_.Definition -eq "Get-ChildItem" }
?
是 的别名Where-Object
,因此这就是您过滤输出的方式。
搜索是否有可用的 cmdlet?(正在寻找符号链接 cmdlet,如果可能的话,宁愿留在 cmdline 中,而不是进行谷歌搜索)。
我可能会尝试:
PS> help *link*
但是我经常去 Google,它又让我回到了 StackOverflow(当然!)https://stackoverflow.com/questions/894430/powershell-hard-and-soft-links