PowerShell 完美的小调整

使用这些技巧自定义 PowerShell,使其更加高效。
258 位读者喜欢这篇文章。
open source button on keyboard

Opensource.com

我爱上了 PowerShell。它是脚本(power)中功能丰富和可读性以及命令行(shell)中简洁性的完美结合。但是,关于 PowerShell 跨平台开源的强大功能的滔滔不绝最好留给另一篇文章(我已经写过一篇,如果你想让你的生命有意义,你必须阅读它)。

一旦你将 PowerShell 接受到你的内心和笔记本电脑上,本文中的技巧可以帮助你按照自己的喜好调整 PowerShell,享受数小时的 PowerShell 乐趣。

配置启动设置

Bash 用户会熟悉 .bashrc.bash_profile 文件,其中包含每次 shell 实例启动时运行的命令。PowerShell 也有类似的文件,但其位置是系统特定的。该文件的完整路径在 PowerShell 的 $profile 变量中可用。如果您希望使用下面描述的任何或所有调整,只需将它们放入此文件中即可。

叮咚,叮咚死了

如果您在 Windows 上运行 PowerShell(别担心,我们不会评判),您可能会遇到一个小小的听觉滋扰:如果您在空提示符下按退格键,您可能会听到烦人的铃声。您可以使用以下命令将其关闭

Set-PSReadlineOption -BellStyle None

在 Windows 上使用 Tab 键

Tab 补全是 PowerShell 最令人惊叹的功能之一。当您在 Linux 或 MacOS 上键入 cmdlet 或参数的一部分,然后按 Tab 键时,PowerShell 将向您显示您键入的 cmdlet 或参数的所有可能的补全。您甚至可以只键入 cmdlet 的名称,后跟一个连字符,然后按 Tab 键以快速查看所有参数

PS /home/yevster/Documents/ArticlesInProgress> Get-Command -                    
Name                  ArgumentList          InformationAction                   
Verb                  All                   ErrorVariable                       
Noun                  ListImported          WarningVariable                     
Module                ParameterName         InformationVariable                 
FullyQualifiedModule  ParameterType         OutVariable                         
CommandType           Verbose               OutBuffer                           
TotalCount            Debug                 PipelineVariable                    
Syntax                ErrorAction                                               
ShowCommandInfo       WarningAction     

不幸的是,Windows 上的默认行为是不同的。当您在 Windows 上键入 cmdlet 或参数的一部分时,PowerShell 将仅提供第一个可用的补全。然后您可以再次(以及一遍又一遍)按 Tab 键以循环浏览其他补全。真糟糕!

幸运的是,修复这种令人憎恶的行为比描述它花费的时间要少得多。只需将此行添加到您的 $profile

Set-PSReadlineOption -EditMode Emacs

白色上的污点

如果您已将终端配置为在白色背景上使用黑色文本,则在使用 PowerShell 时可能会遇到丑陋的情况

powershell white on white

尽管 PowerShell 继承了父终端的背景色和前景色,但它独立地为命令行上的特定标记着色。例如,默认情况下,对象成员和数字被着色为白色,这使得它们在白色背景上难以看到。

幸运的是,通过将这个小宝石放入您的 $profile 中,这个问题很容易解决

$colorScheme = @{
    None      = "Black";
    Comment   = "DarkMagenta";
    Keyword   = "DarkGreen"; 
    String    = "DarkBlue";
    Operator  = "DarkRed";
    Variable  = "DarkGreen";
    Command   = "DarkRed";
    Parameter = "DarkGreen";
    Type      = "DarkGray";
    Number    = "DarkGray";
    Member    = "DarkGray";
}

$colorScheme.Keys | % { Set-PSReadlineOption -TokenKind $_ -ForegroundColor $colorScheme[$_] }

随意调整上面的 $colorScheme 映射以符合您的喜好(就好像您需要我的许可一样)。您可以通过键入 [ConsoleColor].GetEnumNames() 来查看所有可用的颜色选项。

使其提示

您可以自定义 PowerShell 提示符以显示您想要的任何内容:时间、您的用户名、关于您同事的侮辱。要自定义提示符,您只需定义一个名为 prompt 的函数。此函数返回的字符串将是您的 PowerShell 提示符。

这是我的提示符通常的样子

07:10PM /home/yevster>

我说“通常”是因为我添加了一个漂亮的小调整:当命令(或 cmdlet)以错误状态退出时,我已经操纵 PowerShell 让我知道

powershell error

当如上例所示,写入标准错误的消息被可悲地抑制时,看到返回状态可能会有所帮助。

以下是我在我的 $profile 中配置 PowerShell 提示符的方式(您也可以这样做)

function prompt {
	$lastResult = Invoke-Expression '$?'
	if (!$lastResult) {
		Write-Host "Last command exited with error status." -ForegroundColor Red
	}
	Write-Output "${msg}$(
		# Show time as 12:05PM
		Get-Date -UFormat "%I:%M%p"
		# Show current directory
	) $(Get-Location)> "  
}

关键在于组合键

PowerShell 提供了大量方法来最大限度地减少输入。Tab 补全是一种。别名是另一种。这里还有一种:您可以配置 PowerShell 以响应您选择的组合键(组合键)来执行特定的脚本块。

让我们想象一下,我是一个社交媒体成瘾者,并希望轻松地强迫性地查看 Facebook。我会将此行添加到我的 $profile

Set-PSReadlineKeyHandler -Chord Ctrl+F -ScriptBlock { google-chrome https://# } 

由您来确保您指定的组合键尚未被您的终端应用程序使用。如果是,则组合键可能不会中继到 PowerShell。

以下是组合键绑定功能更有效率的用法:使用一个快速的组合键将更改提交到 Git 并将其推送到远程仓库 origin

Set-PSReadlineKeyHandler -Chord Ctrl+G -ScriptBlock {
	$message = Read-Host "Please enter a commit message"
	/usr/bin/git commit -m "$message" | Write-Host
	$branch = (/usr/bin/git rev-parse --abbrev-ref HEAD)
	Write-Host "Pushing ${branch} to remote"
	/usr/bin/git push origin $branch | Write-Host
}

注意: 通过组合键启动的任何命令的标准输出都不会显示在终端中。如果您确实想在终端中看到命令的输出,请将其管道传输到 Write-Host CMDlet,就像我在上面的示例中所做的那样。

结局好一切都好

既然您已经勇敢地忍受了我令人发指的双关语走到这里,我希望您在此过程中使您的 PowerShell 更加愉快地使用。如果您有我错过的任何喜欢的技巧,我很乐意看到它们。请评论和/或 在 Twitter 上给我发推文

PowerShell 愉快!

标签
User profile image.
软件工程师,具有开源治理倾向。偶尔的开发者推广者。所有意见均为我个人观点。脑力劳动成果在此。

9 条评论

PowerShell 是开源的吗?

感谢这篇文章。:)

很高兴知道您终于可以在 Windows 中拥有一个像样的 shell 了。当我在 VM 上安装 Win10 时,它已经在那里了,我不需要去找它。

谢谢 - 如果您能详细说明创建 $profile 的最佳方法并“修复”它以便它在登录时运行,那将很有用。

很棒的文章。我少数几次需要使用 PS 都非常
令人沮丧,而这篇文章涵盖了我的大部分挫败感。

我很惊讶您没有提到内置的 IDE,powershell_ise。
我绝对更喜欢这个而不是记事本,ps1 文件的默认程序。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell_ise.exe

目前我将坚持在 Windows 10 上通过 WSL 使用 Ubuntu 中的 bash,但感谢您的宣传。我会记住的。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.