Windows 10でファンクションキーが機能しない問題を修正
Fn ファンクション キーを使用すると、一部のハードウェア機能をより迅速かつ簡単に制御できます。
もしあなたのPCが日常的なタスクを自動で処理してくれたらどうでしょう?Windows PowerShellなら、それが可能です。PowerShellを使って、誰もが繰り返したくないような日常的な反復タスクを自動化する方法をご紹介します。
目次
Microsoft PowerShellは、管理者がコンピュータやネットワークの幅広いタスクを自動化するための強力なツールであるコマンドラインユーティリティおよびスクリプト言語です。PowerShellはコマンドプロンプトのコンポーネントを含み、.NET Framework上に構築されています。WebTech360の記事をご覧になっている方は、PowerShellがIT管理者にとって大規模ネットワークの管理に最適なツールであることをご存知でしょう。
PowerShellの使い方を習得すれば、多くの面倒な日常業務が簡素化されます。また、各サーバーを個別に設定することなく、ネットワーク経由でシステム全体に変更を加えることも可能です。PowerShellは、ハイブリッドクラウド環境の運用に不可欠な要素になりつつあります。
PowerShell には、作業を効率化し、ネットワークを効率的に運用するための様々な用途があります。最も基本的な用途としては、システムの毎日の更新のスケジュール設定、現在のプロセスに関するレポートの生成、定期的なサービスの実行などが挙げられます。これらのタスクの多くは GUI で実行できますが、PowerShell の真髄は、これらのタスクをより迅速に実行できることにあります。
数分でセットアップできる定期的なメンテナンスタスクがある場合、同じ機能をPowerShellという単一のコマンドにスクリプト化できます。そうすれば、次回そのスクリプトを開いたときに、バックグラウンドで実行されます。PowerShellのスクリプトロジックを習得し、オブジェクトやvar(変数)の動作を理解し、ネットワーク全体に賢く展開すれば、なぜもっと早くPowerShellを使っていなかったのかと後悔することになるでしょう。
このチュートリアルでは、PowerShellの基本を解説します。IT初心者の方、特にWindowsコマンドプロンプトに慣れている方にとって役立つ内容です。基本的なツールとコマンドの使い方、ファイルとフォルダの操作方法、オブジェクトの理解、変数の使い方、リモートサーバーの管理方法などを網羅しています。
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では、新しい機能と「コマンドレット」(MicrosoftのPowerShellコマンドの用語で、「コマンドレット」と発音します)が追加されており、対応するバージョンのWindows Management Framework (WMF)とともにインストールされます。
現在、WMF 5.1 が最新の推奨バージョンです。一部の新機能は、WMF のバージョンに加えて、オペレーティングシステムにも依存する場合があります。例えば、Windows 8 および Windows Server 2012 は、特定の TCP /IPポートへの接続をテストできる Test-NetConnection コマンドレットをサポートしていますが、Windows 7 では最新バージョンの WMF を実行していてもこのコマンドレットは使用できません。
ほとんどのWindowsシステムでは、PowerShellコンソールとPowerShell ISE(統合スクリプト環境)という2つのPowerShell環境が利用可能です。PowerShellコンソールは従来のコマンドラインに似ていますが、PowerShellの機能をフルに備えた設計となっています。変数名、ループ、コマンドの自動補完、パイプ処理など、PowerShellコンソールではすべて利用可能です。
より高度な用途(スクリプト作成など)向けに、PowerShell ISE はコマンドの自動補完、コードのハイライト表示、Microsoft の Intellisense コード補完機能を提供しており、PowerShell コードの作成とテストに役立ちます。また、PowerShell ISE では、タブナビゲーションを使用して複数の PowerShell スクリプトを同時に操作することもできます。
PowerShell コマンドの基盤はコマンドレットです。Microsoft は、PowerShell でコマンドレットを作成する際に、いくつかの設計戦略を採用しました。
まず、コマンドレット名を簡単に推測できる、あるいは少なくとも見つけやすくする機能です。PowerShellのコマンドやコマンドレットは、標準化された構文を使用して使いやすく設計されているため、コマンドラインインターフェースからスクリプトを作成しやすくなります。
コマンドレットは、Get-Service、Stop-Service、Import-Csv のように、動詞-名詞形式を使用します。コマンドレット名の動詞部分は、名詞に対して実行されるアクションを示します。通常、情報を取得するために使用されるコマンドレットの名前には、Get-ProcessやGet-Contentのように、動詞Getが含まれます。何かを変更するために使用されるコマンドは通常、動詞Setで始まり、何かに新しいエンティティを追加するために使用されるコマンドは通常、AddまたはNewで始まります。
次に、PowerShellでよく使用されるパラメータにも標準化された名前が付けられます。たとえば、-ComputerNameパラメータを使用すると、コマンドレットを1台以上のリモートコンピュータで実行できます。-Credentialは、特定のユーザーとしてコマンドを実行するために、ユーザー資格情報を含む認証オブジェクトを提供するために使用されます。
コマンドレットとパラメータの両方にエイリアスを使用すると、キー入力回数を減らし、コマンド全体の長さを短縮できます(複数のコマンドを連結する場合に便利です)。これらのエイリアスは必ずしも標準的な命名規則に従っているわけではありませんが、従来のコマンドラインユーティリティの慣例を反映しています。
PowerShellでは、DIR、CD、DEL、CLSなどのエイリアスは、それぞれGet-ChildItem、Set-Location、Remove-Item、Clear-Hostコマンドレットに対応しています。パラメータエイリアスは2つの方法で使用できます。コマンドレットによって提供される定義済みのエイリアスを使用するか、コマンドレットでサポートされているパラメータ間で一意の一致を作成するのに十分な文字数を入力してエイリアスを作成するかのいずれかです。
多くのシステム管理者は、サーバー上の別の場所へのフォルダの移動、ログファイルのアーカイブ、大容量ファイルの検索など、業務の中でファイルやフォルダを操作する必要があります。多くのファイルに対して同じ操作を繰り返す場合、PowerShellを使用して自動化することで、時間を節約する効果的なソリューションとなります。
ファイルやフォルダを検索するために、昔のコンピュータ管理者が最初に習得したコマンドラインツールの一つがdirコマンドでした。dirコマンドは、指定されたディレクトリに含まれるファイルとフォルダを一覧表示します。
PowerShellには、Get-ChildItemコマンドレットという同様のコマンドがあります。Get-ChildItemを使用すると、ディレクトリ内のファイルのリストを素早く作成し、パイプコマンドでファイルを操作したり、出力を変数に割り当てたりすることができます。
Get-ChildItem は、パイプライン、-Pathパラメータ、またはコマンドレット名の直後にパスを指定するだけで使用できます。Get-ChildItem によって返される応答を変更するには、コマンドレットで使用できるいくつかのパラメータを考慮する必要があります。
-Filterパラメータは、ファイルを検索する方法の一つです。デフォルトでは、Get-ChildItem は対象ディレクトリの直下のディレクトリのみを返します。この機能は、現在のディレクトリに含まれるディレクトリを再帰的に検索する-Recurseパラメータを使用することで拡張できます。
PowerShell 4.0 では、Get-ChildItem に–Fileまたは–Directoryスイッチを使用して結果をファイルまたはディレクトリに限定する機能が追加されました。以前のバージョンの PowerShell では、結果を Where-Object に渡し、PSIsContainer プロパティでフィルタリングしてこの判定を行う必要がありました。両方の手法を使用して C:\Users\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 コマンドを使用して、コマンドレットの構文セクションで受け入れ可能なパラメータを確認してください。
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 ヘッダー情報を画面に出力できます。ドライブに名前が付いていないと、画面に表示されるテキストはドライブに名前が付いている場合と若干異なります。シンプルな If-Else ステートメントを使用して、VolumeName プロパティが空の文字列かどうかを確認します。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 ファイルをダブルクリックしてスクリプトを実行します。
もちろん、スクリプトの作成は自動化プロセスの一部です。次に、スクリプトが自動的に実行され、タスクが実行されるようにします。そのためには、スクリプトを毎日、または必要に応じて実行するスケジュールタスクを作成できます。
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を理解したい方にとって役立つことを願っています。ただし、この記事で作成したサンプルスクリプトは非常にシンプルです。より複雑なアプリケーションにも対応できるよう、より完成度の高いスクリプトを構築・開発できると考えています。
Fn ファンクション キーを使用すると、一部のハードウェア機能をより迅速かつ簡単に制御できます。
この場違いなインジケーターは通常、BitLocker 暗号化が無効になっているか、更新に再起動が必要であるか、ファームウェアのアップグレードが保留中であることを意味します。
Windows 10 でコンピューターのプロパティ (またはシステムのプロパティ) を開くには、次の 6 つの方法のいずれかを使用できます。
ゲスト Wi-Fi ネットワークを適切にロックダウンすると、他の情報を共有することなく、インターネット接続を訪問者と共有できます。
この記事では、WebTech360 が Windows 11 でファイアウォールをオフにする方法を説明します。
初めてコンピュータを購入したときは、数秒で起動し、まるで夢のようにスムーズに動作しました。しかし、時が経つにつれて状況は変化しました。
このドキュメントは、インターネット履歴やブラウザのキャッシュをクリアする方法ではなく、.tmp ファイルの削除について説明します。
Windows 11 のバックグラウンド アプリをオフにすると、パフォーマンスが最適化され、バッテリーが節約され、RAM の消費量が削減されます。
VPN をインストールすると、Windows 11 コンピューターのセキュリティが強化されます。
Windows には、PC のインターフェイスをカスタマイズしたり、快適性を向上させたり、完全にハンズフリーで操作したりするのに最適な、便利なアクセシビリティ オプションが多数用意されています。
Windows 10では、Microsoftは「設定」という新しいアプリケーションを統合しました。この設定アプリケーションは、従来のコントロールパネルアプリケーションに代わるものとしてMicrosoftが作成したMetroアプリケーションです。
システム上の大きなフォルダは、システム容量を大量に消費する原因の一つです。作成したフォルダの多くは、削除してもしばらくすると再び表示されます。もしかしたら、削除しようとした不要なフォルダかもしれません。
ISPが提供するデフォルトのDNSサーバーが遅い、安全でない、または信頼性が低いと思われる場合は、使用する必要はありません。Windows 11コンピューターでDNSサーバーの設定を変更する方法は次のとおりです。
GodModeはショートカットWindowsマスターコントロールパネルと呼ばれます。GodMode(またはGod Mode)は、Windowsオペレーティングシステム上のあらゆる設定とアクセスを可能にするコントロールパネルです。
TP LinkモデムのパスワードまたはWi-Fi名を変更するには、このモデム回線のアドレスにログインする必要があります。では、TP Linkモデムのログインアドレスとは何でしょうか?
Fn ファンクション キーを使用すると、一部のハードウェア機能をより迅速かつ簡単に制御できます。
この場違いなインジケーターは通常、BitLocker 暗号化が無効になっているか、更新に再起動が必要であるか、ファームウェアのアップグレードが保留中であることを意味します。
Windows 10 でコンピューターのプロパティ (またはシステムのプロパティ) を開くには、次の 6 つの方法のいずれかを使用できます。
ゲスト Wi-Fi ネットワークを適切にロックダウンすると、他の情報を共有することなく、インターネット接続を訪問者と共有できます。
この記事では、WebTech360 が Windows 11 でファイアウォールをオフにする方法を説明します。
初めてコンピュータを購入したときは、数秒で起動し、まるで夢のようにスムーズに動作しました。しかし、時が経つにつれて状況は変化しました。
このドキュメントは、インターネット履歴やブラウザのキャッシュをクリアする方法ではなく、.tmp ファイルの削除について説明します。
Windows 11 のバックグラウンド アプリをオフにすると、パフォーマンスが最適化され、バッテリーが節約され、RAM の消費量が削減されます。
VPN をインストールすると、Windows 11 コンピューターのセキュリティが強化されます。
Windows には、PC のインターフェイスをカスタマイズしたり、快適性を向上させたり、完全にハンズフリーで操作したりするのに最適な、便利なアクセシビリティ オプションが多数用意されています。
Windows 10では、Microsoftは「設定」という新しいアプリケーションを統合しました。この設定アプリケーションは、従来のコントロールパネルアプリケーションに代わるものとしてMicrosoftが作成したMetroアプリケーションです。
システム上の大きなフォルダは、システム容量を大量に消費する原因の一つです。作成したフォルダの多くは、削除してもしばらくすると再び表示されます。もしかしたら、削除しようとした不要なフォルダかもしれません。
ISPが提供するデフォルトのDNSサーバーが遅い、安全でない、または信頼性が低いと思われる場合は、使用する必要はありません。Windows 11コンピューターでDNSサーバーの設定を変更する方法は次のとおりです。
GodModeはショートカットWindowsマスターコントロールパネルと呼ばれます。GodMode(またはGod Mode)は、Windowsオペレーティングシステム上のあらゆる設定とアクセスを可能にするコントロールパネルです。
TP LinkモデムのパスワードまたはWi-Fi名を変更するには、このモデム回線のアドレスにログインする必要があります。では、TP Linkモデムのログインアドレスとは何でしょうか?