我爱上了 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 继承了父终端的背景色和前景色,但它独立地为命令行上的特定标记着色。例如,默认情况下,对象成员和数字被着色为白色,这使得它们在白色背景上难以看到。
幸运的是,通过将这个小宝石放入您的 $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 让我知道

当如上例所示,写入标准错误的消息被可悲地抑制时,看到返回状态可能会有所帮助。
以下是我在我的 $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 愉快!
9 条评论