マイクロソフトは、新しいOutlookをWindows 10にインストールすることを必須にする
Microsoft は現在、ユーザーを新しい製品やサービスに転換させることに苦労しています。
もしあなたの PC が退屈なタスクを処理できたらどうでしょう? Windows PowerShell を使用すると、これが可能になります。 PowerShell を使用して、誰も何度も繰り返し実行したくない日常的な反復タスクを自動化する方法を説明します。
目次
Microsoft PowerShell は、管理者にとって強力なツールとなるコマンドライン ユーティリティおよびスクリプト言語であり、コンピューターとネットワークのさまざまなタスクを自動化できます。 PowerShell にはコマンド プロンプトのコンポーネントが含まれており、.NET フレームワーク上に構築されています。 WebTech360 について読んでいる場合は、PowerShell が IT 管理者が大規模ネットワークを管理するために選択するツールであることを知っておく必要があります。
PowerShell の使い方を学習すると、多くの面倒な日常のタスクが簡素化されます。各サーバーを個別に調整することなく、ネットワーク経由でシステム全体の変更を行うこともできます。 PowerShell は、ハイブリッド クラウド環境の実行に不可欠な要素になりつつあります。
PowerShell には、作業を効率化したり、ネットワークを効率的に稼働させたりするのに役立つさまざまな用途があります。最も基本的な用途としては、システムの毎日の更新のスケジュール設定、現在のプロセスのレポートの生成、定期的なサービスなどがあります。これらのタスクの多くは GUI を通じて実行できるというのは事実ですが、PowerShell のポイントは、それらをより速く実行することです。
セットアップに数分かかる定期的なメンテナンス タスクがある場合は、同じ機能を 1 つの名前付き PowerShell コマンドにスクリプト化できます。次回はそのスクリプトを開くだけで、バックグラウンドで実行されます。 PowerShell のスクリプト ロジックを習得し、オブジェクトや var (変数) の動作を理解し、ネットワーク上でそれをインテリジェントに実装すると、なぜもっと早く PowerShell を使用しなかったのか不思議に思うでしょう。
このチュートリアルでは PowerShell の基本について説明します。これは、特に Windows コマンド プロンプトに慣れている IT 初心者にとって役立ちます。この記事では、基本的なツールとコマンドの使い方、ファイルとフォルダーの操作方法、オブジェクトの理解方法、変数の使用方法、リモート サーバーの管理方法を紹介します。
Windows NT がリリースされた後、CMD.EXE は Windows のコマンド ライン ユーティリティになりました。 CMD.EXE は DOS の前身 (COMMAN.COM) からいくつかのコンポーネントを継承していますが、それでも Windows コマンド ファイル (.CMD および .BAT) を使用する、かなり「原始的な」スクリプト言語をベースとしていました。 Windows Scripting Host と VBScript および JScript 言語の追加により、ユーティリティのスクリプト機能が大幅に強化されました。
これらのテクノロジは、高度なコマンド ライン ユーティリティとスクリプト環境をバランスよく組み合わせたものです。実際のところ、CMD.EXE、.CMD、および Windows Scripting Host ファイルがいくつ操作できるかという問題は、実際の懸念事項ではありません。人々が最も不満を言い、心配するのは、一見単純なタスクを完了することです。
コマンドラインおよびスクリプト ツールの「フレームワーク」を使用すると、中程度に包括的なスクリプトには、バッチ コマンド、Windows Scripting Host、およびスタンドアロン実行可能ファイルの組み合わせが必要になります。各スクリプトは、実行、データの要求、解析、および返却に異なる規則を使用します。
CMD.EXE での変数のサポートが弱く、インターフェイスが一貫しておらず、Windows 設定へのアクセスが制限されていることが、別の弱点と相まって、コマンド ライン スクリプトの実装と使用がさらに困難になっています。ここでの「もう一つの弱点」とは何なのか疑問に思うかもしれません。プレーンテキストですのでご了承ください。これらのテクノロジーでは、すべてがテキスト形式になります。コマンドまたはスクリプトの出力はテキストであり、次のコマンドの入力として機能するように解析および再フォーマットする必要があります。これは、PowerShell が従来のすべてのシェルから取得する基本的な出発点です。
このセクションで紹介する 3 つの概念は、PowerShell の基礎となる主要な概念を理解するためのほんの基礎にすぎません。 PowerShell コマンドに取り組むときは、より高度な概念を学習して習得するために、より多くの時間を費やす必要があります。
PowerShell は、Windows 10、Windows 7、Windows Server 2008 R2、およびそれ以降のバージョンの Windows にデフォルトでインストールされています。 PowerShell の新しいバージョンでは、新しい機能と「コマンドレット」(PowerShell コマンドの Microsoft 用語 - 「コマンドレット」と発音) が追加され、対応するバージョンの Windows Management Framework (WMF) とともにインストールされます。
現在、WMF 5.1 が最新の推奨バージョンです。場合によっては、一部の新機能は WMF バージョンに加えてオペレーティング システムに依存します。たとえば、Windows 8 および Windows Server 2012 では、特定のTCP/IPポートへの接続をテストできる Test-NetConnection コマンドレットがサポートされていますが、このコマンドレットは最新バージョンの WMF を実行している場合でも Windows 7 では使用できません。
ほとんどの Windows システムでは、ユーザーは PowerShell コンソールと PowerShell ISE (Integrated Scripting Environment) の 2 つの PowerShell 環境を利用できます。 PowerShell コンソールは従来のコマンド ラインのように見えますが、PowerShell のすべての機能を備えています。変数名、ループ、コマンドの自動補完、パイプは PowerShell コンソールから利用できます。
より高度な用途 (スクリプトの構築など) 向けに、PowerShell ISE はコマンドの自動補完、コードの強調表示、Microsoft の Intellisense コード補完機能を提供し、PowerShell コードの作成とテストに役立ちます。 PowerShell ISE では、タブ ナビゲーションを使用して複数の PowerShell スクリプトを同時に操作することもできます。
PowerShell コマンドの基礎はコマンドレットです。 Microsoft は、PowerShell でコマンドレットを作成する際にいくつかの設計戦略を採用しました。
1 つ目は、コマンドレット名を簡単に推測したり、少なくともコマンドレット名を見つけやすくしたりすることです。 PowerShell コマンドまたはコマンドレットも、標準化された構文を使用して使いやすく設計されており、コマンド ライン インターフェイスからスクリプトを簡単に作成できます。
コマンドレットでは、Get-Service、Stop-Service、Import-Csv のように動詞-名詞形式が使用されます。コマンドレット名の動詞部分は、名詞に対して実行されるアクションを示します。通常、情報を取得するために使用されるコマンドレットの名前には、Get-ProcessやGet-Contentなどのように、 Get という動詞が含まれます。何かを編集するために使用するコマンドは通常、動詞Setで始まり、どこかに新しいエンティティを追加するには、通常、AddまたはNewで始まります。
2 番目に、PowerShell でよく使用されるパラメータにも標準化された名前が付けられます。たとえば、 -ComputerNameパラメーターを使用すると、コマンドレットを 1 台以上のリモート コンピューターで実行できます。 -Credential は、特定のユーザーとしてコマンドを実行するために、ユーザー資格情報を含む認証オブジェクトを提供するために使用されます。
コマンドレットとパラメータの両方にエイリアスを使用すると、キーストロークを節約し、コマンドの全体の長さを短縮できます (複数のコマンドを連結する場合に非常に便利です)。これらのエイリアスは必ずしも標準の命名規則を使用するわけではありませんが、従来のコマンドライン ユーティリティを反映しています。
PowerShell では、DIR、CD、DEL、CLS などのエイリアスは、それぞれ Get-ChildItem、Set-Location、Remove-Item、Clear-Host コマンドレットに対応します。パラメーター エイリアスは 2 つの方法で動作します。コマンドレットによって提供される定義済みのエイリアスを使用するか、コマンドレットでサポートされているパラメーター間で一意の一致を作成するのに十分な文字を入力してエイリアスを作成することができます。
ほとんどのシステム管理者は、サーバー上の別の場所にフォルダーを移動したり、ログ ファイルをアーカイブしたり、大きなファイルを検索したりするなど、作業中にファイルやフォルダーを操作する必要があります。多くのファイルに対して同じ操作を繰り返す場合は、PowerShell を使用して自動化すると、時間を節約できる効果的なソリューションになります。
ファイルとディレクトリを見つけるために、昔のコンピューター時代に管理者が最初に学んだコマンドライン ツールの 1 つが dir コマンドでした。 Dir は指定されたディレクトリに含まれるファイルとディレクトリを一覧表示します。
PowerShell には、Get-ChildItemコマンドレットの形式で同様のコマンドがあります。 Get-ChildItem を使用すると、パイプ コマンドを使用してファイルを操作したり、出力を変数に割り当てたりできるように、ディレクトリ内のファイルのリストをすばやく作成できます。
Get-ChildItem は、パイプライン経由で-Pathパラメーターを使用するか、コマンドレット名の直後にパスを指定するだけで使用できます。 Get-ChildItem によって返される応答を調整するには、コマンドレットによって使用可能になるいくつかのパラメーターを考慮する必要があります。
-Filterパラメータは、ファイルを検索する方法の 1 つです。デフォルトでは、Get-ChildItem はターゲット ディレクトリの直接の子のみを返します。この機能は、現在のディレクトリに含まれるディレクトリを再帰的に検索する追加の-Recurseオプションを使用して拡張できます。
PowerShell 4.0 では、Get-ChildItem に–Fileまたは–Directoryスイッチを使用して結果をファイルまたはディレクトリに制限する機能が追加されました。以前のバージョンの PowerShell では、この判断を行うために、PSIsContainer プロパティでフィルタリングして結果を Where-Object に渡す必要がありました。 C:Users に含まれるフォルダーを返すために使用される両方の手法の例を以下に示します。
Get-ChildItem C:Users -Directory Get-ChildItem C:Users | Where-Object {$_.PSIsContainer –eq $true}
隠しファイルまたはシステムファイルを検出するには、 -Forceを使用する必要があります。 PowerShell 4.0 以降の Get-ChildItem では、それぞれ-Hidden、-ReadOnly、-Systemを使用して、隠しファイル、読み取り専用ファイル、またはシステム ファイルのみを返すこともできます。以前のバージョンでは、Where-Object を使用して Mode プロパティをフィルター処理することで同様の機能を実現できました。
Get-ChildItem C:Users | Where-Object {$_.Mode -like '*R*'}
ファイルが存在するかどうかを確認する
通常、ファイルを操作するときには、ファイルが存在するかどうか、またはディレクトリ パスが有効かどうかを知る必要があります。 PowerShell には、これを実行するためのコマンドレットが Test-Path の形式で用意されており、true または false の値を返します。
Test-Path は、特定のファイルをコピーまたは削除しようとする前の予防措置として使用されます。
ファイルのコピー、移動、削除
Copy-Item: -Path パラメーターで指定された場所から -Destination オプションで指定された場所に 1 つ以上のファイルまたはディレクトリをコピーします。
Move-Item:ファイルまたはフォルダーを移動します。
ディレクトリ構造をコピーまたは移動する場合、コマンドレットでディレクトリとその内容に対してアクションを実行するには、-Recurse を使用する必要があります。読み取り専用ファイルがコピー操作によって上書きされる場合など、場合によっては-Forceが必要になります。
Remove-Item:ファイル、フォルダーを削除します。
読み取り専用ファイルに遭遇した場合はスイッチ-Forceを使用し、ディレクトリとその内容を削除する場合は-Recurse を使用する必要があります。
PowerShell -WhatIf と -Confirm の使用
重大な大量削除を実行する前に、-WhatIfを使用してください。 -WhatIf を使用すると、スクリプトまたはコマンドを実行した場合に何が起こるか、重要なビジネス データが削除されるという潜在的な悪影響があるかどうかを確認できます。また、-WhatIf はファイル操作に限定されず、PowerShell でも広く使用されていることにも注目に値します。
手動で実行するスクリプト、または手動で実行する依存コマンドがあるスクリプトの場合は、-Confirmの使用を検討してください。これにより、アクションが実際に実行される前にユーザーの操作を要求できます。
PowerShell スクリプト = 強力なバッチファイル
PowerShell 自体は .NET 言語で記述されており、.NET Framework をベースにしています。そのため、PowerShell はオブジェクト指向のユーティリティおよびスクリプト言語として設計されました。 PowerShell のすべては、完全に機能する .NET Framework オブジェクトとして扱われます。そのオブジェクト タイプのプロパティとメソッドを使用して使用できるオブジェクトのセットを提供するコマンド。あるコマンドの出力を別のコマンドにパイプする場合、PowerShell は実際には最初のコマンド ラインのテキスト出力だけでなく、オブジェクトも渡します。これにより、��のコマンドはパイプライン内のオブジェクトのすべてのプロパティとメソッドに完全にアクセスできるようになります。
すべてをオブジェクトとして扱い、コマンド間でオブジェクトを受け入れることができることは、コマンドラインユーティリティにとって大きな理論的変化です。とはいえ、PowerShell は従来のシェル ユーティリティのように機能します。コマンド、スクリプト、実行可能ファイルをコマンド ラインから入力して実行することができ、結果はテキスト形式で表示されます。 Windows の .CMD および .BAT ファイル、VBScript、JScript、および CMD.EXE 内で実行される実行可能ファイルはすべて PowerShell でも実行されます。ただし、オブジェクト指向ではないため、PowerShell で作成および使用されるオブジェクトに完全にアクセスできるわけではありません。これらの従来のスクリプトと実行では、引き続きすべてがテキストとして扱われますが、PowerShell を他のさまざまなテクノロジと組み合わせることができます。一度に変換できない既存のスクリプトのコレクションで PowerShell の使用を開始する場合、これは非常に重要なポイントです。
コマンドレットは、動作を変更するためのパラメータを受け入れることができます。コマンドレットまたは関数を実行するときに、各 PowerShell コマンドが何を、いつ、どこで、どのように実行するかを指定するためのパラメーター値を指定できます。
たとえば、Get-Process はオペレーティング システムで実行中のすべてのプロセスを取得して一覧表示します。
しかし、特定の進捗状況だけを取得したい場合はどうすればよいでしょうか?パラメータを使用してこれを行うことができます。たとえば、すべての Slack プロセスを取得するには、Get-Process コマンドレットで Name パラメータを使用します。
Get-Process -Name Slack
すると、「slack」という名前のプロセスだけが表示されます。
ヒント: 一部のパラメータは「位置指定」であり、名前はオプションです。この場合、Get-Process -Name SlackとGet-Process Slack はどちらも同じタスクを実行します。
各コマンドレットは異なるタイプのパラメータを受け入れます。 Get-Help コマンドを使用して、SYNTAX セクションでコマンドレットの受け入れられるパラメータを確認します。
Get-Help Get-Process
指定されたコマンドレットを実行できるすべての方法のリストが表示されます。
この場合、Get-Process コマンドレットは、Name、Id、ComputerName、Module、FileVersionInfoなどのパラメーターやその他の一般的なパラメーターを受け入れます。ここでの記号の意味は次のとおりです。
シンボル |
名前 |
意味 |
---|---|---|
ドラム |
パラメータは入力を受け付けません |
|
- |
ハイフン |
パラメータ名を指定 |
<> |
中括弧 |
テキストのプレースホルダー |
[] |
括弧 |
パラメータは 1 つ以上の値を受け入れることができます。 |
{} |
中括弧 |
パラメータは値のセットを受け入れます。 |
パラメータは、文字列、整数、ブール値、DateTime など、必要なデータのタイプを示す値のセットを受け入れます。たとえば、次のコマンド:
Get-Process [[-Name] ]
... は、Nameパラメータが 1 つ以上の文字列値を受け入れることを意味しますが、このコマンドでは、
Get-Process -Id
...は、Idパラメータが1 つ以上の整数値を受け入れることを意味します。
前の Get-Process の例では、Name パラメーターを使用して結果を絞り込んでいました。ただし、より具体的なプロセスに絞り込みたい場合は、構文に記載されているように整数を必要とするIDパラメータを使用できます。
Get-Process -Id 3016
すると、リストには 1 つのプロセスだけが表示されます。
PowerShell はすべてのデータをオブジェクトとして扱います。スクリプトを構築するには、これらのオブジェクトはパイプ記号 (|) で接続された一連のコマンドレットまたは関数を実行します。適切なコマンドレットを選択し、パイプラインを使用して論理的な順序で接続することは、効率的なスクリプトにとって重要です。
フォルダー内で最も多くのスペースを占める上位 5 つのファイルを並べ替えて表示するスクリプトを作成するとします。ファイル並べ替えスクリプトを作成するより強力な方法はありますが、次の単純な方法は簡単に理解できます。
PowerShell でこれを行うには、次のようなパイプラインを使用します。
Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
| Select-Object -First 5 | Format-Table Name, Length -AutoSize
パイプラインが機能するようになったので、それを PS1 スクリプト ファイルとして保存して、使用するたびにインポートする必要がないようにすることができます。
PS1 ファイルを作成する最も簡単な方法は、スクリプトをメモ帳に貼り付けて、.ps1 拡張子でファイルを保存することです。
PS1 ファイルを作成したら、./ScriptName.ps1を実行して PowerShell で使用できます。
ヒント: 権限エラーが発生した場合、最も迅速な解決策は、スクリプトを実行するときに管理者権限で PowerShell を実行することです。
おめでとう! PowerShell PS1 スクリプトを作成できるようになりました。
新しいテクノロジーの素晴らしさを読んで理解することと、それを実際に使用することは別のことです。この記事の残りの部分では、PowerShell スクリプトを開発して、その機能と使用方法を説明します。
DIR はCMD.EXE で最も一般的なコマンドの 1 つです。このコマンドは、親ディレクトリに含まれるすべてのファイルとサブディレクトリを表示します (図 1 を参照)。提供される情報には、各オブジェクトの名前に加えて、最終更新日時と各ファイルのサイズも含まれます。 DIR は、ディレクトリ内のすべてのファイルの合計サイズ、およびファイルの総数とサブディレクトリの総数も表示します。
図1
PowerShell で DIR を実行すると、図 2 のようなディレクトリ リストも生成されますが、少し異なります。 PowerShell には DIR コマンドはありませんが、代わりに同じ機能を実行する Get-ChildItem があります。 PowerShell では、DIR は Get-ChildItem のエイリアスです。この投稿ではエイリアスについて詳しく説明するつもりはありません。 PowerShell の DIR は Get-ChildItem の略語と考えることができます。
PowerShell の DIR は、ファイルとフォルダーのリスト、最終更新日時、各ファイルのサイズなど、上記とほぼ同じ情報を提供します。ただし、CMD.EXE の DIR が提供する概要情報 (ディレクトリ内のすべてのファイルの合計サイズ、ファイルの総数、サブディレクトリの総数) が欠けています。
図2
例のシナリオでは、CMD.EXE DIR コマンドをシミュレートする PowerShell スクリプトを作成する必要があります。以下ではスクリプトの最も重要な部分について説明します。
DIR.PS1: ヘッダー
PowerShell スクリプトは、.PS1 拡張子を持つプレーン テキスト ファイル内のPowerShell コマンドで構成されます。 DIR の代わりに、DIR.PS1 というテキスト ファイルを使用します。
スクリプトを実行するには、PowerShell 画面に次のコマンドを入力します。
.DIR.PS1 X:Folder
ここで、X はドライブのパーティション文字 (C、D、E など) であり、Folder はフォルダー名です。
ドライブ パーティションに関する情報を知りたい場合は、Windows Management Instrumentation (WMI) を使用する必要があります。 WMI の詳細についてはこの記事の範囲外なので、ここでは説明しません。ただし、以下の PowerShell コードは、WMI の助けを必要とせずに理解するのも簡単です。 Get-WmiObject コマンドで使用する「$filter」変数を作成できます。このフィルター変数は、Get-WmiObject コマンドに、特定のドライブに関する情報のみが必要であることを伝えます。 Get-WmiObject コマンドの結果は、$volInfo という変数に保存されます。 PowerShell ではすべてがオブジェクトであることを覚えておいてください。 $volInfo も Get-WmiObject から返される結果オブジェクトになりました。
$filter = "DeviceID = '" + $drive + ":'"
$volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter
これで、オブジェクトに関連付けられたすべてのオブジェクトとメソッドにアクセスできるようになります。ボリューム シリアル番号は、VolumeSerialNumber プロパティを介してアクセスできます。返される情報は 8 文字の文字列です。ただし、通常はハイフンで区切られた 4 つの個別の数字としてフォーマットする必要があります。以下の行と同様に実行できます。最初の行の末尾のハイフンは、PowerShell では行継続文字です。基本的には、行が分割されておらず、次の行が含まれていることを PowerShell に伝えるだけです。コードを書くときに行を分ける必要はありませんが、幅を狭めてコードを読みやすくするために、行を分ける必要があります。
$serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + "-" + `
$volInfo.VolumeSerialNumber.SubString(4, 4)
$volInfo オブジェクトが作成されたので、DIR ヘッダー情報を画面に書き込むことができます。ドライブに名前がない場合、画面に表示されるテキストは、ドライブに名前がある場合とは少し異なります。 VolumeName プロパティが空の文字列であるかどうかを確認するために、単純な If-Else ステートメントが使用されます。 Write-Host コマンドは、個々のコマンド行を画面に書き込むために使用されます。
If ($volInfo.VolumeName -eq "") { Write-Host (" Volume in drive " + $drive + " has no label") } Else { Write-Host (" Volume in drive " + $drive + " is " + $volInfo.VolumeName) } Write-Host (" Volume Serial Number is " + $serial) Write-Host ("`n Directory of " + $args[0] + "`n")
Write-Host コマンドの先頭と末尾の「 `n 」文字は、テキストの前後に新しい行を挿入するために使用されます。 Write-Host コマンドは、各行の末尾に新しい行を追加します。したがって、「 `n 」の効果は、テキスト行の前後に空白行を作成することです。
If コマンドの「-eq」に気づきましたか?これは等価比較演算子です。以下の表にすべての比較演算子を示します。
-eq、-ieq | 比較する |
-ne、-ine | 比較は平等ではない |
-gt、-igt | より大きいを比較する |
-ge、-ige | より大きいか等しいかを比較する |
-lt、-ilt | より小さいものを比較 |
-le、-ile | 以下か等しいかを比較する |
比較演算子の前の -i 文字は、演算子が大文字と小文字を区別しないことを示します。
図3: 現在お持ちのスクリプトの出力データ
DIR.PS1: ファイル/フォルダのリスト
これで、このフォルダーの内容とプロパティを表示する準備が整いました。最初に、PowerShell の Get-ChildItem コマンドを呼び出してファイルのセットを取得し、それをパラメーターとしてスクリプトに渡します。 Get-ChildItem コマンドは、ファイルおよびフォルダー オブジェクトの名前だけでなく、それらのコレクションを取得するだけでなく、これらのオブジェクトを直接 Sort-Object コマンドにパイプして並べ替えます。デフォルトでは、Sort-Object コマンドは Name プロパティに基づいてオブジェクトを並べ替えます。したがって、他のパラメータを記述する必要はありません。ソートされたオブジェクトのセットは、$items という名前の変数に格納されます。
$items = Get-ChildItem $args[0] | Sort-Object
ファイルおよびフォルダー オブジェクトのコレクションを取得したら、それらをループして適切な機能を表示する必要があります。これに使用されるコマンドは ForEach です。各ファイルまたはフォルダーごとに、最終更新日時、名前、長さ、ファイル サイズなどの情報が表示されます。括弧内の奇妙な文字列は、.NET 文字列形式コードです。これらは、フィールドを左揃え/右揃えにしたり、日付、時刻、数値をフォーマットしたりするために使用されます。これらの文字列形式コードはこのスクリプトの性質に不可欠ではないため、理解することはそれほど重要ではありません。
If コマンドは、オブジェクトがディレクトリであるかどうかを判断します。 Mode 属性の最初の文字が「d」の場合、オブジェクトはディレクトリです。ディレクトリ用に記述されたコードはファイル用に記述されたコードとは異なることが多いため、再確認する必要があります。
If ステートメント内の $totalDirs++ 行に注意してください。これは、フォルダーの数を追跡するカウンターです。同様に、すべてのファイルの合計サイズを追跡するために使用される変数 $totalFiles があります。これらの値は実行中に常に計算されます。ただし、それらはファイルのリスト処理が完了したときにのみ表示されます。
ForEach ($i In $items)
{
$date = "{0, -20:MM/dd/yyyy hh:mm tt}" -f $i.LastWriteTime
$file = $i.Name
If ($i.Mode.SubString(0, 1) -eq "d")
{
$totalDirs++
$list = $date + " {0, -15}" -f "
" + " " + $file
}
Else
{
$totalFiles++
$size = "{0, 18:N0}" -f $i.Length
$list = $date + $size + " " + $file
}
$totalSize += $i.Length
Write-Host $list
}
図 4: 更新されたスクリプトの出力データを表示します。
DIR.PS1: フッター
残っているのは、このドライブ パーティション上のファイルとフォルダーの合計数、すべてのファイルの合計サイズ、および空き容量を画面に書き込むことだけです。これを行うには、前のセクションで作成したカウンター変数 ($totalFiles、$totalDirs、$totalSize) を使用する必要があります。スクリプトの先頭で作成された $volInfo 変数から、空き容量がどれくらいあるかを確認できます。
Write-Host ("{0, 16:N0}" -f $totalFiles + " File(s)" + `
"{0, 15:N0}" -f $totalSize + " bytes")
Write-Host ("{0, 16:N0}" -f $totalDirs + " Dir(s)" + `
"{0, 16:N0}" -f $volInfo.FreeSpace + " bytes free`n")
図 5: スクリプトの完全な出力データを表示します。
予測と強化は
作成するスクリプトは CMD.EXE DIR コマンドとほぼ同じ出力を生成しますが、注意すべき点と、強化できる点がいくつかあります。
PowerShell を使用すると、一貫性を保つためにファイル名を一括変更したり、アプリケーションを自動的に起動するなど、ほぼあらゆる操作を自動化できます。どのように動作するかを確認するために、簡単な Windows PowerShell スクリプトをいくつか記述してみましょう。
注: スクリプトの実行時に実行ポリシーに関するエラーが発生した場合は、「Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass」を実行して、スクリプトの実行を一時的に許可する必要がある場合があります。
フォルダ内のファイルの名前を一括変更する
PowerShell を使用して、PC 上のファイルをコピー、移動、削除できます。特定のファイルタイプのファイルの名前を一括変更することもできます。たとえば、ファイル名のプレフィックス「oldco」を「newco」に置き換えて、複数のテキスト ファイルの名前を変更する方法は次のとおりです。
Get-ChildItem -Path "C:\CompanyFiles" -Filter "*.txt" | Rename-Item -NewName {$_.Name -replace "oldco","newco"}
上記のスクリプトでは、「.txt」がファイル拡張子フィルターです。これを .jpg、.docx などに修正して設定し、さまざまなファイル タイプを検索できます。
自動起動アプリケーション
毎日同じアプリケーション セットを開く場合は、PowerShell スクリプトを作成して、1 回のクリックでアプリケーションを起動することができます。
#Open multiple apps with a single click
Start-Process "notepad.exe"
Start-Process "calc.exe"
Start-Process "Chrome.exe"
Start-Process "slack.exe"
スクリプトをメモ帳ファイルに貼り付け、LaunchFavoriteApps.ps1 として保存します。次に、ファイルをダブルクリックするだけで、スクリプトにリストされているすべてのアプリケーションが起動します。
重要なファイルをバックアップ場所にコピーする
次のスクリプトを使用して、重要なファイルを定期的にバックアップ場所にバックアップできます。必要に応じて、ソース パスと宛先パスを必ず変更してください。
#Copy MyFiles folder contents to MyFilesBackup in D:\
Copy-Item -Path "C:\Documents\MyFiles" -Destination "D:\MyFilesBackup" -Recurse
毎日さまざまなタイプのファイルがダウンロードされるため、ダウンロードフォルダーはさまざまなファイルが散らばってすぐに乱雑になってしまいます。これを修正するには、毎日の終わりにダウンロードしたファイルをファイルの種類ごとにフォルダーに分類する PowerShell スクリプトを作成します。
新しいメモ帳ファイルを開き、次のスクリプトを貼り付けます。スクリプト内のソース フォルダー パスがダウンロード フォルダー パスと一致するように必ず変更してください。
# Change the source folder path below
$sourcePath = "E:\Downloads"
# Add file mapping folder names; the Others folder includes all the files that do not match file types in the other categories
$fileTypes = @{
"Documents" = @("*.docx", "*.pdf", "*.txt")
"Images" = @("*.jpg", "*.png", "*.gif")
"Media" = @("*.mp4", "*.mp3", "*.mov")
"Zip" = @("*.zip", "*.rar")
"ISO" = @("*.iso")
"Others" = @("*")
}
# Iterate through each folder type and prepare a destination folder for organizing files
foreach ($folder in $fileTypes.Keys) {
# Create the destination folder path
$destPath = Join-Path -Path $sourcePath -ChildPath $folder
# Check if the destination folder exists, and create it if it doesn't
if (!(Test-Path -Path $destPath)) {
New-Item -ItemType Directory -Path $destPath | Out-Null
}
# Move matching files from the source folder to the destination folder based on file type patterns
foreach ($pattern in $fileTypes[$folder]) {
Get-ChildItem -Path $sourcePath -Filter $pattern -File -ErrorAction SilentlyContinue | ForEach-Object {
try {
Move-Item -Path $_.FullName -Destination $destPath -Force -ErrorAction Stop
Write-Output "Moved: $($_.FullName) to $destPath"
} catch {
Write-Warning "Failed to move file: $($_.FullName). Error: $_"
}
}
}
}
Write-Output "Files organized successfully!"
ファイルを保存するには、[ファイル] > [名前を付けて保存]をクリックし、ファイル名としてOrganizeDownloadsFolder.ps1と入力します。次に、「ファイルの種類」をクリックし、「すべてのファイル」を選択します。OrganizeDownloadsFolder.ps1ファイルをダブルクリックしてスクリプトを実行します。
もちろん、スクリプトは自動化プロセスの一部です。 2 番目の部分は、スクリプトが自動的に実行されてタスクが実行されることを確認することです。これを実行するには、スクリプトを毎日または必要に応じて実行するスケジュールされたタスクを作成します。
PowerShell を開き、次のスクリプトをコピーして貼り付け、Enter キーを押します。必ず「J:\OrganizeDownloadsFolder.ps1」をOrganizeDownloadsFolder.ps1スクリプトへの完全なファイル パスに置き換えてください。
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File 'J:\OrganizeDownloadsFolder.ps1'"
$trigger = New-ScheduledTaskTrigger -Daily -At "5:00 PM"
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "OrganizeDownloadsFolderDaily"
完了したら、Enter キーを押します。このスクリプトは、タスク スケジューラにスケジュールされたタスクを作成し、毎日午後 5 時にファイル編成スクリプトを実行します。別の時間を希望する場合は、上記のスクリプトで変更できます。
さらに、PowerShell を使用すると、プライマリ ドライブの空き容量が不足したときに警告するスペース監視スクリプト、PDF ドキュメントのバッチをパスワードで保護する、画像フォルダーからライブ壁紙を適用するなど、その他の日常的なタスクを自動化することもできます。
PowerShell は強力なスクリプト言語およびユーティリティですが、特に .NET Framework 環境に慣れていない場合は、理解して使用するまでに少し時間がかかります。この記事とサンプル スクリプトが、PowerShell を理解したいすべての人にとって役立つことを願っています。しかし、例で作成されたスクリプトは非常に単純です。より複雑なアプリケーションにさらに適した機能を提供するために、より完全に構築および開発できると信じています。
Microsoft は現在、ユーザーを新しい製品やサービスに転換させることに苦労しています。
PowerShell やコマンドプロンプトを既定の設定にリセットする方法を解説します。
私たちは皆、PC 上で自動化したい反復的なタスクを持っています。幸いなことに、その責任を引き受け、時間をより効率的に活用するのに役立つサードパーティ製の Windows アプリが数多くあります。
テレビを購入する際には、QLED、OLED、LED のオプションが表示されます。画面で見るとどれも同じように見えますが、どのテレビを購入すべきでしょうか。また、それぞれの違いは何でしょうか。
多くの Samsung スマート TV には、ストリーミングやゲーム体験を向上できる機能が組み込まれています。私たちのお気に入りの機能のいくつかをご紹介します。
『Wuthering Waves』の構成はゲーム発行元によって公式に発表されており、プレイヤーは少なくとも GTX 1060 以上を搭載している必要がある。
Samsung の携帯電話の計算機アプリにはチップ計算機が搭載されており、他の人と請求書を割り勘にすることができます。そうすれば、自分で計算する必要がなく、頭の中で金額を間違える恥ずかしい思いをすることも避けられます。
Photoshop を第 2 の選択肢にする AI 写真編集ツールは数多くあり、AI 機能は複雑な Photoshop を習得しなくても写真を編集できる便利なツールです。
Microsoft Edge でカメラのアクセス許可を調整するオプションを使用すると、ユーザーは Web サイトのオプションを簡単に変更して、プライバシーを強化できます。
ビルジウォーターは明らかに、チームファイト タクティクス シーズン 9.5 に興味深いチャンピオンをいくつか追加しています。
ノートパソコンを外部モニターと組み合わせて使用すると、生産性が向上し、仕事がやりやすくなります。しかし、時間が経つにつれて、ノートパソコンのバッテリーが突然すぐに消耗し、バッテリー寿命が短くなり始めることに気付くでしょう。
折りたたみ式の携帯電話がかなりクールであることは否定できません。しかし、しばらく使用してみると、このデバイスにはいくつかの癖があることがわかりました。折りたたみ式スクリーンの携帯電話の予想外の 5 つの主な欠点をご紹介します。
Adobe は AI ビデオ作成技術を新たな方法で大衆に提供したが、この技術を使った完成した映画はまだ作成されていない。
Genshin Impact 5.5 コードは、原始石、魔法の鉱物、経験値、その他多くの報酬との交換に役立ちます。
macOS Catalina と iPadOS には、iPad を Mac のセカンダリディスプレイとして使用できるように設計された Sidecar という新機能のサポートが含まれています。
これは Nokia 1280 の壁紙のセットです。1280 の壁紙やブリック フォンの壁紙を取得するためにテキストを送信したことがある場合は、これらの壁紙を見てみてください。
ヴィーナス・エアロスペース社は、最高速度マッハ9に相当する時速11,115キロに達することができる新型極超音速航空機「スターゲイザー」の初画像を公開した。
腹部膨満は誰にでも起こり得ます。幸いなことに、朝食は、腹部膨満感を軽減するのに役立つ食材を食事に加えるのに最適な時間です。その材料はバナナです。