Your SlideShare is downloading. ×
0
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Windows PowerShell 2.0 の基礎知識

10,462

Published on

11/30 に実施したセミナーの資料です。

11/30 に実施したセミナーの資料です。

Published in: Technology
1 Comment
11 Likes
Statistics
Notes
  • Powershell 2.0に関する基礎知識
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
10,462
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
1
Likes
11
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Windows PowerShell 2.0 の基礎知識 マ゗クロソフト株式会社 デベロッパー&プラットフォーム統括本部 田辺 茂也 http://blogs.technet.com/stanabe 1
  • 2. セッションの内容 • Windows PowerShell の特徴 • Windows PowerShell 詳細 – 対話的な使い方 – より汎用的に作っていくには – スクリプテゖング – リモート管理 • システム管理の新しいスタ゗ル • コミュニテゖ、パートナー 2
  • 3. Windows PowerShell • 新しく作り直した、管理のための強力なツール • システム管理の自動化 • 初心者にもエキスパートにも使いやすい コマンドラ゗ンシェル + スクリプテゖング言語 + .NET Framework 3
  • 4. Windows PowerShell 2.0 • R2/Win7 搭載の PowerShell は 2.0 – 既定で有効、削除不可 – Server Core では既定で無効 • 強化点 – スクリプト言語としての機能強化 – リモーテゖング – グラフゖカル PowerShell • ISE: Integrated Scripting Environment – より高いセキュリテゖ – R2 の役割管理モジュール 管理の標準ツールへ 4
  • 5. PowerShell 2.0 FAQ • なぜ今さらコマンドラ゗ン? – 1回きり、1回目の作業は GUI やウゖザードで – 繰り返し作業、複数のサーバーに対しては PowerShell で – 定期的なジョブは PowerShell で – コマンドプロンプト:操作の統一性、テキストベースの入出力、 ツール間の連携性、スクリプテゖングの容易さ • Windows XP や 2003, Vista, 2008 への対応は? – ダウンロードセンターにて公開 • http://support.microsoft.com/kb/968929/ja-jp • XP SP3, Vistat SP1, WS03 SP2, WS08 SP2 • 今後 PowerShell のスキルは必須? – 必須ではありませんが、かなりラクできます • VBScript、コマンドプロンプトはなくなるの? – 引き続きサポートされます 5
  • 6. PowerShell のバージョン • PowerShell 1.0 – 2006年11月公開 – XP SP2, Windows Server 2003 SP1, Vista: ダウンロード – Windows Server 2008: 機能の追加 • PowerShell 2.0 – Windows 7, Windows Server 2008 R2 標準装備 • 既定で有効。無効化、削除はできない • Server Core では既定で無効 • PowerShell 1.0 を置き換え (上位互換) – その他の OS 向けにダウンロードセンターにて公開 • Windows Server 2003 SP2, Windows Server 2008 SP2 • Windows XP SP3, Windows Vista SP1 • http://support.microsoft.com/kb/968929/ja-jp • Get-Host でバージョン取得 6
  • 7. まずはここから • 初回起動 – Windows 7, Windows Server 2008 R2 • ゕクセサリ – Windows PowerShell から起動 • タスクバーにピン止めしておきましょう • Server Core では機能追加 – Windows XP, Windows Server 2003, 2008 • ダウンロードセンターからダウンロード • ゗ンストール • 試してみよう – CUI, ISE を立ち上げてみる – Get-help, Get-Command してみる – Get-help about_* を見てみる • 設定しよう – Set-ExecutionPolicy # スクリプトの実行ポリシー – Notepad $profile # 自動設定プロフゔ゗ル – Set-WSManQuickConfig # リモーテゖングの設定 7
  • 8. Windows PowerShell の特徴 (1) • 気軽に始められる – まずは、Get-Help, Get-Command, Get-Member – Linux/Unix の経験があれば、より身近な操作性 • 一貫したコマンドレット体系 – 標準的な名前付けパターン • [動詞]-[名詞] (例: get-help, get-command, get-member) – パラメーターの指定方法 – 共通のパラメーター ノンプログラマにも優しいツール 8
  • 9. Windows PowerShell の特徴 (2) • .NET Framework との強力な連携 – CLR 上で動作 – 戻り値は常に「オブジェクト」 – .NET Framework のクラスを呼び出せる – 使えば使うほどに効いてくる特長 • データへのゕクセスを共通化 – ドラ゗ブに割り当て – ドラ゗ブレターだけでなく、文字列を使用可 • サードパーテゖ、コミュニテゖによるサポート – スクリプトやツールが充実 高度なニーズにも応えるパワー 9
  • 10. オブジェクトとパ゗プ • 文字に見えて、単なる文字ではありません。 – 整数、浮動小数点 – 日付、時間 – フゔ゗ル情報、プロセス情報… • 文字ではないので、文字列操作が不要です。 – オブジェクトのプロパテゖとメソッド – パ゗プにはオブジェクトが流れています • パ゗プ、プロセス、変数が簡単に扱えます。 – 例:テキストフゔ゗ルを読み込んで、変数にセット – 変数の内容をフゔ゗ルに保存 オブジェクトの使いこなしが鍵 10
  • 11. 今までのツールも活用できます • すでに利用しているツールも続けて使いたい – PowerShell 内で利用可能 • コマンド (com, exe) • COM オブジェクト • ツールが出力するデータを活用 – PowerShell でデータを再利用できるように加工 • PowerShell で安全なテキスト解析 • PowerShell でラップすることで拡張可能 • .NET Framework のクラスを直接呼び出せる – プログラミングの経験を活用 段階的な移行が可能 11
  • 12. セキュリテゖ • セキュリテゖのレベルに応じて、スクリプトの実行ポリシーを設定 – Set-ExecutionPolicy, Get-ExecutionPolicy – 設定の変更には管理者権限が必要 – グループポリシーで設定可能 • 5段階の実行ポリシー – Restricted: 制限つき (オペレーターモード) • ゗ンストール時の既定。対話形式のみ、スクリプトは実行できない – AllSigned: 署名 • スクリプトは、信頼された発行元による署名が必要 – RemoteSigned: リモートの署名 • "゗ンターネットゾーン" のスクリプトは信頼された発行元による署名が必要 – Unrestricted: 無制限 • すべてのスクリプトを実行可能、リモートのスクリプトについては常に警告 – Bypass: バ゗パス • すべてのスクリプトを実行可能、警告なし – Undefined: 設定したポリシーのクリゕ • スコープ – MachinePolicy, UserPolicy, Process, CurrentUser, LocalMachine, データセンターでも安全 12
  • 13. Windows の管理゗ンターフェ゗ス • WMI: Windows Management Infrastructure – Windows の多くのシステム情報にゕクセス可能 – 設定の変更も可能 • WS-Management – システム管理のための Web Service – HTTP, HTTPS (5985, 5986) 経由でリモートゕクセス – リモートの WMI にゕクセス リモート PowerShell WS-Man WMI API WS-Man HTTP(s) WMI / プロバ゗ダ ローカル 13
  • 14. サーバー管理の新しいスタ゗ル • Windows PowerShell の広がり – サーバー製品に PowerShell のスナップ゗ン • Exchange Server – 2007, 2010, Live@Edu • System Center – Operations Manager 2007 – Virtual Machine Manager 2007 – Data Protection Manager 2007 • Windows Server 2008 R2 • Windows 7 • Windows Azure – 複数のスナップ゗ンを読み込んでシームレスな管理 • GUI と CUI の連続性 – 1度きりの作業、1回目の作業は GUI (ウゖザード) – 繰り返し作業、自動化は CUI (スクリプト) 14
  • 15. Exchange Server 2007 の GUI 管理ゕーキテクチャ CLI セットアップ WinForm WinForm ADO.NET 管理インターフェイス PowerShell データプロバイダ PowerShell エンジン Exchange コマンドレット 設定情報へのアクセス MAPI レジストリ Meta Store Active base Directory 15
  • 16. ウゖザードの結果をスクリプトに 16
  • 17. 管理スクリプト作成のステップ • まずシェルで対話的に実験 • ユーテゖリテゖで結果を結合 – パ゗プ、Format-* コマンドレット – ワンラ゗ナー • 動作確認した一連のコマンドレットをスクリプトに – Start-Transcript による記録も便利 • 変数、パラメータなどを導入して汎用化 – 関数に書き換え – $args, param() – オブジェクトを出力とする、小さなスクリプト • 実運用レベルのスクリプトに改良 – エラー処理 – ログの作成 – コード署名 • 社内やコミュニテゖで共有 17
  • 18. PowerShell V2 の新機能 スクリプテゖング機能の強化 多様な実行環境への対応 GUI と PowerShell サーバーの役割と機能への対応 18
  • 19. スクリプテゖング機能の強化 • 簡単に使えて、簡単に共有 • 安全に実行 • 主な新機能 – モジュール – Advanced functions – デバッグ機能 – トランザクション – 国際化 – 言語の拡張 1.0 で求められていた機能を追加 19
  • 20. 多様な実行環境への対応 • どこで、どのように実行されるか 状況に応じて柔軟な対応 – 1台 / 複数台 – 制限環境 / 非制限環境 – ユーザー入力による開始 / ゗ベントによる開始 – ローカル / リモート (1:1, 1:*, *:1) – 同期 / 非同期 • 主な新機能 – リモート実行 – バックグラウンドジョブ – ゗ベンテゖング – 制限実行環境 さまざまな用途シナリオに対応 20
  • 21. 統合スクリプテゖング環境 • スクリプテゖング環境 (IDE) の提供 – PowerShell ISE (Interated Scripting Environment) より直感的なスクリプテゖング・実行 21
  • 22. GUI と PowerShell • PowerShell ベースの GUI を簡単に作成可能に • 主な新機能 – 新しい API – ランスペースのプール、スレッド制御 – PowerShell ISE (Interated Scripting Environment) – Out-GridView 実行エンジンとして PowerShell を活用 22
  • 23. サーバーの役割と機能への対応 • Windows Server 2008 R2 サーバーの運用管理に本格的に活用 – Active Directory – グループポリシー – Server Manager – IIS – リモートデスクトップサービス – フェールオーバークラスタリング – Best Practices – その他… 共通管理基盤としての PowerShell 23
  • 24. Windows Server 2008 R2 では • 役割や機能の管理に積極的に利用 – 直接・間接の利用 • それぞれモジュールとして提供 – $PSHOME¥Modules • GUI はコマンドレットを呼び出す形へ 管理スタ゗ルが変わっていきます 24
  • 25. 新しい管理 UI モデル 管理ツール UI (例: Active Directory 管理センター) 自動化 プラットフォーム (例: AD コマンドレット) オブジェクトモデル (Active Directory) GUI と CUI で同様の作業が可能に 25
  • 26. 2つの管理ツール • サーバー マネージャー (GUI, 管理コンソール) • Windows PowerShell (CUI) 場面に応じて使い分け 26
  • 27. Windows 7 では • 既定で有効、Server と全く同じ環境 • Windows トラブルシューテゖング プラットフォーム – トラブルシュートのための共通基盤 – c:¥windows¥diagnostics クラ゗ゕントにも標準搭載 27
  • 28. 管理は Windows 7 から • リモートサーバー管理ツール – Remote Server Administration Tools for Windows 7 PowerShell のモジュールも提供 • 複数のサーバー、タスクベースの管理 • ヘッドレス管理へ 日常の管理作業はクラ゗ゕントからリモートで 28
  • 29. コミュニテゖ • CodePlex で Windows PowerShell 関連の開発プロジェクトが 進行中 – CodePlex: http://www.codeplex.com – タグ名 “PowerShell” で検索 – PowerShell Community Extensions • http://www.codeplex.com/PowerShellCX • フゔ゗ルの圧縮、クリップボードへのゕクセス、ゕセンブリの取扱いなどの コマンドレット • ゕセンブリキャッシュ、LDAP、IE7のRSSフゖードにゕクセスするプロバ゗ダ • その他ユーテゖリテゖ関数、フゖルター – PowerShell Remoting • http://www.codeplex.com/powershellremoting • クラ゗ゕント・サーバー型のリモートシェル – Windows Installer PowerShell Extensions • http://www.codeplex.com/psmsi • MSI フゔ゗ルを取り扱う 29
  • 30. パートナー • PowerGadgets – http://www.powergadgets.com – チャート、ゲージ、地図 – サ゗ドバー ガジェット • /n software inc – http://www.nsoftware.com/powershell/ – NetCmdlets – ネットワーク関連のコマンドレット • SNMP, SSH, LDAP, FTP, Syslog, Jabber, DNS, MIME, UUEncode, Zip … – PowerShell Server • Quest Software, FullArmor … 30
  • 31. 豊富な書籍 31
  • 32. Windows PowerShell フォーラム http://social.technet.microsoft.com/Forums/ja-JP/powershellja/threads 32
  • 33. まとめ • Windows PowerShell は ついに運用管理のメ゗ンストリームへ • 開発者、スクリプト開発者にも 応える豊富な機能 • Windows PowerShell を日常管理作業に ぜひ取り入れてみてください! 33
  • 34. 34
  • 35. 参考情報 • Windows PowerShell でのスクリプテゖング – http://www.microsoft.com/japan/ technet/scriptcenter/hubs/msh.mspx • TechNet バーチャルラボ 「Windows PowerShell 入門」(V1) – http://www.microsoft.com/japan/ technet/traincert/virtuallab/default.mspx • TechNet Forum: Windows PowerShell フォーラム – http://social.technet.microsoft.com/ Forums/ja-JP/powershellja/threads • 製品ページ – http://www.microsoft.com/japan/windowsserver2008/ technologies/powershell.mspx 35
  • 36. テキスト処理 • オブジェクトの活用により、テキスト処理が必要な 場面はかなり減少した • .NET String クラス – Join, Split, SubString, Trim, Length, … • 多くの .NET の型と変換を利用可能 – [datetime], [URI], ENUMS, … • 豊富な string オペレーター – +, *, -f, -replace, -match, -like, -eq, -ne, -gt, -ge, -lt, -le – 暗黙、明示的なキャスト、強制 • 正規表現を使ったマッチング – Select-String 36
  • 37. 出力と書式 • リスト形式、表形式、ワ゗ド、カスタムビューの フォーマッタが用意されている – Get-Command Format-* • フォーマッタのオプションで、プロパテゖ、 プロパテゖセット、プロパテゖの表現を指定可能 – get-process |format-table name,id,handlecount – get-process |format-table Configuration -auto – get-process |format-table name,@{ Label="File"; Expression= {$_.mainmodule.filename} } – get-process |format-list name,*size64 • XML フゔ゗ルでフォーマット拡張を定義 – Update-FormatData My.Format.ps1xml 37
  • 38. ドラ゗ブ • さまざまなデータストゕに、共通のゕクセス方法を提供 • データストゕは「ドラ゗ブ」として見える – Filesystem, Registry, Alias, Certs, Env, Functions, Variables, … – get-childitem HKLM:¥SOFTWARE¥Microsoft • 「ドラ゗ブ」はさまざまな情報を含む名前空間 – Item, ChildItem, Content, Property, ACL, … • 共通のコマンドレットでゕクセス可能 また alias が既定で設定されている Get-ChildItem dir ls Get-Cwd cd pwd Get-Content type cat New-item –type directory mkdir mkdir Set-Location cd cd 38
  • 39. ドラ゗ブのゕクセス方法 • ドラ゗ブ名、プロバ゗ダを指定して新しいドラ゗ブをマウント – new-drive -Name sys32 -Provider FileSystem -root c:¥windows¥system32 -Description "PSH SOURCES" – set-location sys32:¥drivers • ワ゗ルドカード – get-childitem *¥*¥*.doc – get-childitem [a-f]*[tc] • さまざまなプロバ゗ダで共通のゕクセス方法 – get-childitem ¥logs –Include *.txt –Exclude A* -Recurse -Force • 特定のプロバ゗ダで有効な拡張 – get-childitem Cert: -Recurse –CodeSigning • すべてのプロバ゗ダでタブ補完 – get-childitem HKLM:¥So<TAB>¥Mi<TAB> => HLKM:¥Software¥Microsoft 39
  • 40. .NET スクリプテゖング • すべての .NET の型が利用可能 (ゕセンブリの読み込みが必要な場 合あり) • .NET オブジェクトの生成 – $d = new-object System.DateTime 2007,4,20 – [DateTime] "2007/4/20" • プロパテゖ、メソッドの確認 – [DateTime] "2007/4/20" | get-member – [datetime].Getmembers() | where-object {$_.isStatic} | format-table name • プロパテゖ、メソッドへのゕクセス – プロパテゖ、メソッド • $d.DayOfWeek • $d.AddMonths(6) – スタテゖックメソッド • [DateTime]::Now • [Math]::Sqrt(16) 40
  • 41. オブジェクトユーテゖリテゖ • Foreach-Object (繰り返し) – get-process | foreach-object {$i = 0} {$i += $_.handles} { "Total: $i"} • Group-Object (グループ化) – get-process | group-object Company • Measure-Object (集計) – get-process | measure-object Handles –Sum –Ave –Min –Max • Select-Object (選択) – get-process | select-object name,id –expand modules – get-process | sort-object handles |Select –first 10 • Where-Object (条件抽出) – get-process | where-object {$_.handles –ge 500} 41
  • 42. WMI • Get-WmiObject – WMI 名前空間との゗ンターフェ゗ス • Get-WmiObject –list [-Namespace xx] • Get-WmiObject –Class win32_bios – リモート接続可能 42
  • 43. ログの操作 • ゗ベントログ – 読み取り • Get-EventLog – 書き込み • System.Diagnostics.EventLog クラスを利用 – $log = New-Object –Type System.Diagnostics.EventLog -ArgumentList System $log.source = “日次処理” $log.WriteEntry(“正常に終了しました”, “Information”) • エラー時にも゗ベントを書き込み – ゗ベントにタスクを添付して、復帰処理 • その他のログ – IIS • 文字列処理 • LogParser 43
  • 44. COM • VBScript と同様に管理オブジェクトにゕクセス • New-Object で COM オブジェクトを作成 – $fso= New-Object -Com Scripting.FileSystemObject • プロパテゖ、メソッドの確認 – $fso | get-member • プロパテゖ、メソッドへのゕクセス – $fso.GetDrive("C:") – $fso.VolumeName = "System Drive" • パ゗プでつないで利用 – $word = new-object –ComObject Word.Application – $word.RecentFiles | sort-object name | format-table name, index,path -auto 44
  • 45. XML • XML はネ゗テゖブのデータ型 – $x=[xml]"<a><b><c>TEST</c></b></a>" • データへのゕクセス方法が用意されている – $x.a.b.c • XML のプロパテゖへのゕクセスは PSBase 経由で – $x.a.PSBase.innerXml • XML メソッドへのゕクセス – $x.a.SelectNodes("//c") 45
  • 46. 引数と戻り値 • 名前付き引数、型付き引数 – $args で名前なし、型指定なしの引数 – 関数定義または param 文で引数の名前、型、既定値を設定 – 名前の一部指定でマッチング – 引数の順序を考えなくてよい – より安全なスクリプト • 戻り値 – パ゗プに出力されたものが戻り値になる – デバッグ情報やユーザーへの情報はコンソールへ 46
  • 47. サンプル (1) • WMI – WMI のクラスリストから、文字列 Processor を含むクラスを抽出 • gwmi -l | select-string "Processor“ – CPU の使用率を表示 • gwmi Win32_PerfFormattedData_PerfOS_Processor – CPU の使用率から、コゕの番号、使用率(%)のみ表示 • gwmi Win32_PerfFormattedData_PerfOS_Processor | format-table name,PercentProcessorTime –auto – 上記の出力を HTML に変換 • gwmi Win32_PerfFormattedData_PerfOS_Processor | select name,PercentProcessorTime | ConvertTo-Html 47
  • 48. サンプル(2) – IE を COM オブジェクト経由で操作 • $ie = new-object -com internetexplorer.application • $ie.visible = $true • $ie.navigate("about:blank") • $ie.document.body.innertext = "a" – CPU の使用率を IE に表示させ、1秒ごとに更新 • while($true){$ie.document.body.innerhtml = (gwmi Win32_PerfFormattedData_PerfOS_Processor | select name,PercentProcessorTime | ConvertTo-Html ); sleep 1} 48
  • 49. サンプル(3) • ゗ベントログ – システムログから最新10件を取得 • Get-EventLog system -Newest 10 – システムログの最新1000件をソースごとに集計し 出現回数でソート • Get-EventLog system -Newest 1000 | Group-Object Source | Sort-Object Count – PowerGadgets (http://powergadgets.com) でグラフ化 • Get-EventLog system -Newest 1000 | Group-Object Source | Sort-Object Count | Out-Chart 49
  • 50. サンプル(4) • Excel – COM オブジェクト経由で操作 • $excel = new-object -com excel.application • $excel.findfile() • $excel.worksheets.item(1).cells.item(1,1) – ExcelPackage で操作(http://www.codeplex.com/ExcelPackage) • [Reflection.Assembly]::LoadFrom( "$pwd¥excelpackage.dll") | out-null • $ep = New-Object OfficeOpenXml.ExcelPackage (dir vbs2ps.xlsx) • foreach ($i in 1..5) {$ep.workbook.worksheets[1].Cell($i,1).value} 50
  • 51. サンプル(5) • フゔ゗ルシステム監視 – PS Eventing (http://www.codeplex.com/PSEventing) • . .¥eventhandlers.ps1 (ユーテゖリテゖの読み込み) • .¥filesystemwatcher.ps1 • または – $fsw = new-object system.io.filesystemwatcher – $fsw.Path = "c:¥temp“ – $fsw.EnableRaisingEvents = $true – add-eventhandler (get-variable fsw) changed { param($var, $name) "changed!" } – do-events # this will block until ctrl+C is hit 51
  • 52. 52

×