PowerShellのジャンプスタート(パートI)

自動化のみ。 PowerShellのみ。



まえがき


趣味として、また時間のあるときに、UKIT(旧モスクワ州立情報技術大学)の学生に教えています。 現時点では、学生グループにそれを捧げる時間はほとんどありませんが、Habréで投稿を準備するだけで十分です。

私は、ITリソースを大量に持っているIT以外の大企業でシステム管理者として働いています。 アクティビティの性質上、ユーザーサービスの多数の同様のタスクを解決するようです。

私は2年ほど前にPowerShell言語に精通しましたが、その巨大な機能を最初に認識せずに、1年後に初めてPowerShell言語に慣れました。 記事では、まず、PowerShellでの作業を開始したいが、これまで彼を信頼していないか、この奇跡に近づく側がわからないという人々に導かれます。

注意:PowerShellは中毒性があります。

はじめに


ウィキペディアは次のように語っています。
Windows PowerShellMicrosoftの拡張可能な自動化ツールであり、コマンドラインインターフェイスと付属のスクリプト言語を備えたシェルで構成されています。

PowerShellはコマンドラインのように見えます。


powershell.exe

またはアプリケーションとして:


powershell_ise.exe

Powershell_ise.exeは、統合スクリプト環境-Windows PowerShell ISEと呼ばれます。 構文の強調表示、コマンドデザイナー、TABキーを押すことによるコマンドのオートコンプリート、その他の機能を備えた便利な環境で、言語を操作できます。 スクリプトの作成とテストに最適です。

powershell.exeまたはpowershell_ise.exe環境を開始するには、実行行に同じ名前を入力するだけです。



PowerShellスクリプトファイルの拡張子は.ps1です。



スクリプトは、ダブルLMBで開始できません。 これは、スクリプトを誤って実行してシステムに害を与えないように特に行われます。

開始するには、PCMを右クリックして、[PowerShellを使用して実行]を選択します。



LMCスクリプトの実行には制限があるという事実に加えて、システムでのスクリプトの実行はデフォルトで禁止されています。これも上記の理由により、システムに害を与えません。 現在の実行ポリシーを確認するには、次のコマンドを実行します。

Get-ExecutionPolicy 




次の値のいずれかを取得します。 高い確率で、これが最初の起動であった場合、 制限されます。



実行してテストするには、次のコマンドを実行してポリシーをRemoteSignedに下げます。

 Set-ExecutionPolicy RemoteSigned 




仕事を始める


コマンドレット



たとえば、現在のプロセスを取得するには、次のコマンドを実行します。

 Get-Process 


そして結果が得られます:



自分でやってみてください:

 Get-Service #   ,    


 Get-Content C:\Windows\System32\drivers\etc\hosts #   .   ,  hosts 


すべてのコマンドレットを暗記する必要はありません。 Get-Helpは状況保存します。
次のコマンドを入力すると、使用可能なすべてのコマンドレットに関する情報を取得できます。

 Get-Help -Category cmdlet 


PowerShell ISEを使用すると、開発プロセスが容易になります。
コマンドレットを入力した後、ダッシュ「 - 」を入力するだけで十分です。パラメーターとそのタイプのすべての可能なオプションを取得します。



やってみてください:

 Get-Service -Name p* 


それでも、特定のコマンドレットのプロパティを忘れた場合は、 Get-Memberで実行します。

 Get-Process | Get-Member # "|"  .   . 




情報が足りませんか? -Examplesパラメーターのヘルプを参照してください。

 Get-Help Get-Process -Examples 


Get-Processの説明と、使用例を示します。





やってみてください:

 Start-Process notepad 


エントリに似ています:

 start notepad 


プロセスを停止します。

 Stop-Process -Name notepad 


または:

 spps -Name notepad 


コマンドレットは、動詞-名詞規則に従って名前が付けられることを少し前に述べました。 動詞がGetである必要はないことを明確にします。 受け取ることができるものに加えて、設定(Set-ExecutionPolicyを思い出してください)、開始、停止、出力、 新規作成、その他多数の作成を行うことができます。 コマンドレットの名前は何に限定されるものではありません。独自のコマンドレットを作成するときに、好きな名前を付けることができます。

ファイルに出力してみましょう:

 "Hello, Habr!" | Out-File C:\test.txt & C:\test.txt 


ところで、同様に、これを書くことができます:

 "Hello, Habr!" > C:\test.txt & C:\test.txt 


コメント

コメントを使用することは良い形です。

PowerShellのコメントは小文字- およびブロック- <# ... #>です。



例のコードに注意してください。

 Get-WmiObject -Class Win32_OperatingSystem | SELECT Caption 


古き良きVBScriptでこれを行うWMIに精通している人のために、どれだけのコードを書く必要があるか覚えていますか?

 On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48) For Each objItem in colItems Wscript.Echo "Caption: " & objItem.Caption Next 


コンベアベルト

パイプライン( | )-あるコマンドの出力を別のコマンドで処理するための入力に転送します。 先にパイプラインを使用して、オブジェクトのすべてのプロパティを取得するか、前の例ではデータセットからCaptionフィールドのみを選択しました。

パイプラインの原理を理解するために、コードを実行してみましょう。

 Get-Service | Sort-Object -property Status 


どうなるか:すべてのサービス(Get-Service)を取得し、受信したすべてのサービスを並べ替えてSort-Objectコマンドレットに転送し、Statusパラメーターで並べ替えることを示します。 結論として、まず停止ステータスのすべてのサービスを受け取り、次に実行ステータスのすべてのサービスを受け取ります。

以下の例では、最初に実行中のすべてのサービスを取得します。 最初のパイプラインの後、各要素を調べて、実行中のステータスを持つサービスのみを選択し、2番目のパイプラインで、出力にサービスの表示名のみを表示することを選択します。

 Get-Service | WHERE {$_.status -eq "Running"} | SELECT displayname 


この例では、 $ _を使用します。 このエントリは、パイプライン内の現在のアイテムを意味します。



あとがき


このパートでは、PowerShellの実行方法を学び、スクリプト実行ポリシーを見つけました。 コマンドレットが何であるかを理解し、パイプラインに沿ってコマンドレットを転送する方法と、プロパティを取得する方法を知っています。 何かを忘れた場合は、Get-Helpを忘れないでください。

この知識はすべて、最初に言語に飛び込むために必要です。 私を信じて、もっともっと面白いことがあります!

継続するには...



追加情報



Source: https://habr.com/ru/post/J242425/


All Articles