Запретить PowerShell Select-String анализировать двоеточие как букву диска

У меня есть профиль, который запускается каждый раз, когда я открываю окно PowerShell. Поскольку я использую SSH, мне нужно убедиться, что мой файл добавляется сразу после запуска PowerShell. Но я не хочу запрашивать парольную фразу для SSH, если она уже добавлена ​​в ssh-agent. Решение этой проблемы описано здесь, но для оболочки Linux.

Я преобразовал описанное там решение в эквивалент 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 [email protected] (RSA)
$ssh_keys = 4096 SHA256:anotherlongSSHkey /c/Users/MyUser/.ssh/id_rsa (RSA)

Как я могу предотвратить анализ двоеточия как разделителя букв диска?


person tambre    schedule 29.08.2016    source источник


Ответы (1)


-Path должен быть путем. Значение, которое вы ему предоставляете, будет, естественно, интерпретироваться как путь. Вы можете избежать двоеточия, но это не решит вашу проблему указания Select-String рассматривать что-то как путь, когда это не путь.

Вам нужен параметр -InputObject (может быть сокращен, как и все аргументы PS), где вы используете -Path прямо сейчас. Это будет соответствовать буквальной строке, а не рассматривать ее как файл для поиска. Вы также можете вместо этого передать содержимое $ssh_keys в Select-String и не указывать никакого пути.

if (!(Select-String -Input $ssh_keys -Pattern $my_ssh_key -SimpleMatch -Quiet))
...

Полную документацию см. на https://technet.microsoft.com/library/hh849903.aspx. .

person CBHacking    schedule 29.08.2016
comment
Не могли бы вы привести примеры использования -InputObject и подключения его к Select-String? - person tambre; 29.08.2016
comment
Пример добавлен. Дополнительные примеры, включая использование каналов, см. в документации. - person CBHacking; 29.08.2016