阻止PowerShell Select-String将冒号解析为驱动器号

时间:2016-08-29 18:24:26

标签: powershell powershell-v5.0

我每次打开PowerShell窗口时都会执行一个配置文件。由于我做了一些SSH,我需要确保在启动PowerShell后立即添加。但我想避免询问我的密码短语,只要它已经添加到 ssh-agent 中。这个问题的解决方案描述为here,但是对于Linux shell。

我已将此处描述的解决方案转换为PowerShell等效项,如下所示:

$ssh_add = "$env:ProgramFiles/Git/usr/bin/ssh-add.exe"
$ssh_keygen = "$env:ProgramFiles/Git/usr/bin/ssh-keygen.exe"
$my_key_path = "$env:USERPROFILE/.ssh/id_rsa"

$my_ssh_key = & $ssh_keygen -lf $my_key_path
$ssh_keys = & $ssh_add -l

if (!(Select-String -Pattern $my_ssh_key -Path $ssh_keys -SimpleMatch -Quiet))
{
    & $ssh_add -t 5h $my_key_path
}

SSH密钥碰巧包含冒号,PowerShell似乎认为它是驱动器号。这会导致以下错误消息:

Select-String : Cannot find drive. A drive with the name '4096 SHA256' does not exist.

以下表格中的SSH密钥:

$my_ssh_key = 4096 SHA256:somelongSSHkey some.email@stackoverflow.com (RSA)
$ssh_keys = 4096 SHA256:anotherlongSSHkey /c/Users/MyUser/.ssh/id_rsa (RSA)

如何防止将冒号解析为驱动器号分隔符?

1 个答案:

答案 0 :(得分:2)

angular.module('SteroidsApplication', [ 'supersonic' ]) .controller('IndexController', function($scope, supersonic) { $scope.newDay= function(){ supersonic.logger.log("Got here"); $scope.dayTitle= $scope.day; } }); 应该是一条路径。您提供给它的价值自然会被解释为一条路径。你可以逃脱冒号,但这并不能解决你告诉-Path在没有路径的情况下将某些东西视为路径的问题。

您希望Select-String(可以缩短,因为所有PS参数都可以)参数,您现在正在使用-InputObject。这将匹配文字字符串,而不是将其视为要搜索的文件。您也可以将-Path的内容管道传输到$ssh_keys,而不是指定任何路径。

Select-String

有关完整文档,请参阅https://technet.microsoft.com/library/hh849903.aspx