PowerShell

スピーカー:Takeshi@インフラ系の人 さん

アジェンダ

  • PowerShellってなんやねん
  • cmd.exeとPowerShellの違い
  • バッチとPSスクリプトを動かす

PowerShellってなんやねん

  • ファイルの拡張子を.batとすることで、Windowsの基本コマンドを使ったスクリプトを作れる。
  • ファイルの拡張子を.vbsとすることで、高機能なスクリプトを作れる。
  • 今まで様々なスクリプト形式を使っていたものが、PowerShellに統合された。

cmd.exeとPowerShellの違い

  • 実際にコマンドを打ちながら違いを確認していく。
  • cmd
    • cdコマンドでディレクトリを移動する
    • dirコマンドでディレクトリの一覧を表示する。
  • PowerShell
    • cdコマンドでディレクトリを移動する
    • dirコマンドでディレクトリの一覧を表示する。(が、表示が若干異なる)
    • 名前の通りShellを意識しているのでUNIX/Linuxシェルに近いコマンドもある。
    • ls コマンドでもディレクトリの一覧を表示できる。
    • PowerShell では alias により、lsとdirが同じコマンドレットget-childitemとなっている。
  • Power Shellではhelp コマンドを使うことで、aliasの情報が表示可能。
> > help dir 名前 Get-ChildItem 構文 Get-ChildItem [[-Path] <string[]>] [[-Filter] <string>] [<CommonParameters>] Get-ChildItem [[-Filter] <string>] [<CommonParameters>] エイリアス gci ls dir 注釈 Get-Help を実行しましたが、このコンピューターにこのコマンドレットのヘルプ ファイルは見つかりませんでした。ヘルプの一部だけが表示されています。 -- このコマンドレットを含むモジュールのヘルプ ファイルをダウンロードしてインストールするには、Update-Help を使用してください。 -- このコマンドレットのヘルプ トピックをオンラインで確認するには、「Get-Help Get-ChildItem -Online」と入力するか、 https://go.microsoft.com/fwlink/?LinkID=113308 を参照してください。
  • PowerShellではコマンドを「コマンド」と呼ばずに「コマンドレット」と呼ぶ。
  • cmd.exeで特定のファイル・ディレクトリ名を取得するには次のコマンドを実行した後、特定の行を抽出するなどの実装を行う必要がある。
C:\Users\dozono>dir /o-d ドライブ C のボリューム ラベルは Windows です ボリューム シリアル番号は C886-9B70 です C:\Users\dozono のディレクトリ 2018/01/08 13:33 <DIR> Downloads 2018/01/08 13:19 <DIR> OneDrive 2018/01/08 13:19 <DIR> Links 2018/01/08 13:19 <DIR> . 2018/01/08 13:19 <DIR> .. 2018/01/08 13:18 <DIR> Pictures 2018/01/08 13:18 <DIR> Searches 2018/01/08 13:17 <DIR> Saved Games 2018/01/08 13:17 <DIR> Documents 2018/01/08 13:17 <DIR> Music 2018/01/08 13:17 <DIR> Desktop 2018/01/08 13:17 <DIR> Videos 2018/01/08 13:17 <DIR> Favorites 2018/01/08 13:17 <DIR> Contacts 2017/11/20 00:51 <DIR> Roaming 0 個のファイル 0 バイト 15 個のディレクトリ 462,657,970,176 バイトの空き領域
  • PowerShellでは、実行結果をオブジェクト(配列)のように扱える。
PS C:\Users\dozono> Get-ChildItem ディレクトリ: C:\Users\dozono Mode LastWriteTime Length Name ---- ------------- ------ ---- d-r--- 2018/01/08 13:17 Contacts d-r--- 2018/01/08 13:17 Desktop d-r--- 2018/01/08 13:17 Documents d-r--- 2018/01/08 13:33 Downloads d-r--- 2018/01/08 13:17 Favorites d-r--- 2018/01/08 13:19 Links d-r--- 2018/01/08 13:17 Music d-r--- 2018/01/08 13:19 OneDrive d-r--- 2018/01/08 13:18 Pictures d----- 2017/11/20 0:51 Roaming d-r--- 2018/01/08 13:17 Saved Games d-r--- 2018/01/08 13:18 Searches d-r--- 2018/01/08 13:17 Videos
PS C:\Users\dozono> (Get-ChildItem)[2] ディレクトリ: C:\Users\dozono Mode LastWriteTime Length Name ---- ------------- ------ ---- d-r--- 2018/01/08 13:17 Documents PS C:\Users\dozono>
  • PowerShellは.NET Frameworkの上で動作している。
  • PowerShellから.NET Frameworkのライブラリを呼び出すことも可能。 以下はPowerShellからメッセージボックスを表示する例
PS C:\Users\dozono> Add-Type -Assembly System.Windows.Forms PS C:\Users\dozono> [System.Windows.Forms.MessageBox]::Show("message", "title") OK``` 以下はPowerShellでランダムパスワードを生成してメッセージBOXに表示する例

PS C:\Users\xxpinkishxx> Add-Type -assembly system.web

PS C:\Users\xxpinkishxx> [System.Windows.Forms.MessageBox]::Show([System.Web.Security.Membership]::generatepassword(10,1)) OK```

  • PowerShell では大文字小文字を区別しない

PSスクリプトを動かす

  • PowerShell では誤実行を防止するために、スクリプト本体をダブルクリックしても実行されない(エディタが起動する)
    • .bat .vbsはそのまま実行される。
  • また、PowerShell では、スクリプトの実行ポリシーというものがあり実行できなくなっている。 以下のコマンドは実行ポリシーを変更するコマンドとなる。
PS C:\> Set-ExecutionPolicy RemoteSigned 実行ポリシーの変更 実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170) で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか? [Y] はい(Y) [N] いいえ(N) [S] 中断(S) [?] ヘルプ (既定値は "Y"): y PS C:\> PS C:\> Get-ExecutionPolicy RemoteSigned PS C:\>

GPOでは「コンピューターの構成 > 管理用テンプレート > Windows コンポーネント > Windows PowerShell > スクリプトの実行を有効にする」で構成可能。