PowerShell 3.0 OS基本設定

PowerShell 3.0を触ってすぐに使うことになったコマンドレットをここに書き記しておきます。 ホスト名変更 - Rename-Computer R e n a m e - C o m p u t e r n e w n a m e IPアドレス変更 - Get-NetAdapter - New-NetIPAddress - Remove-NetIPAddress # N I C が 1 つ だ け の 場 合 G e t - N e t A d a p t e r | N e w - N e t I P A d d r e s s 1 9 2 . 1 6 8 . 1 . 1 - D e f a u l t G a t e w a y 1 9 2 . 1 6 8 . 1 . 2 5 4 - P r e f i x L e n g t h 2 4 ...

July 3, 2012 · 3 min · 胡田昌彦

ローカルの管理者権限があるかどうかを確認する #PowerShell

ローカルの管理者権限の有無をnet.exeを使って確認します。 [gist]https://gist.github.com/2716207[/gist] 元ネタはこちらです。 - [PowerShell: ◆ローカルのAdministrator権限が有るか確認する](http://mtgpowershell.blogspot.jp/2012/05/administrator.html) - [2012 Scripting Games Commentary: Those Who Forget The Past... - Don Jones - Powershell.com – Powershell Scripts, Tips and Resources](http://powershell.com/cs/blogs/donjones/archive/2012/04/19/2012-scripting-games-commentary-those-who-forget-the-past.aspx) ただし、元ネタだとドメインユーザーがローカル管理者権限を持っているときにそれを判定できなかったのでその部分のロジックを追加しました。

May 17, 2012 · 1 min · 胡田昌彦

PowerShell Tips

今回は自分で使うようにPowerShellのよく使うコマンドレットやTipsをまとめてみます。随時更新する予定! Get-Command Get-Commandでコマンドレットの一覧を取得できます。 P S C : \ > G e t - C o m m a n d C o m m a n d T y p e N a m e D e f i n i t i o n ...

March 5, 2012 · 174 min · 胡田昌彦

PowerShellで簡単に集計する方法

結果がいくつあるか数える 結果がいくつあるかを数えたいケースは結構あるとおもいます。一度テキストファイルに吐き出して、エディタで開いて、行数を見て……。なんていうことは必要なく、Measure-Objectを使えば一発です。 例えば、フォルダ内のアイテム数を数えたい時には以下のようにできます。 ファイルだけ数えたければ以下のように。 フォルダだけ数えたければ以下のように。 コネクションがいくつ貼られているかを数えたければnetstatの結果を数えることができます。結果を文字列で出力するコマンドレットの結果をMeasure-Objectに渡すと、文字列の行数を数えてくれます。(厳密に行数を数えたければ –Lineオプションをつけて行数を数えるほうが「行数」としては正確です。) ESTABLISHEDな接続の数を数えたければ以下のように。 特定のIPアドレスとの接続の数を数えたければ以下のように出来ます。 CSVファイルの集計 PowerShellではCSVファイルの読み込みが非常に簡単に行えます。きちんと1行づつオブジェクトになるので、個人的には感動するレベルです。(だって、PowerShellは規定の状態でサーバーに入ってるんですから!) 以下のようなヘッダ付きのCSVを用意します。 コマンドレット一発でCSVファイルを読み込めます。 おっと、文字化けしてしまいました。これは、PowerShellがUTF-16しか読み込めないからです。UTF-16に変換する方法は色々ありますし、別途文字コード変換ツール等をつかってもらえばいいとおもいますが、PowerShellで1番簡単にできるのは以下のようにTypeを使う方法かとおもいます。。 たったこれだけでPowerShellにCSVファイルが読み込まれ、それぞれの行が1つのオブジェクトになっています。素晴らしいですね。 プロパティはStringですから、もちろん各種Stringのプロパティ、メソッドも使えます。 そして、簡単に行の集計ができます。 これだけ簡単に手軽に色々な集計ができるのはPowerShellの大きな魅力だと思います。是非皆さんも使ってみてください。

February 10, 2012 · 1 min · 胡田昌彦

PowerShellでOSの基本情報を取得する

今回はPowerShellでOSの基本情報を取得してみます。サーバー毎のパラメータシートやアプリケーションの設定情報をいちいちGUIで確認しながら、Excelのシートに落とし込み、設定変更するたびに履歴をつけて…なんていうくだらないことから開放されたいのです。そんなこと本来人間が管理すべきではないはずです…が、残念ながら私の知る範囲では当たり前に行われているようです。 昔もなんとか自動化してやろうとちょっと取り組んだことがあるのですが、結局取得する情報によっては難易度が高く、作りこむ時間がとれず中途半端になってしまいました。特に、OSは基本的に気にしなくていい情報、たとえばHDDアレイのHW側での構成情報などの取得が難しいです。メーカーを絞ればなんとかできるのですが、全メーカー対応するのも面倒だし…。でも、そういってるうちに仮想化の波がかなり押し寄せてきたので、OSから取れる情報だけきちんと記録しておくことに意味が以前より出てきた気がしますし、なんといってもサーバー製品がすべてPowerShellから制御できるものが出てきたのでPowerShellでの情報収集が現実的になってきた気がします。 とりあえず、取得した情報をどうやって加工するかは後回しにして、まずは、OSの基本情報の取得からいってみましょう。 どんな情報を取得しようかな まずはどんな情報が取得できるべきか考えてみます。 基本情報 ホスト名 - OSバージョン - ディスク構成 - ドメイン参加状況 - ネットワーク設定 - 役割情報 - 機能情報 - 適用済みセキュリティパッチ - インストール済みアプリケーション とりあえずこの程度でしょうか。別にPowerShellだから楽ってわけでもないものが多い気がしますが、いいでしょう。さて、うまくいくでしょうか? ホスト名 ホスト名は一番簡単にやるなら以下のコマンドで取れます。 - hostname 変数に格納するのもそのままでOKです。 - $hostname = hostname hostnameコマンドはDosコマンドですが、PowerShellではDosコマンドの結果も普通に取得することができるので、便利です。 OSバージョン OSのバージョンの取得はいろいろやり方があります。WindowsのAPIをたたくっていう手もありますが、せっかくPowerShellなのにこれはちょっとやりたくないです。 Windowsのバージョンの取得 environmentクラスを使ってしまうのが簡単でしょうか。environmentクラスは.net frameworkのクラスですが、こうやって.net frameworkに簡単にアクセスできるのもPowerShellの素敵なところです。 1 : P S C : \ > [ E n v i r o n m e n t ] : : O S V e r s i o n 2 : 3 : P l a t f o r m S e r v i c e P a c k V e r s i o n V e r s i o n S t r i n g 4 : 5 : W i n 3 2 N T 6 . 1 . 7 6 0 0 . 0 M i c r o s o f t W i n d o w s N T 6 . 1 . 7 . . . ディスク構成 ディスク構成も取得方法は色々ありますが、ここではWMIオブジェクトを呼び出してみます。こうやってWMIへのアクセスも一発でいけるのが素晴らしいですね。 ...

January 15, 2012 · 105 min · 胡田昌彦

2010-09-08

毎月、月が変わったら、先月分の撮りためた写真と動画を実家の家族におくっています。やり方は色々な物を試したのですが、結局Dropboxを実家のPCにもセットアップして、Dropboxフォルダ内に数カ月分だけ保持、同期することにしています。 でも、これだと、デジカメの性能が上がってファイルサイズが重くなってきた関係で全てのファイルを保持できなくなってきてしまいました。なので、画像のリサイズ処理も入れるようにしました。月に一度とはいえ、縮小して、コピーして…ということをするのが面倒なのでPowerShellでスクリプトを書きました。リサイズにはImagemagicを使ってます。 これで一応意図した動きをしているのですが、いかんせん写真の容量を下げても動画の容量が大きすぎる、ということがあるので、動画の再圧縮もしたいな、というところです。コマンドラインベースで変換出来るものも探せばあるだろうと思うので、探してみようと思います。もしもいいものを知っていたら教えてください! # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # 作 業 対 象 フ ォ ル ダ ( 基 本 先 月 分 を 処 理 ) $ t a r g e t m o n t h = ( g e t - d a t e ) . a d d m o n t h s ( - 1 ) . t o s t r i n g ( " y y y y M M " )

September 8, 2010 · 1 min · 胡田昌彦

PowerShell上でコマンドを実行する場合の注意点(式モードとコマンドモード)

今回はPowerShell上でコマンドを実行する場合の注意点に関してです。PowerShell上で色々な作業を行う便利さに慣れてくると、コマンドプロンプトは全く使わずにPowerShell上で作業を完結させるようになってきます。が、このときにちょっとした落とし穴があります。 私がはまったのはwbadminコマンドの利用時でした。wbadminコマンドはPowerShellのコマンドレットではない、純粋なコマンドプロンプト上で動作するプログラムです。Windows Server 2008のバックアップを行うことができます。 PowerShell上からwbadminコマンドを実行しようとしたところ以下のような現象が発生しました。「きちんと入力しているのに、文法ミスと言われてしまう」というものです。 1 : P S C : \ W i n d o w s \ S y s t e m 3 2 > w b a d m i n s t a r t s y s t e m s t a t e b a c k u p - b a c k u p t a r g e t : f : ...

July 27, 2009 · 7 min · 胡田昌彦

PowerShellはオブジェクト指向

とりあえずget-commandとget-helpでヘルプを見ながらある程度のことができるようになってきたら、次に把握すべきはPowerShellが「オブジェクト指向」である、ということだと思います。これは既存のほかのシェルとは決定的に異なる点であり、PowerShellのもっともすばらしい点だと思います。 具体的に見てみましょう。例えば文字列。 P S C : \ > $ h o g e = " h o g e " .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, “Courier New”, courier, monospace; background-color: #ffffff; /white-space: pre;/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } ...

June 22, 2009 · 19 min · 胡田昌彦

2009-06-18

昨日教えてもらったのですが、PowerShellの開発にはPowerGUI Script Editorがものすごく便利そうです。インテリセンスあり、デバッグあり…。なんで今まで気がつかなかったんだろう? PowerGUI.org - Free Windows Powershell Community

June 18, 2009 · 1 min · 胡田昌彦

2009-03-06

単純にPowerShellスクリプト終了時に「Exit 1」のようにしてあげれば返せるかと思いきや、「Exit 2」でも「Exit 100」でもすべてerrorlevelは1になってしまいます。 きちんと2以上の値も返したければPowerShellコマンドのcommandオプションでスクリプトを実行させたうえで、「exit $LASTEXITCODE」としてあげればいいそうです。具体的には以下のように。 p o w e r s h e l l - N o P r o f i l e - c o m m a n d " . \ h o g e . p s 1 ; e x i t $ L A S T E X I T C O D E " 元ネタはこちら。 ...

March 6, 2009 · 1 min · 胡田昌彦

PowerShellに触れてみる

インストール シェル、プログラムはやはり「習うより慣れろ」です。早速インストールして触ってみましょう。 .NET Framework PowerShellは.NET Framework上で動作しますので、まずは.NET Frameworkを導入します。バージョンは.NET Frameworkの2.0以上が入っていればOKです。自分の環境に合うものを導入してください。 - [ダウンロードの詳細 : .NET Framework Version 2.0 再頒布可能パッケージ (x86)](http://www.microsoft.com/Downloads/details.aspx?familyid=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=ja) - [ダウンロードの詳細 : Microsoft .NET Framework 3.0 再頒布可能パッケージ](http://www.microsoft.com/downloads/details.aspx?familyid=10CC340B-F857-4A14-83F5-25634C3BF043&displaylang=ja) - [ダウンロードの詳細 : .NET Framework 3.5](http://www.microsoft.com/downloads/details.aspx?familyid=333325FD-AE52-4E35-B531-508D977D32A6&displaylang=ja) PowerShell PowerShellはVista用のものとそれ以外用のものとで提供されているページが異なりますので、使用しているOSにあったものを導入してください。 - [ダウンロードの詳細 : Windows Vista 用 Windows PowerShell 1.0 インストール パッケージ (KB928439)](http://www.microsoft.com/downloads/details.aspx?familyid=C6EF4735-C7DE-46A2-997A-EA58FDFCBA63&displaylang=ja) - [Windows Server 2003 用および Windows XP 用の Windows PowerShell 1.0 ローカライズ版インストール パッケージ](http://support.microsoft.com/Default.aspx?kbid=926140) とりあえず触ってみる! get-command, get-help インストールが完了したら、とりあえず起動してみましょう。 コマンドプロンプトとほぼ同じようなウインドウが表示されます。派手さは全くありませんね・・・。CUIの最大の問題として、「で、何をしたらいいの?どんなコマンドがあるの?」と、起動したあと何をしていいかわからなくなってしまうことがあげられます。 が、PowerShellでは心配無用です。まずはいつもコマンドプロンプトで使っているコマンドをたたいて見ましょう。 上記はping www.google.comを実行してみたところですが、このように普通に実行できます。PowerShellでは通常のDosのコマンドは全て使えるのです。 これだけでは、コマンドプロンプトと同じですね。PowerShellならではのコマンドは何が使えるのでしょうか?これを知るためのコマンドが用意されています。その名もそのまま「get-command」コマンドレットです。 ...

March 6, 2009 · 1 min · 胡田昌彦

PowerShellはぜひマスターしよう

PowerShellとは PowerShellはマイクロソフトがWindows環境で提供する最新のシェルです。対話型のシェルとしても使えますし、スクリプティング環境としても使えます。本格的にオブジェクト指向を取り入れていますし、.NET Frameworkを利用することができるので、かなり強力な環境です。C#でできることなら何でもPowerShellでできるわけですね。 また、さまざまな環境で利用できます。Windows XP, Windows Server 2003以降のすべてのOSで利用できますし、Windows Server 2008以降であれば(おそらくすべてのOSに)標準搭載されます。 また、「スナップイン」を追加することでできることがどんどん増えていきます。マイクロソフトはExchange Server 2007以降のサーバー製品はすべてPowerShellのスナップインを提供する意向を表明しているので、Exchange Server 2007以降に登場するすべての製品のすべての操作がPowerShell上から行えることになります。 PowerShellの何がいいのか これは、管理者にとってはものすごく大きな変化です。サーバーを導入して、設定を変更して…ということを今までは(ほぼ)すべてGUIで行っていました。これがWindowsの長所であったのですが、同時に短所でもありました。設定値がどうなっているか知りたかったら、GUIツールですべての項目をクリックしてまわって調べないといけませんでしたし、同じ環境を作ろうと思ったら、すべての設定を全部記録しておいて、それを一からすべてGUIツールをつかってマウスでカチカチ設定して回らなければいけませんでした。 それがPowerShellに移行されれば、PowerShellのコマンドを全て記録しておくことで設定の履歴を残すことも非常に簡単ですし、たとえば検証環境で実行したコマンドを本番環境で流し込むだけで構築完了、というようなこともできるようになります。設定が一部漏れていて、検証環境と本番環境で挙動が異なってしまい、すべてのパラーメーターを確認し直す…というようなことが頻繁にあった今までのことを考えると夢のような話です。 また、今までGUIツールで手作業でやっていたら1日かかっても終わらないようなことも、PowerShellなら1行で簡単にできるのが当たり前です。「Exchangeのメールボックスのうち、使用容量が80%以上のメールボックスで、かつきちんと使われているもの(最終ログオン日時が1週間以内のもの)だけ、メールボックスの容量を1.5倍にして」なんて言われて、それをGUIツールでやろうと思ったら、10個、20個ならいいですけど、100個、1000個、1万個に対して…となったらもう手作業ではやっていられませんよね?PowerShellならコマンドを1行書けばおしまいです。 いつからPowerShellが活躍するのか 惜しいのは、Windows Vistaで標準搭載にならなかったことですね。WSHの時もそうでしたが、サーバーはいいとしても、結局クライアントの管理を全てPowerShellで完結させようと思ったら、やはり標準搭載の環境でなければハードルが高すぎるのです。これが現在でもまだDOSが使われている一番大きな原因でしょうし、WSHが便利な理由です。そういう意味ではWindows Server 2008、Windows 7からPowerShellが標準搭載されるのは非常に嬉しいことです。 サーバー管理ではすでにPowerShellが使いこなせることはすでに必須条件になりつつあります。クライアント管理に関してはまだまだ先の話にはなると思いますが、数年後にはPowerShellが当たり前の時代が来ると私は思っています。いまのうちからPowerShellに馴染んでおくのがWindows管理者として今後も活躍できるための必要条件になると思います。 ということで、このブログでもPowerShellのことも書いていこうと思っています。お付き合いください。

March 5, 2009 · 1 min · 胡田昌彦

2009-02-22

昨日、今日と社内の勉強会用にPowerShellの入門的な事柄をPPTにまとめて書いてました。うん。このくらい理解できればわかった気になれるだろうな、というくらいにはまとめられた気がします。 PowerShellは短いコマンドをちょっとつなぐだけでかなり素敵なことができるから、Windowsを管理する人は是非マスターすべきだと思う。 仕事に関連する情報はほとんどまとまった体系的な情報がネット上になくて苦労するんだけど、プログラミング系のことはネット上に情報が多くて助かる・・・。

February 22, 2009 · 1 min · 胡田昌彦

[exchange][programming][script] Exchange Server 2007のキュー監視をPowerShellスクリプトで

先日、要望があったので、Exchange Server 2007のキュー監視をPowerShellで行うスクリプトを試しに書いてみました。PowerShellでのスクリプト作成はほとんどやったことがないので、色々と試行錯誤をしながら。 配列に対して配列を追加していく際に、2次元配列になることを期待していたのに1次元の配列になっていて、それに気がつかずに混乱したり、変数を初期化しているつもりなのに正常に初期化されず以前の結果が表示されて混乱したりしましたが、基本的なところはおおよそ理解できた気がします。 PowerShellで普通に書くことのできる記法やコマンドをスクリプト内で直接使えるので、すごく記述量が少なくて幸せです。.Net Frameworkのクラスも直接扱えるし、もうVBScriptやJScriptではスクリプトを書きたくなくなってしまいました。 PowerShellお勧めですよ。あとはどれだけ普及してくれるかですね。Vistaに標準搭載じゃなかったのは痛い・・・。(VBScriptやJScriptでスクリプトを書くのはそれがほぼ全ての端末で動作するからなので)

May 14, 2008 · 1 min · 胡田昌彦

2008-03-02

PowerShellのスクリプトを作成するIDEとしてPowerGUIというものを見つけました。結構便利そうです。 PowerGUI - Administrative Powershell Console : PowerGUI RTMs! « Dmitry’s PowerBlog: PowerShell and beyond PowerShellベースになって、コマンドラインでできるようになって便利!やった!・・・と私は感じているのですが、周りの人に話を聞いて見ると、GUIでできないことが増えてしまって非常に厳しい・・・という声が多いようです。 そういった人にはお勧めできるのではないでしょうか。とはいっても、やはり色々知識がないと使いこなせないとは思いますが・・・。

March 2, 2008 · 1 min · 胡田昌彦

AI・テクノロジーの情報を発信しています

YouTube

AI・テクノロジーの最新トレンドを動画で配信中

note

技術コラム・深掘り記事を公開中