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年以上
『エンジニアの生涯価値の向上』をミッションに掲げ、
多くのインフラエンジニア・ネットワークエンジニアの就業を支援してきました。
ネプラス株式会社はこんな会社です
秋葉原オフィスにはネプラス株式会社をはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
インフラ業界に特化
ネットワーク・サーバー・データベース等、ITインフラ業界に特化。Cisco Systemsプレミアパートナーをはじめ各種ベンダーのパートナー企業です。
業界を知り尽くしているからこそ大手の取引先企業、経験豊富なエンジニアに選ばれています。
-
正社員なのにフリーランスのような働き方
正社員の方でも希望を聞いたうえでプロジェクトをアサインさせていただいており、フリーランスのような働き方が可能。帰社日もありません。
プロジェクト終了後もすぐに次の案件をご紹介させていただきますのでご安心ください。
-
大手直取引の高額案件
案件のほとんどが大手SIerやエンドユーザーからの直取引のためエンジニアの皆様へに高く還元できています。
Ciscoをはじめ、Juniper、Azure、Linux、AWS等インフラに特化した常時300件以上の案件があります。
-
スキルアップ支援
不要なコストを削減し、その分エンジニアの方へのスキルアップ支援(ネットワーク機器貸出、合格時の受験費用支給など)や給与で還元しています。
受験費用例)CCNP,CCIE:6-20万円、JNCIS:3-4万円、AWS:1-3万円など
※業務に関連する一定の資格のみ。各種条件がありますので詳しくは担当者へにお尋ねください。
-
現給与を保証します!※
前職の給与保証しており、昨年度は100%の方が給与アップを実現。収入面の不安がある方でも安心して入社していただけます。
※適用にはインフラエンジニアの業務経験1年以上、等一定の条件がございます。
-
インセンティブ制度
ネットワーク機器の販売・レンタル事業等、売上に貢献いただいた方にはインセンティブをお支払いしています。
取引先企業とエンジニア側、双方にメリットがあり大変好評をいただいています。
-
社会保険・福利厚生
社員の方は、社会保険を完備。健康保険は業界内で最も評価の高い「関東ITソフトウェア健康保険組合」です。
さらに様々なサービスをお得に利用できるベネフィットステーションにも加入いただきます。
-
東証プライム上場企業グループ
ネプラスは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
ネプラス株式会社に興味を持った方へ
ネプラス株式会社では、インフラエンジニアを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


新着案件New Job
-
【高額年収】/【CCNA取得者歓迎】/ネットワークの構築/BIG-IP/東京都千代田区/【WEB面談可】/在宅ワーク/20代~30代の方活躍中
年収540万~540万円東京都千代田区(神保町駅) -
東京都中央区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅ワーク
年収600万~600万円東京都中央区(小伝馬町駅) -
【高額年収】/インフラ構築支援/東京都港区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅ワーク
年収960万~960万円東京都港区(新橋駅) -
ガバナンス推進、セキュリティ基盤支援/東京都港区/【WEB面談可】/在宅ワーク/20代~40代の方活躍中
年収780万~780万円東京都港区(新橋駅) -
カー用品販売会社の情報システム運用/東京都千代田区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/テレワーク
年収576万~576万円東京都千代田区(水道橋駅) -
ネットワーク構築、検証/東京都渋谷区/【WEB面談可】/テレワーク/20代~40代の方活躍中
年収540万~540万円東京都渋谷区(渋谷駅)
人気記事Popular Posts
-
PowerShellの文字コードについて解説!文字化けで困らないための対処法
2021-01-19 2022-04-26 -
ベンダーとはどういう意味なのか|ベンダーとつくIT用語10個
2020-10-29 2022-04-26 -
PowerShellでファイルコピーをする方法とは?PowerShellのインストール方法も紹介!
2021-03-10 2022-04-26 -
PowerShellでのOut-Fileコマンドの使い方|各オプションもご紹介
2021-03-09 2022-04-26 -
PowerShellでのWhere-Objectの使い方とは?Where-Objectを正しく理解しよう
2021-03-10 2022-04-26 -
PowerShellでの正規表現の使い方について紹介!正規表現を正しく使いこなそう!
2021-01-20 2022-04-26 -
PowerShellのスクリプトとは?スクリプトの実行方法やパラメータの指定方法を紹介!
2021-02-19 2022-04-26 -
PowerShellのStart-Processの使用方法とは? Start-Processを使いこなそう!
2021-03-02 2022-04-26 -
Windowsにおけるdirコマンドとdirコマンドのよく使うオプション
2021-05-13 2022-04-26 -
【2020年版】独学で基本情報技術者試験に合格するための参考書をご紹介
2020-09-30 2022-04-27 -
エンジニアが目標設定をする8つのコツ|年数別の具体例を紹介
2020-04-20 2022-04-26 -
PowerShellでのGet-Contentコマンドの使い方やオプションについて解説!
2021-03-09 2022-04-26