Lesson 13

より便利に使う

Lesson 13 Chapter 1
より便利に使う

PowerShellは非常に強力で使いやすいツールですが、より効率的に使用するためにいくつかの便利な機能があります。

このレッスンでは下記のような内容を取り扱います

  • ファイルに書き出したときの文字化けに対処する
  • コンソール画面に出力結果が見切れて表示される問題に対処する
  • バックグラウンド実行をする
  • ジョブを管理する
  • 認証情報を使用する
  • カスタムフォーマットを作成する

これらの機能を使用することで、PowerShellのパフォーマンスを最適化し、作業をよりスムーズに行うことができます。また、これらの機能を知っていることで、より複雑なタスクを実行するためのスキルを身につけることができます。

Lesson 13 Chapter 2
ファイルに書き出したときの文字化けに対処する

PowerShellでファイルに書き出したとき、テキストエンコーディングが適切に設定されていない場合、文字化けが発生することがあります。これは、ファイルに書き出される文字列のエンコーディングが、表示する際に使用されるエンコーディングと異なるためです。

この問題を解決するには、ファイルをUTF-8エンコーディングで出力する必要があります。これを行うには、Out-Fileコマンドレットに-Encoding utf8パラメータを追加します。例えば、次のコマンドを実行すると、出力ファイルをUTF-8エンコーディングで作成できます。

powershell
Get-ChildItem | Out-File -Encoding utf8 C:\output.txt

このコマンドは、Get-ChildItemで現在のディレクトリ内のすべてのファイルとフォルダを取得し、書き込むためのコマンドOut-Fileのオプションとして-Encodingを使用してC:\output.txtにUTF-8エンコーディングで書き込みます。

文字化け

「文字化け」とは、テキストデータが正しく表示されない状態のことを指します。コンピュータ上で扱うテキストデータには、様々な文字コードがありますが、文字コードの違いによって同じ文字でも異なるバイト列として表現されることがあります。これにより、文字化けが発生する場合があります。具体的には、文字の形が崩れたり、文字化け文字が表示されたりすることがあります。

また、VSCodeを使用している場合は、ファイルを開くときにUTF-8エンコーディングを自動的に使用することができます。これを行うには、設定ファイル(settings.json)に次の行を追加します。

settings.json
"files.encoding": "utf8"

この設定は、VSCodeがファイルを開くときにUTF-8エンコーディングを使用することを指示します。これにより、出力ファイルを開くときに文字化けが発生することが減ります。

Lesson 13 Chapter 3
コンソール画面に出力結果が見切れて表示される問題に対処する

PowerShellでコマンドを実行した場合、出力結果がコンソール画面に表示されます。しかし、出力結果が長い場合、コンソール画面に表示された部分だけしか見えず、全体を確認できないことがあります。

この問題を解決するためには、以下のような方法があります。

  1. ページャーを使用する

    PowerShellでは、Out-Hostコマンドレットを使用して出力結果をページング表示することができます。

    例えば、以下のようにコマンドを実行します。

    powershell
    Get-ChildItem | Out-Host

    このコマンドは、Get-ChildItemコマンドレットで取得した結果を、ページング表示します。これにより、出力結果の全体を確認することができます。

    ページング表示

    「ページング表示」とは、Webページやアプリケーションなどで大量のデータを扱う際に、一度に表示するデータの量を制限して複数のページに分割し、必要なページに移動して表示する仕組みのことです。通常、ページング表示では、1ページに表示するデータの数、ページ数、現在のページ番号などが表示され、ユーザーはそれらを操作して必要なページに移動することができます。これにより、大量のデータを効率的に扱うことができます。

    また、Out-Hostコマンドレットには、ページング表示に関する様々なオプションがあります。例えば、ページサイズを指定することができます。以下の例では、ページサイズを20に設定しています。

    powershell
    Get-ChildItem | Out-Host -Paging 20

    このコマンドは、Get-ChildItemコマンドレットで取得した結果を、20行ごとにページング表示します。このように、オプションを指定することで、出力結果をより便利に表示することができます。

  2. 出力をファイルに保存する

    長い出力結果をコンソール画面に表示する代わりに、「>」を使用してファイルに出力することもできます。この場合、ファイルに出力された結果を自由に閲覧することができます。以下のコマンドを使用して、出力結果をファイルに保存できます。

    powershell
    Get-ChildItem > C:\output.txt

    このコマンドは、現在のディレクトリ内のすべてのファイルとフォルダを取得し、C:\output.txtに出力します。

  3. コンソール画面のサイズを変更する

    コンソール画面のサイズを変更することで、長い出力結果を表示できるようになる場合があります。この場合、コンソール画面のサイズを大きくするか、フォントサイズを小さくすることができます。ただし、この方法は一時的な解決策であり、コンソール画面のサイズを変更したままにすると、他のコマンドの実行時に問題が発生する可能性があります。

VSCodeを使用している場合は、コンソール画面を拡大することができます。拡大するには、コンソール画面の右下隅にある三角形をドラッグして、サイズを調整します。また、フォントサイズを変更することもできます。これらの設定は、VSCodeのsettings.jsonファイルで変更できます。一時的な方法として[Ctrl]を押しながらスクロールすることでフォントサイズを変更することができます。

Lesson 13 Chapter 4
バックグラウンド実行をする

PowerShellを使用する際には、長時間かかる処理がある場合には、バックグラウンドで実行することができます。これにより、処理が完了するまで他の作業を続けることができます。

バックグラウンド実行するには、Start-Jobコマンドレットを使用します。Start-Jobコマンドレットは、新しいPowerShellジョブを開始し、指定されたスクリプトブロックまたはコマンドを実行します。

Start-Jobコマンドレットは、PowerShellでバックグラウンド実行を行うためのコマンドです。以下に例を示します。

例えば、以下のようにPowerShellで長時間の処理を実行する場合、その間は処理が完了するまで待機する必要があります。

powershell
Get-ChildItem -Path C:\ -Recurse

しかし、Start-Jobコマンドレットを使用することで、以下のようにバックグラウンドで処理を実行し、他の作業を続けることができます。

powershell
Start-Job -ScriptBlock { Get-ChildItem -Path C:\ -Recurse }

このコマンドを実行すると、PowerShellはバックグラウンドでGet-ChildItemコマンドレットを実行し、ジョブIDを返します。このジョブIDを使用して、後でジョブを操作することができます。

Start-Jobコマンドレットを使用することで、長時間かかる処理をバックグラウンドで実行し、他の作業を続けながら待つことができます。

バックグラウンド実行は、長時間かかる処理を行う場合や、大量の処理を行う場合に特に有効です。しかし、ジョブを管理することが必要になるため、適切な管理が必要です。 VSCodeを使用している場合には、ターミナルウィンドウを複数使用して、バックグラウンドジョブを実行することができます。

Lesson 13 Chapter 5
ジョブを管理する

PowerShellには、前の項目で設定方法を紹介したような、ジョブを管理するためのコマンドレットが用意されています。ジョブを管理することで、実行中のジョブを監視したり、ジョブの一覧を表示したり、ジョブを停止したりすることができます。

以下に、ジョブを管理するための代表的なコマンドレットを紹介します。

  1. Get-Jobコマンドレット

    Get-Jobコマンドレットは、現在実行中のすべてのジョブを表示します。また、ジョブのIDや状態などの情報も表示することができます。

    powershell
    PS C:\> Get-Job
    Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
    --     ----            -------------   -----         -----------     --------             -------
    1      Job1            BackgroundJob   Completed     True            localhost            Get-ChildItem -Path C:\ -Recurse -Force
  2. Receive-Jobコマンドレット

    Receive-Jobコマンドレットは、完了したジョブの結果を表示します。ジョブのIDを指定して実行することができます。

    powershell
    Receive-Job -Id 1
  3. Stop-Jobコマンドレット

    Stop-Jobコマンドレットは、実行中のジョブを停止します。ジョブのIDを指定して実行することができます。

    powershell
    Stop-Job -Id 1
  4. Remove-Jobコマンドレット

    Remove-Jobコマンドレットは、指定されたジョブを削除します。ジョブのIDを指定して実行することができます。

    powershell
    Remove-Job -Id 1

以上のコマンドレットを使用することで、ジョブを管理することができます。ジョブを管理することで、長時間かかる処理を効率的に処理したり、複数のジョブを同時に実行したりすることができます。また、Visual Studio Codeを使用している場合には、ターミナルウィンドウを使用して、ジョブを管理することができます。

Lesson 13 Chapter 6
認証情報を使用する

PowerShellを使って、他のコンピューターにアクセスする必要がある場合や、パスワードを必要とする作業を行う場合、認証情報を使う必要があります。

以下に、認証情報を使用するための代表的なコマンドレットを紹介します。

  1. Get-Credentialコマンドレット

    Get-Credentialコマンドレットは、ダイアログボックスを表示してユーザー名とパスワードを入力するように求めます。入力されたユーザー名とパスワードは、SecureStringオブジェクトとして返されます。

    powershell
    $cred = Get-Credential
  2. New-PSSessionコマンドレット

    New-PSSessionコマンドレットは、リモートコンピューターに対してPowerShellセッションを開始します。認証情報を使用する場合は、-Credentialパラメーターを使用して認証情報を指定します。

    powershell
    $cred = Get-Credential
    $session = New-PSSession -ComputerName Server01 -Credential $cred
  3. Invoke-Commandコマンドレット

    Invoke-Commandコマンドレットは、リモートコンピューター上でコマンドを実行します。認証情報を使用する場合は、-Credentialパラメーターを使用して認証情報を指定します。

    powershell
    $cred = Get-Credential
    Invoke-Command -ComputerName Server01 -Credential $cred -ScriptBlock { Get-Service }

    以上のコマンドレットを使用することで、認証情報を使用して他のコンピューターに接続することができます。VSCodeを使用している場合には、ターミナルウィンドウを使用して、認証情報を使用するコマンドを実行することができます。

認証情報を使用するには、以下の手順に従ってください。

  1. まず、認証情報を取得するためのユーザーアカウントを作成します。

  2. 次に、VS Codeを開き、新しい.ps1ファイルを作成します。

  3. 新しいファイルに以下のコードを記述します。

    powershell.ps1
    $username = 'user01'
    $password = ConvertTo-SecureString 'password' -AsPlainText -Force
    $credential = New-Object System.Management.Automation.PSCredential ($username, $password)

    ここで、$usernameにはユーザーアカウント名を、$passwordにはパスワードを、それぞれ指定します。

  4. コードを実行するには、F8キーを押すか、コードを選択し、右クリックして「実行」を選択します。

  5. 認証情報を使用するコマンドを実行するときは、次のように-Credentialパラメーターを使用して、先ほど作成した認証情報を指定します。

    powershell
    Get-WmiObject -Class Win32_Service -ComputerName Server01 -Credential $credential

    この例では、Get-WmiObjectコマンドレットを使用して、Server01という名前のリモートコンピューターからWin32_Serviceクラスの情報を取得しています。-Credentialパラメーターを使用して、先ほど作成した認証情報を指定しています。

以上の手順で、PowerShellで認証情報を使用することができます。

Lesson 13 Chapter 7
カスタムフォーマットを作成する

PowerShellには、出力結果を整形するためのフォーマット機能があります。出力される情報が見やすくなり、処理結果を理解しやすくなります。また、カスタマイズすることもできます。以下では、カスタムフォーマットを作成する方法を説明します。

  1. カスタムフォーマットの定義

    カスタムフォーマットを定義するには、以下の手順を実行します。

    1. New-Objectコマンドレットを使用して、PSObjectクラスのインスタンスを作成します。 このインスタンスは、フォーマット定義を保持するために使用されます。

      • PSObjectクラスは、PowerShellでオブジェクトを作成するための基本的なクラスです。 これにより、PowerShellでオブジェクトを作成し、プロパティを設定できます。
    2. Add-Memberコマンドレットを使用して、各プロパティのフォーマットを定義します。 フォーマットには、文字列、数値、日付/時刻など、さまざまなデータ型が含まれます。

      • Add-Memberコマンドレットを使用することで、作成したPSObjectにプロパティを追加し、それぞれのプロパティについてのフォーマット定義を設定できます。
    3. 最後に、Format-Customコマンドレットを使用して、定義したフォーマットを適用します。 このコマンドレットにより、指定したオブジェクトのプロパティを定義したフォーマットで出力することができます。

      • Format-Customコマンドレットは、カスタムフォーマットを作成した後、そのフォーマットをオブジェクトに適用し、出力結果を表示するために使用します。

    以上の手順を実行することで、PowerShellでカスタムフォーマットを作成することができます。このフォーマットを使用することで、PowerShellで作業する際に必要な情報をよりわかりやすく表示することができます。

    例えば、以下のコードは、サービスの状態を示すカスタムフォーマットを定義する例です。

    powershell
    $serviceFormat = New-Object PSObject
    $serviceFormat | Add-Member -MemberType NoteProperty -Name Name -Value { $_.Name }
    $serviceFormat | Add-Member -MemberType NoteProperty -Name Status -Value { $_.Status }
  2. カスタムフォーマットの適用

    定義したカスタムフォーマットを適用するには、Format-Customコマンドレットを使用します。

    powershell
    Get-Service | Format-Custom -View $serviceFormat

    上記の例では、Get-Serviceコマンドレットで取得したサービスの状態を、先ほど定義したカスタムフォーマットで表示しています。

カスタムフォーマットを作成することで、出力結果を自由に整形することができます。また、PowerShellには、標準で多数のカスタムフォーマットが用意されているため、これらを参考にすることもできます。VSCodeを使用している場合には、ターミナルウィンドウを使用して、カスタムフォーマットを適用するコマンドを実行することができます。