自動化のみ。 PowerShellのみ。

まえがき
趣味として、また時間のあるときに、UKIT(旧モスクワ州立情報技術大学)の学生に教えています。 現時点では、学生グループにそれを捧げる時間はほとんどありませんが、Habréで投稿を準備するだけで十分です。
私は、ITリソースを大量に持っているIT以外の大企業でシステム管理者として働いています。 アクティビティの性質上、ユーザーサービスの多数の同様のタスクを解決するようです。
私は2年ほど前にPowerShell言語に精通しましたが、その巨大な機能を最初に認識せずに、1年後に初めてPowerShell言語に慣れました。 記事では、まず、PowerShellでの作業を開始したいが、これまで彼を信頼していないか、この奇跡に近づく側がわからないという人々に導かれます。
注意:PowerShellは中毒性があります。はじめに
ウィキペディアは次のように語っています。
Windows PowerShellはMicrosoftの拡張可能な自動化ツールであり、コマンドラインインターフェイスと付属のスクリプト言語を備えたシェルで構成されています。
PowerShellはコマンドラインのように見えます。
powershell.exeまたはアプリケーションとして:
powershell_ise.exePowershell_ise.exeは、統合スクリプト環境-Windows PowerShell ISEと呼ばれます。 構文の強調表示、コマンドデザイナー、TABキーを押すことによるコマンドのオートコンプリート、その他の機能を備えた便利な環境で、言語を操作できます。 スクリプトの作成とテストに最適です。
powershell.exeまたは
powershell_ise.exe環境を開始するには、実行行に同じ名前を入力するだけです。

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

スクリプトは、ダブルLMBで開始できません。 これは、スクリプトを誤って実行してシステムに害を与えないように特に行われます。
開始するには、PCMを右クリックして、[PowerShellを使用して実行]を選択します。

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

次の値のいずれかを取得します。 高い確率で、これが最初の起動であった場合、
制限されます。
- 制限付き -スクリプトは実行できません。
- AllSigned-信頼できる発行元によって署名されたスクリプトのみを実行できます。 信頼できる発行元スクリプトを実行する前に、確認が要求されます。
- RemoteSigned-信頼できる発行元によって署名されたスクリプトを作成およびダウンロードしたスクリプトを実行できます。
- 無制限 -制限はありません。すべてのスクリプトを実行できます。
実行してテストするには、次のコマンドを実行してポリシーを
RemoteSignedに下げます。
Set-ExecutionPolicy RemoteSigned

仕事を始める
コマンドレット
- コマンドレットは、さまざまな機能を含むPowerShellコマンドです。
- コマンドレットは、システムまたはユーザーが作成したユーザーのいずれかです。
- コマンドレットは、動詞と名詞の規則に従って名前が付けられ、暗記が簡単になります。
- コマンドレットは、結果をオブジェクトまたはそのコレクションの形式で表示します。
- コマンドレットは、処理用のデータを受信するか、パイプラインを介してデータを転送できます(パイプラインについて)。
- コマンドレットは大文字と小文字を区別しません(get-process、Get-Process、およびGeT-pRoCeSsを記述できます)。
- 同じ行で複数のコマンドレットを実行する場合(Get-Process; Get-Services)を除いて、コマンドレットの後に「 ; 」を置く必要はありません。
たとえば、現在のプロセスを取得するには、次のコマンドを実行します。
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の説明と、使用例を示します。

- コマンドレットには短縮名(エイリアス)を付けることができます。 たとえば、 Get-Helpの代わりに、 Helpのみを使用できます。 すべての略語について、 Get-Aliasを実行します。
やってみてください:
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を忘れないでください。
この知識はすべて、最初に言語に飛び込むために必要です。 私を信じて、もっともっと面白いことがあります!
継続するには...
追加情報