PowerShellでGoパックを見つける

Powerhell



みなさんこんにちは! 私のお気に入りの言語の1つはGoです。その結果、Package Manager ...まあ、少なくともパケット検索エンジンのようなものを書くことを考えました。 アイデアがあります。開発のために座ってみましょう。 もちろん、まず第一に、Goを問題を解決するツールとして考えました。 しかし、少し熟考した後、私はPowerShellに手招きをする機会を与えることにしました。その研究のために、すでに3回座っていましたが、何かが絶えず私を止めました(ほとんどの場合、怠lazとそれを実装できるプロジェクトの欠如)。 さて、言った-完了。 この記事は、PowerShellに慣れていないが、プログラミングの経験がある人を対象としています。 興味があれば、猫へようこそ。



手始めに、PSが何であるかを知っておくといいでしょう。 ウィキペディアは次のように述べています:



ウィキペディア
Windows PowerShellは、コマンドラインインターフェイスと付属のスクリプト言語を備えたシェルで構成される、Microsoftの拡張可能なオープンソース自動化ツールです。



今、あなたはビジネスに取りかかることができます。 初心者が最初に遭遇する問題は、サードパーティのスクリプトの実行の禁止です。 マイクロソフトのスタッフは私たちのセキュリティに関心がありますが、私たちが何をしているかを理解しています;)。 この迷惑な問題を修正しましょう。 次のようなPowerShellウィンドウを開きます。



Powerhell



そして、次のコマンドを実行します。



Set-ExecutionPolicy RemoteSigned
      
      





システムは、あなたが何をしているかを知っているかどうかを尋ねます。

一般的に、PowerShellはコマンドレットに基づいています。 これらの構文は次のとおりです。



<動詞>-<名詞>



これは、これから何が起こるのかを理解できるようになるため、非常に便利です。 コマンドレットに加えて、CMDだけでなくBashのほとんどの標準コマンドのエイリアスもあります。 たとえば、画面をクリアします。 このための標準コマンドレットはClear-Hostですが、エイリアス(clsおよびclear)を使用することもできます。 エイリアスのリストは、Get-Aliasチームにあります。



それで、PowerShellの基本的なセットアップを行い、スクリプトを作成します。 PowerShellスクリプトの拡張子は「* .ps1」です。 コマンドを使用してコマンドレットを開発するためのファイルを作成します。



 New-Item -Path 'C:\work\goPS.ps1' -Type File -Force
      
      





-Pathパラメーターですべてが明確な場合は、残りを把握する必要があります。 -Typeは作成するファイルのタイプを示します。ファイルが必要なため、これを明示的に示します。 -Forceが存在しない場合、パスを作成します。



質問:Goのモジュールのリストはどこで入手できますか? 回答: Go-Searchリソースはこれに役立ち、非常に便利で最も重要な無料のAPIを提供します。 彼らに感謝します。



お気に入りのコードエディターにアクセスできますが、個人的には、システムに親切にプリインストールされているPowerShell ISEを使用することをお勧めします。 モジュールのフレームワークを作成する必要があります。



 function Find-GoPackage { }
      
      





これは今後のコマンドレットです。 PS事は単純ではありません、BashやCMDとは異なり、文字列ではなくオブジェクトで動作します。 フレームワークがありますが、今度はパラメーターについて説明します。 PSの変数は、$ my_varを使用してPHPと同様に設定されます。 さらに、それらは型なしでも型付きでもかまいません。



 #  $no_type # ,  [string]$have_type
      
      





引数のブロックを宣言します。



 [CmdletBinding()] Param ( [string]$Name = "" )
      
      





ご覧のとおり、引数の設定は簡単で、デフォルト値があります。



作業の論理は次のとおりです。 まず、サーバーにリクエストを送信する必要があります。 これを行うにはいくつかの方法がありますが、私にとって最も簡単な方法は、応答のコンテンツを含むオブジェクトを返すInvoke-WebRequestを使用することです。



変数を紹介します:



 $uri = "http://go-search.org/api?action=search&q=" + $Name
      
      





PowerShellはパイプラインをサポートしています。 サーバーからの応答はjsonの形式で送られますが、すでに私たちのことを考えてくれた親切な人々に感謝します。 PSには、オブジェクトの標準シリアライザーとデシリアライザーがあります。 ConvertFrom-Jsonは、Json文字列を取り、jsonフィールドを持つ生のオブジェクトを返します。 十分な言葉、より多くのコード、しかし少数のコード。



 $hits = $($(Invoke-WebRequest -Uri $uri).Content | ConvertFrom-Json).hits
      
      





リンクを呼び出し側に渡し、応答のコンテンツを.Contentフィールドから取得して、パイプライン(パイプラインは「|」)を介してConvertFrom-JSONに渡します。 次に、見つかったモジュールのリストを含む.hitsフィールドに興味があります。 1行ですべての作業が完了しました!



リストを返すだけです。これは非常に簡単です。



 return $hits
      
      





完全なリストを提供します:



 function Find-GoPackage { [CmdletBinding()] Param ( [string]$Name = "" ) $uri = "http://go-search.org/api?action=search&q=" + $Name $hits = $($(Invoke-WebRequest -Uri $uri).Content | ConvertFrom-Json).hits return $hits }
      
      





もう一度、PowerShellに移動して、モジュールをセッションにインポートします。



 PS C:\ >. “C:\work\goPS.ps1”
      
      





PowerShellはスクリプトを分析し、準備ができています。



たとえば、コマンド「Find-GoPackage -Name json」を実行して、jsonを操作するために見つかったモジュールのリストを取得しますが、美しさのために、フォーマットを追加することもできます。



 Find-GoPackage json | Format-Table -Wrap -AutoSize
      
      





出口にきちんとしたプレートがあります。



確かに、毎回モジュールをインポートするのは便利ではないため、興味深いことが1つあります。PSにはプロファイルのシステムがあります。 プロファイルは、ターミナルを開くたびに実行されるファイルです。



PSで次を入力します。



 Test-Path $PROFILE
      
      





$ PROFILEは、プロファイルファイルへのパスを含む環境変数です。 上記のコマンドが$ falseを返した場合、プロファイルは構成されていません。 この場合、次のコマンドを実行します。



 New-Item -Path $PROFILE -Type File -Force
      
      





このファイルを開きます:



 notepad $PROFILE
      
      





上記のコードをファイルにコピーし、保存してPowerShellを再起動し、すべてが機能することを確認します。



ご覧いただきありがとうございます!



All Articles