エンジニアの転職を支援するFEnetインフラのテックブログ。ネットワークなどのITインフラ情報を中心に発信中。

  1. FEnetインフラ
  2. FEnetテックマガジン
  3. エンジニア
  4. PowerShellのスクリプトとは?スクリプトの実行方法やパラメータの指定方法を紹介!

PowerShellのスクリプトとは?スクリプトの実行方法やパラメータの指定方法を紹介!

  • エンジニア
  • テクノロジー
公開日時:   更新日時:
PowerShellのスクリプトとは?スクリプトの実行方法やパラメータの指定方法を紹介!
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>

    PowerShellのスクリプトとは?

    PowerShellはマイクロソフトが開発したシェル機能です。Windows10に標準で入っているので、すぐに利用出来るメリットがあります。コマンドプロンプトに似ていますが、それよりも多機能です。

    Windowsは昔から拡張子が.batのバッチファイルを使用できましたが、PowerShellにも同じように.ps1拡張子のスクリプトを使うことができます。ただしこれを使うにあたって注意点があります。それを含めましてスクリプトの使い方を解説しましょう。

    スクリプトを使うには管理者権限が必要

    PowerShellのスクリプトを作るには、スタートメニューのWindows PowerShellフォルダにある「Windows PowerShell ISE」を使用するのが便利です。ただし初回の場合は右クリックをして、その他→管理者として実行、で起動してください。

    このアプリがデバイスに変更を加えることを許可しますか?と聞いてきますが、はいを選択してください。するとWindows PowerShell ISEが起動します。

    ファイルサイズの平均を出すスクリプト

    まずはWindows PowerShell ISEの上部のテキスト入力欄に以下の内容を入力してください。Get-ChildItemで実行した場所のファイル数を取得し、次にGet-ChildItemとForEach-Objectを組み合わせてファイルの総サイズを計算して、割り算で1ファイルの平均サイズを表示します。-Recurseをつけているのでサブフォルダ以下も対象になります。

    $cnt = (Get-ChildItem -Recurse).count
    $allsize = 0
    Get-ChildItem -Recurse | ForEach-Object { $allsize += $_.Length }
    $average = $allsize / $cnt
    Write-Host ファイルサイズの平均は $average byte です。
    Read-Host Enterを押してください

    スクリプトをps1形式で保存

    F5を押すと実行します。なおWindows PowerShell ISEは起動するとC:\WINDOWS\system32が現在の場所になっていますが、ここで全ファイルをチェックするような処理は実行しない方が良いので、実行前に「Set-Location パス名」で別の場所に移動しましょう。

    実行するとその場所のファイルサイズの平均が表示されます。それではこのスクリプトを保存しましょう。メニューのファイル→名前を付けて保存で、average.ps1という名前で保存します。

    セキュリティエラーで実行できない

    では保存したスクリプトを実行しましょう。Windows PowerShell ISEのコマンドラインから、

    .\average.ps1

    と入力してEnterを押下します。すると、以下のようなエラーが出て実行できません。

    .\average.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\test\average.ps1 を読み込むことができません。
    (中略)
    + CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

    Windows10は初期状態ではスクリプトを実行できない

    Windows10は初期状態では、PowerShellのスクリプトを実行できないのです。その理由はPowerShellが多機能で強力なため、それだけセキュリティ的な危険もあるからです。スクリプトを実行できるようにするにはどうしたらよいのでしょうか。

    その方法は、コマンドラインから以下を実行してください。

    Set-ExecutionPolicy RemoteSigned

    すると実行ポリシーを変更しますか?というダイアログが出てきて、はい/いいえを聞いてくるので、はいを選択してください。

    実行ポリシーを変更すればスクリプトを実行できる

    これでスクリプトを実行できるようになります。以下を入力すると、今度は実行できることがわかります。

    .\average.ps1

    Set-ExecutionPolicyで実行ポリシーを変更できたのは、Windows PowerShell ISEを管理者権限で起動しているからです。そうでない場合は変更はできません。なおSet-ExecutionPolicyで指定できる実行ポリシーは次項の4種類があります。

    4種類の実行ポリシー

    Restricted 全てのスクリプトを実行できない。
    AllSigned 署名されているスクリプトのみが実行可能。
    RemoteSigned このPCで作成したスクリプトは実行可能。インターネットでダウンロードしたスクリプトは署名がある場合のみ実行可能。
    Unrestricted 署名が無くても全てのスクリプトが実行可能。

    Windows10は初期状態ではRestrictedになっています。ちょうどいい実行ポリシーは、今回Set-ExecutionPolicyで選択したRemoteSignedと言えるでしょう。

    マウスでスクリプトのアイコンを選択して実行も可能

    スクリプトはコマンドラインからだけでなく、Windows10のエクスプローラー上からアイコンを選択して実行することもできます。エクスプローラーでps1ファイルを選択して、マウスの右クリックで「PowerShell で実行」を選択します。

    するとPowerShellが立ち上がって、ps1ファイルが実行されます。処理が終了するとウィンドウはすぐ閉じてしまうので、今回のスクリプトの最後に記述しているRead-Hostで入力待ちをすると良いでしょう。

    スクリプトはパラメータ指定も可能

    スクリプトは$Args[0]、$Args[1]…という形式でパラメータを受け取ることもできます。今回のサンプルを以下のように直します。

    $path = $Args[0] $cnt = (Get-ChildItem $path -Recurse).count
    $allsize = 0
    Get-ChildItem $path -Recurse | ForEach-Object { $allsize += $_.Length }
    $average = $allsize / $cnt
    Write-Host $path のファイルサイズの平均は $average byte です。
    Read-Host Enterを押してください

    これで以下のように調べたいフォルダを指定することができます。

    .\average.ps1 c:\test

    Paramでパラメータを指定できる

    引数を最初に宣言することもできます。サンプルソースの先頭を以下のように変更しましょう。

    Param($Path)
    $path = $Path

    すると以下のような指定も可能になります。

    .\average.ps1 -Path c:\test

    パラメータは以下のように型を宣言することも可能です。

    Param([String]$Path)
    $path = $Path

    複数のパラメータを持つこともできる

    パラメータは複数持つこともできます。以下をsizecheck.ps1として保存してください。2つ目のパラメータの数値よりも大きいサイズのファイルを数えます。

    Param([String]$Path,[Int]$Size)
    $count = 0
    Get-ChildItem $Path -Recurse | ForEach-Object {
    If($_.Length -gt $Size) { $count++ }
    }
    Write-Host $path の $Size byteより大きいファイルは $count あります。
    Read-Host Enterを押してください

    以下のように実行できます。

    .\sizecheck.ps1 c:\test 200

    もし以下のようにした場合、2つ目のパラメータがInt型ではないのでエラーにすることができます。

    .\sizecheck.ps1 c:\test abc

    PowerShellのスクリプトを活用しよう!

    PowerShellのスクリプトについて解説しましたが、ご理解頂けましたでしょうか。Windowsでバッチファイルを使っていた人も、今後は是非、PowerShellのスクリプトに移行しましょう。

    FEnet経験者優遇! 最短10秒!

    FEnetを運営しているネプラス株式会社はサービス開始から10年以上
    『エンジニアの生涯価値の向上』をミッションに掲げ、
    多くのインフラエンジニア・ネットワークエンジニアの就業を支援してきました。
    ネプラス株式会社ロゴ

    ネプラス株式会社はこんな会社です

    秋葉原オフィスにはネプラス株式会社をはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • インフラ業界に特化

      インフラ業界に特化

      ネットワーク・サーバー・データベース等、ITインフラ業界に特化。Cisco Systemsプレミアパートナーをはじめ各種ベンダーのパートナー企業です。

      業界を知り尽くしているからこそ大手の取引先企業、経験豊富なエンジニアに選ばれています。

    • 正社員なのにフリーランスのような働き方

      正社員なのにフリーランスのような働き方

      正社員の方でも希望を聞いたうえでプロジェクトをアサインさせていただいており、フリーランスのような働き方が可能。帰社日もありません。

      プロジェクト終了後もすぐに次の案件をご紹介させていただきますのでご安心ください。

    • 大手直取引の高額案件

      大手直取引の高額案件

      案件のほとんどが大手SIerやエンドユーザーからの直取引のためエンジニアの皆様へに高く還元できています。

      Ciscoをはじめ、Juniper、Azure、Linux、AWS等インフラに特化した常時300件以上の案件があります。

    • スキルアップ支援

      スキルアップ支援

      不要なコストを削減し、その分エンジニアの方へのスキルアップ支援(ネットワーク機器貸出、合格時の受験費用支給など)や給与で還元しています。

      受験費用例)CCNP,CCIE:6-20万円、JNCIS:3-4万円、AWS:1-3万円など

      ※業務に関連する一定の資格のみ。各種条件がありますので詳しくは担当者へにお尋ねください。

    • 現給与を保証します!

      100%現給与保証

      前職の給与保証しており、昨年度は100%の方が給与アップを実現。収入面の不安がある方でも安心して入社していただけます。

      ※適用にはインフラエンジニアの業務経験1年以上、等一定の条件がございます。

    • インセンティブ制度

      インセンティブ制度

      ネットワーク機器の販売・レンタル事業等、売上に貢献いただいた方にはインセンティブをお支払いしています。

      取引先企業とエンジニア側、双方にメリットがあり大変好評をいただいています。

    • 社会保険・福利厚生

      社会保険・福利厚生

      社員の方は、社会保険を完備。健康保険は業界内で最も評価の高い「関東ITソフトウェア健康保険組合」です。

      さらに様々なサービスをお得に利用できるベネフィットステーションにも加入いただきます。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      ネプラスは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    ネプラス株式会社に興味を持った方へ

    ネプラス株式会社では、インフラエンジニアを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    ネプラス株式会社へのご応募はこちら↓
    ネプラス株式会社へのご応募はこちら↓

    新着案件New Job

    人気記事Popular Posts