stuncloud
11/12/2015 - 7:39 AM

11/12 PowerShell勉強会用 お品書き

11/12 PowerShell勉強会用 お品書き

PowerShell勉強会

日常生活で使うPowerShellのお話
DSCとかは全然知識ないので話せません!ごめんね!

コマンドプロンプトはやめよう

あれは人間が使うようにできていないからやめましょうね
わかりましたか、はい

cmdでできてPowerShellでできないことはあるの?

たまにある、mklinkとか
まぁでもそういう場合だけ cmd /c hogehoge すればいいよね

ヘルプ

なんかわかんないことあったらとりあえず help する

PS> help Some-ComdletThatYouWantToKnowAbout

Cmdlet(コマンドレット)

  • Verb-Noun 形式のコマンド

エイリアス

例えば Get-ChildItem というコマンドレットには
dir, ls, gci といった別名がついてるよ

  • Cmdlet
  • Function
  • 実行ファイル

なんかは必要に応じて任意に別名付けられる

Set-Alias -Name subl -Value 'C:\Program Files\Sublime Text 3\sublime_text.exe'

TAB補完

とにかくあらゆるとこでTAB補完がわりと強力に効くので素敵です
いいことです

  • パス
  • Cmdlet
  • エイリアス
  • パラメータ名
  • 一部のパラメータ値

PowerShellのTAB補完はワイルドカード入れてやるとよりハッピーになれる

パイプ処理

# フォルダ作ってそこに移動とか楽にできる
PS> md hoge | Convert-Path | cd

パイプで値を受けられるパラメータを持つコマンドをパイプ先に出来る
パイプで渡るのは

  • オブジェクト (ByValue)
  • オブジェクトのプロパティ (ByPropertyName)

※パラメータがどっちを指定してるかによる

リスト処理的なの

  • Select-Object
  • Where-Object
  • Foreach-Object
1..10 | % {ni -Path . -Name "$_.txt" -ItemType File}
ls *.txt | ? {$_.BaseName % 2 -eq 1} | select FullName

リモートPCをPowerShellで操作

  • PSSession

WinRMを使ってる
sshみたいなもんだと思っていいんじゃないでしょうか
そうでもない

導入方法

リモート

  • Enable-PSRemoting

リモート操作される準備を全部やってくれる素敵Cmdlet
これ叩いてエラー出なけりゃOK
エラー出ても対処して出なくなるまで叩けばOK

ローカル

  • TrustedHost

名前の通り信頼される端末のホスト名を教えてやる必要がある
するとリモート接続できるようになる
本来ホスト名を書くんだろうけどどこの解説見ても

* (どいつもこいつもばっちこい) を指定しとけ

としか説明されてなくて書式とかよくわかんない

.Netとか

いざとなったら.Net使えるからなんでもできちゃう
C#で書いたコードをとり込んだりも出来る
C#でP/InvokeしちゃえばWinAPIも叩ける

強力すぎる暗黙の型変換

強力すぎるのでちゃんと意識しないとえーってなる

関数

  • Function
  • Filter
  • ScriptBlockを使った即時関数

スクリプト

  • *.ps1 ファイル

当然バッチスクリプト的に書けるし、ファイル1個をひとつの関数の様にも書ける
ただし実行するには下記の実行ポリシーなるもので許可されてないとダメ

スクリプトの実行ポリシー

  • *-ExecutionPolicy

基本は署名されてないと動かないから安心、みたいな仕組み
穴が多い

PowerShellのカスタマイズ

  • $PROFILE
  • モジュール

PSDrive

  • ファイルシステム
  • レジストリ
  • 証明書ストア
  • その他

こういったものをまとめて

PowerShell5.0登場!

Windows10にプリインストールされてるよ
そうじゃなくてもWMF5.0Preview版インストールすれば使える

パッケージ管理

  • PackageManagement
  • chocolateyなんかもラップされてる

Class

Enum

従来はC#でクラス定義書いて型を追加す必要があった
列挙型も同様
クラスはPrivateなメンバが作れないのとかちょっとうーん…な感じ
メソッドの書き方なんかがPowerShell的じゃないからそこもちょっとね
でも実際はさくっとクラスかけるととても便利だった
Enumはけっこう使いたいのでとてもありがたい

シンボリックリンクに対応

シンボリックリンクが作れるようになった

PS> New-Item -Name hoge -ItemType SymbolicLink -Target c:\hoge

けど削除ができないとかまだ微妙

PSReadLine

Windows10だとプリインストールされてる
こいつのおかげで操作性がものすごく向上した
WMF5.0Previewだと入ってないので上記のパッケージ管理使って入れようね

  • シンタックスハイライト
  • 複数行コマンド
  • 独自のコマンド実行履歴
  • 任意のキーバインド

PSReadlineすげぇ

おまけ