Windows PowerShell

導入

Windows 8.1以降では、クイックアクセスメニューからPowerShellを起動できるようになっています。それにはタスクバーのプロパティを開き、[ナビゲーション]タブにある[左下隅を右クリックするか Windows キー + X キーを押したときに表示されるメニューで、コマンド プロンプトを Windows PowerShell に置き換える]を有効にします。Windows 8.1ミニTips (74) クイックアクセスメニュー(WinXメニュー)を効率よく使う●つの方法 | マイナビニュース 阿久津良和 (2014/11/01)

スクリプトの実行許可

既定ではスクリプトの実行は制限されており、実行しようとしても「このシステムではスクリプトの実行が無効になっているため、ファイル C:\sample.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(http://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。」として実行できません。この原因となるポリシーの設定は、Get-ExecutionPolicyで確認できます。about_Execution_Policies | TechNet

実行ポリシーごとの、スクリプトの実行要件
実行ポリシー 署名されたスクリプト 未署名のスクリプト
ローカルで記述 インターネットから入手
Restricted × × ×
AllSigned × ×
RemoteSigned ×
Unrestricted △ (実行時に警告あり)
Bypass ○ (実行時に警告なし)

既定のスコープのポリシーを変更するには次のようにします。この場合すべてのユーザーに影響し、設定はレジストリに書き込まれます。ただし管理者権限が必要となります。

PS C:\> Set-ExecutionPolicy -ExecutionPolicy 実行ポリシー

現在のユーザーにのみ設定するには、スコープでそれを指定します。

PS C:\> Set-ExecutionPolicy 実行ポリシー -Scope CurrentUser
スコープ 影響範囲
Process 現在のセッションのみ
CurrentUser 現在のユーザーのみ
LocalMachine 現在のすべてのユーザー

スクリプトの実行を許可しても、ポリシーの設定によっては署名がないと「ファイル C:\sample.ps1 を読み込めません。ファイル C:\sample.ps1 はデジタル署名されていません。このスクリプトは現在のシステムでは実行できません。スクリプトの実行および実行ポリシーの設定の詳細については、「about_Execution_Policies」(http://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。」として実行できません。

アップグレード

起動時に「新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows」と最新版の導入を促されるならば、そのリンク先からそれを導入できます。「最新版をインストールせよ」とPowerShell起動時に叱られたときの対処法:Tech TIPS - @IT 小林章彦 (2023/10/27)

パラメータ

パラメータは次のようにして受け取れます。

Param(
    [string]$computerName,
    [string]$filePath
)
[CmdletBinding()]
Param(
    [Parameter(Mandatory=$True,Position=1)]
    [string]$computerName,

    [Parameter(Mandatory=$True)]
    [string]$filePath
)

Windows PowerShell: パラメーターを定義する | TechNet Don Jones (2012/08)

コマンドレット (Cmdlet)

コマンドのことを、Windows PowerShellではコマンドレットと呼称しています。コマンドレットとは - Windows PowerShell 入門

このコマンドレットとコマンドプロンプトなどのコマンドとの違いは、Comparison of cmdlets with similar commandsに一覧があります。

Get-ChildItem

dirに類似したコマンドレットで、ファイルの情報を収集できます。

Get-ChildItem -recurse # サブフォルダも含める

特定のファイルのみを含めるにはincludeで指定します。そのとき複数の条件があるときにはカンマで区切ります。

Get-ChildItem c:\scripts\*.* -include *.txt,*.log # c:\scripts\にあるファイルのうち、.txtと.logを含める

ヘルプの確認

それぞれのコマンドの用法は、

コマンドレット名 -?

として確認できます。なおコマンドプロンプトと異なり、「/?」ではなく「-?」です。

このとき既定ではヘルプの一部しかインストールされていないため、次のように表示されます。

注釈
    Get-Help を実行しましたが、このコンピューターにこのコマンドレットのヘルプ ファイルは見つかりませんでした。ヘルプの一部だけが表示されています。
        -- このコマンドレットを含むモジュールのヘルプ ファイルをダウンロードしてインストールするには、Update-Help を使用してください。
        -- このコマンドレットのヘルプ トピックをオンラインで確認するには、「Get-Help コマンドレット名 -Online」と入力するか、
           http://go.microsoft.com/fwlink/?LinkID=****** を参照してください。

この場合には指示に従い、ダウンロードするかオンラインで確認します。もしダウンロードするならば、Update-Helpは管理者として実行します。さもなくば「アクセスが拒否されました。Windows PowerShell のコア モジュールのヘルプ トピックも、$pshome\Modules ディレクトリ内のモジュールのヘルプ トピックも更新できませんでした。これらのヘルプ トピックを更新するには、"管理者として実行" コマンドを使用して Windows PowerShell を起動し、Update-Help をもう一度実行してください。」として更新に失敗します。

参考

コマンドレットの一覧

利用可能なコマンドレットは、Get-Commandコマンドレットでも確認できます。

Windows PowerShell ISE (Integrated Scripting Environment)

PowerShellのGUI環境で、

  • コマンドの実行
  • スクリプトの作成
  • テスト
  • デバッグ

を行えます。

複数のダウンロードサイトから、まとめて検索