2016-08-29 8 views
0

PowerShellウィンドウを開くたびに実行されるプロファイルがあります。私はSSHを行っているので、PowerShellを起動した直後に私が追加されるようにする必要があります。しかし、SSHのパスフレーズには、すでにssh-agentに追加されている限り、私はパスフレーズを要求しないようにしたいと思います。この問題の解決策は、hereと記載されていますが、Linuxシェルの場合は説明しています。私は解決策は以下のとおりであるPowerShellの同等にそこに記載変換したPowerShell Select-Stringがドライブ文字としてコロンを解析しないようにする

$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) 

どのように私は、ドライブ文字の区切り文字として解析されてからコロンを防ぐことができますか?

答えて

2

-Pathをパスとする。あなたがそれに提供している価値は、当然、パスと解釈されます。あなたはコロンからエスケープすることができますが、それはパスでないとき何かをパスとして扱うようにSelect-Stringに伝えるというあなたの問題を解決しません。

今すぐ-Pathを使用している場合は、-InputObject(すべてのPS引数が可能なので省略可能)のパラメータを設定します。これは、リテラル文字列を検索するファイルとして扱うのではなく、リテラル文字列と一致します。代わりに$ssh_keysの内容をSelect-Stringにパイプし、パスを指定することもできます。

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

詳しくは、https://technet.microsoft.com/library/hh849903.aspxを参照してください。

+0

'-InputObject'を使用し、それを' Select-String'にパイプで渡す例を提供できますか? – tambre

+0

例が追加されました。パイプの使用を含むもっと多くの例については、ドキュメントを参照してください。 – CBHacking

関連する問題