Skip to content

Instantly share code, notes, and snippets.

@yusukegoto
Created May 9, 2015 08:56
Show Gist options
  • Save yusukegoto/ec4bf1b952f01d5de490 to your computer and use it in GitHub Desktop.
Save yusukegoto/ec4bf1b952f01d5de490 to your computer and use it in GitHub Desktop.

はじめに

第5回 PowerShell勉強会 2015/5/9 13:00-18:00 サイト

スクリプトの書き方

waka(若林)さん

かなりの初級向けの内容だが資料としてまとめておきたかった 普段はSIerの下請けでバックアップの設計や障害監視担当

PowerShellとは

PowerShellはコマンドプロンプトやWSHに代わる 最新バージョンは4.0 処理のパイプラインはテキストではなくオブジェクトでやりとりをする Linuxのshellユーザ用にエイリアスが用意されている PSの比較演算子はDOS記法由来なので-eqとかになっているそうな 現在のセッションで割り当て済みの変数の一覧はGet-Variableで確認できる

構文

for each構文はパイプ時にはForEach-Object(%)がある workflow構文はバックグランド実行や再起動後も実行継続すりようなことが指定できる configuration構文はDSCで使う PSはエラーが発生しても止まらないので止めたい場合は

$ErrorActionPreference = "Stop"

PSはコメントベースヘルプがある。ブロックコメントにキーワードを埋め込む 参考 新しいコマンドレットを使う場合はバージョン指定をしてもいいかもしれない

PSのバージョナップとかよくやるのか

QA

Execution Policyは設定しないといけないが 2012R2からはデフォルトの値が緩く変更されている

PowerShell 5.0新機能

牟田口さん 2015年2月からだいぶ内容変わっている

概要

windows10/windows server2016でPowerShell 5.0がリリースなのでは .Net Framework 4.5とWMF4が必須

新機能

PackageManagemnt(旧OneGet)

プラグインでNugetやPowerShellGetやChocolaty, MSI/MSUなどと連携可能 自作も可能 DSCでパッケージインストールの記述がしやすくなる PowerShellGetはPSモジュールの依存関係の解決 コマンドは*-Module

クラス構文

hiddenメソッドはインテリセンスが効かないメソッド。用途不明 実行方法

$x = [クラス名]::New()
$x = New-Object クラス名 # 実装予定??

列挙体

c#と同じ呼び出しかた[列挙体]::値

using namespace

c#のusingみたいなことができるようになった アンドキュメントなので詳細は不明

DSCの新機能

説明

Desired State Configuration PowerShell版Chef

DSC Resource Kit

DSC Resourceの拡張 PowerShellGetを利用してインストールする リポジトリ

WaitForAll/WaitForAny/WaitForSome

複数のサーバについて依存関係を記述することができる DSC単独でオーケストレーションみたいなことができるかも?

Chef Provisioningみたい??

LCM

Local Configuration Manager 分割したconfiguration単位でPULL型PUSH型と分けることができるようになる

新しいコマンドレット

Publish-DscConfigurationはdry-runみたいな? クラス構文によるDSCリソースの記述ができる

改善

32bitのプロセス対応 ISE対応

PSScriptAnalyzer

Invoke-ScriptAnalyzer エイリアスを使うなとかの静的解析が実行できる ISEのアドオンとして提供される予定?

Auto-Generated Example-Driven Parsing

自動の構文解析ツールでMicrosoft Researchの 構文解析のPS実装 法則を見つけてルールを抽出してくれる 自分でサンプルデータを渡してルールを指定できる(ConvertFrom-String)

いまさら

  • シンボリックリンク
  • Zip
  • ゴミ箱を空にできる

その他

PowerShellの候補が方向キーで動き回れるようになってる

C#er的PowerShellの使い方

@posauneさん, 前川さん

ここがイマイチPowerShell

  • 静的片付けではない
  • Resharperがない
  • エディタが貧弱
  • 変数に$をつける文化が苦手

でもDOSは使いたくない PowerShellモジュールをC#で作ればいいんだ!! c#でdllを作ってPSからインポート

pscxとかよく使っているそうな 5.0で追加される機能に近しいことはpscxでできる

作る

  • System.Management.AutomationのPSCmdletを継承する
  • Cmdlet = Class
  • Cmdlet属性をつける
  • Import-Moduleでdllを読みこむ

C#erの人はこう思うらしい C#とVisual Studioわからん。つまらん。 C#でモジュールとか作らん。

動機

  • 大規模なPSを作るときにコンパイルがあると便利
  • C#脳で低級なPowerShellの記述は辛い

PS Analyzerができれば改善される? PSで準備されていることをC#で複雑に焼き直している そこまでしてWindows選びたくない 変にC#が使えてしまう弊害 複雑なスクリプト書くなら細かいコマンド作って テストコード書けばいいのに

PowerShellで行うOffice365の管理&メンテナンス

監査とかで特定ユーザのメールボックスを検索するときに PSで自動化すると便利らしい GUIでできないがCUIだとできるということ

HP/MPなくなった 興味ない

Share PointとかだとC#とかでカスタマイズするのが 王道だが運用レベルならPowerShellも検討してもいいかも

LT

TFS??

Team Foundation Serverは構成管理やAgile・Scrumも包括している

Agileの取り組みで扱わなくていいの??

psake

さけ(pは読まない) リポジトリ PowerShellで書かれたビルド自動化ツール GradleとかRakeみたいな PowerShellは途中でコマンドが失敗しても次に行ってしまう(本日二回目) exec経由で呼び出す

PowerShellはじめてる

配布したPowerShellが環境によって動かない Set-ExecutionPolicy

 powershell.exe -noprofile -ExecutionPolicy unrestricted -Command 'echo hoge'

Azureで独自ドメイン+httpsは辛いらしい

所感

かなりOSSの元でFBもらいながら開発されている。 PowerShellは細かいところのコマンドがないので あと2,3回くらいメジャーアップデートしたら使い物になるのか。 後半のプロダクトに偏った内容は苦行。 Linux・Unixはいいですね。 C#erの話ではWindowsのDevOpsはオンプレでは辛いと感じた。 難しいところはAzureに任せて繋ぎをPowerShellといった ところが落としどころか。 オンプレWindows一択でPowerShellが主役のDevOpsは罰ゲームに近い。 やりたくない。センスない。 勝手にやってくれ。 後半から吐き気がしてきた。 や、それが仕事なのか。 力の使いどころがそこじゃないんじゃないか感がすごかった。

読み方

WSH: だぶりゅえすえいち PowerShell ISE: パワーシェルアイス Nuget: ぬげっと POSH: ぽっしゅ(パワーシェルのことらしい) Chocolaty: ショコラティー、チョコラティー

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment