PowerShell Provider for IIS 7.0 (x86) - CTP2 でアプリケーションプールを作るとエラーになる

by けろ-みお 28. 11月 2008 01:51

 

ネタ元1:アプリケーションプールを作成する方法 (IIS WMI) (元MS社員 の だどさんのサイト)

ネタ元2:New-WebSite error (iis.net)

ネタ元3: PowerShell Provider for IIS 7.0 (x86) - CTP2 (iis.net)

 

元MS社員のだどさん が IIS用のWMI + VBScript を使ったWebサイト記事を更新したそうなのですが、

全部これPowerShellでできるんじゃないかと 思い、

iis.net のサイトから、PowerShell Provider for IIS 7.0 (x86) - CTP2 を入手し、

New-AppPool コマンドレットやWmiClassを使って試しにアプリケーションプールを作ってみました。

しかし、どうも動きがおかしいようです。

 

■VBScriptでIIS7のアプリケーションプールを作成する場合(だどさんのWebサイトで公開中)
Set oWebAdmin = GetObject("winmgmts:root\WebAdministration")
Set oAppPool = oWebAdmin.Get("ApplicationPool")
oAppPool.Create("NewAppPool1")

 

■PowerShell Provider for IIS 7.0 (x86) - CTP2 を使って、New-AppPoolコマンドレットを使った場合

PS IIS:\> New-AppPool -Name NewApplicationPool1
 
Name                     State        Applications
----                     -----        ------------
NewApplicationPool1
 
New-AppPool : オブジェクト識別子が有効なオブジェクトを表現していません。 
(HRESULT からの例外: 0x800710D8)
発生場所 行:1 文字:12
+ New-AppPool  <<<< -Name NewApplicationPool1

 

ただし、New-AppPoolでエラーになるもののアプリケーションプール自体はIISで作られている

 

■PowerShell Provider for IIS 7.0 (x86) - CTP2 とWMIを使ってアプリケーションプールを作成した場合

$pool = ([WmiClass]"\\.\root\MicrosoftIISV2:IIsApplicationPoolSetting").CreateInstance()
$pool.Name = "W3SVC/AppPools/NewApplicationPool1"
$options = New-Object System.Management.PutOptions
$options.Type = [System.Management.PutType]::CreateOnly
$pool.Put($options)
 
"1" 個の引数を指定して "Put" を呼び出し中に例外が発生しました: "null 値の式では
メソッドを呼び出せません。"
発生場所 行:1 文字:10
+ $pool.Put( <<<< $options)

 

ただし、WMI版の方は、実際にアプリケーションプールがIIS上で作成されていない。

 

どうもこれはバグであるという認識はあるようで、次期バージョンのリリースではこのバグは修正される予定とのことです。

IIS7 の PowerShell対応はまだまだこれからですね。

IISのPowerShell化が進むと、Webアプリケーションでシステム組んでいる人はリリース作業が非常に楽になります。

一応、IIS7 + PowerShell に関する情報が非常に少ないので、この情報をUPしておきたいと思います。

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

はじめまして むたぐちです

by 牟田口大介 24. 11月 2008 18:55

はじめまして、むたぐち(牟田口大介)と申します。

HIROさんからご招待を受けて、こちらに参加させていただくことになりました。といっても実はずいぶん前からお誘いを受けていたんですが色々あって遅くなっちゃいました。

メインはわんくま同盟というところでScripting Weblogというのをやっていて、そちらでPoweerShellやその他スクリプト、プログラミングを中心に情報発信しています。また、オフラインでも講師などをやっています。ですので、今後もPowerShellの記事はそちらで中心に書いていこうと思っています。RSSはHIROさんに貼っていただいているので、左のサイドバーからご参照くださいませ。

また、今年の4月にPowerShellの書籍Windows PowerShell ポケットリファレンスを技術評論社さんから書かせていただきました。

PowerShellの公式サイトにも記事を寄稿させていただいたことがあります。 

ソーシャルネットワークサイトmixiでもPowerShellコミュニティの管理人をやっております。

PowerShellもですがWSHを昔からさわっていて、Windows Script Host Laboratoryというサイトも運営しています。

PowerShellの国内情報をリンク集としてまとめておりますので、そちらもご参照ください。

WSHについては@ITさんでチェック式 WSH入門 という連載記事を書かせていただいてます。

Microsoft MVP for Data Center Management - Admin Frameworks という賞を受賞していまして、一応、PowerShellのコミュニティ専門家というお墨付きはあるようですが、実はここにいらっしゃるみなさんほど活動してないのでごめんなさいです^^; 

他にもいろいろWebでは活動していまして(作曲とか)、ご興味がありましたらwinscript.jpという私が運営しているサイトをご覧ください。プライベート日記はこちらです。

宣伝ばかりで申し訳ないです^^;が、こんな感じでやっていこうと思いますのでよろしくお願いします。

現在のレート 4.0 (2人)

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

お知らせ

PowerShellスクリプトでバルーンお知らせ

by 入海 23. 11月 2008 15:35

仕事でいろいろなことをスクリプトで自動化することがある。「これやらなきゃ」と思ってスクリプトを実行して、そのスクリプトがしばらくかかるものならメールをチェックしたり、他の作業を同時進行することが多いのだ。そんな状況でよくあるのが、そのスクリプトを実行したことさえも忘れてしまい、いろいろなウィンドウの後ろにコンソールウィンドウがひっそりと我慢強く待っていてくれたのを一時間ぐらい後に発見する。

こんなことが起きるのはスクリプトにはあまり目立ったお知らせ機能がないからだ。Outlookだと「ダディディン!」という音と共にポップアップウィンドウで会議があと何分後にあることを知らせてくれる。スクリプトだってそのプロセスが終わったことを知らせてくれるもっと目立つ機能があってもいいのではないかと考えてPowerShellでやってみた。次に紹介するのも.NET Frameworkのおかげなのだ。

まずはバルーン機能からやってみる。そもそもバルーンとは何か。下の画像を見ていただければ一目瞭然だ。

image

Windowsを使いなら一度は見たことがあるだろう。

まず最初に、矢印のアイコンに注目する。標準のアイコンというものはなく自分で指定してやらなければいけない。スクリプトが自分のコンピュータのみで動作するのだったらいいが、そのスクリプトが他のコンピュータにも配布されるということを想定して、アイコンをBase64の文字列に変換しスクリプト内に埋め込んでみる。まずはBase64文字列に変換する作業から。

まずはファイルをByte配列としてメモリに読み込む。それをBase64文字列に変換。ちなみに今回の記事でPowerShellらしいところといえばGet-Contentのみだろう。あとは.NET Frameworkを直接使っている。

image

このBase64文字列をスクリプト内に埋め込むことにする。

もう一度確認するが、このスクリプトの目的はバルーンを使ってスクリプトの実行が終了することをより視覚的に知らせることである。それをするために次のようなスクリプトを書いてみた。

#デフォルトではSystem.Windows.Formsは読み込まれていないので、それを初めに読み込む。
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
 
#NotifyIconクラスを使うので、インスタンスを作成。
$NotifyIcon = New-Object System.Windows.Forms.NotifyIcon
 
# アイコンを表すBase64文字列を変数に格納しておく。このようにしてアイコンやいろいろなバイナ
# リデータをBase64文字列としてスクリプト内に格納することも可能だが、データのサイズが大きい
# と文字列も長くなってしまうので注意。
$iconString = "AAABAAIAEBAAAAAAAABoAwAAJgAAABAQEAAAAAAAKAEAAI4DAAAoAAAAEAAAACAAA(HTMLの関係上略)"
 
# Base64文字列をByte配列に変換。
$binaryData = [System.Convert]::FromBase64String($iconString)
 
# 次の4行でByte配列に格納されていたアイコンをSystem.Drawing.Iconにして使えるようにする。
$memStream = New-Object System.IO.MemoryStream
$memStream.Write($binaryData, 0, $binaryData.Length)
$memStream.Position = 0
$icon = New-Object System.Drawing.Icon($memStream)
 
$memStream.Close()
 
# 最終的にIconプロパティを上で作ったIconオブジェクトにセットし、ShowballoonTipメソッドを
# 実行する。
$NotifyIcon.Icon = $icon
$NotifyIcon.Visible = $true
$NotifyIcon.ShowBalloonTip(100000, "俺のスクリプト", "スクリプトは終了しましたよ!", "Info")
 

これをファイルに格納してPowerShell上で実行すると、下のようにPowerShellからバルーンを使うことができる。

image

ちなみにSystem.Media.SoundPlayerを使えば音を鳴らすことだって可能だ。音を使えばより効果的であることは容易に想像できる。あまり詳しく説明しないが次のように音を鳴らすこともできるのだ。

$SoundPlayer = New-Object System.Media.SoundPlayer("$env:SystemRoot\Media\chimes.wav")
1..3 | foreach{$SoundPlayer.Play();[System.Threading.Thread]::Sleep(1000)}

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

PowerShell用秀丸強調表示定義ファイル

by 入海 20. 11月 2008 11:05

PowerShellのスクリプトをPowerGUIで編集していたらコピペができない事態が生じたので、秀丸で編集しようと思ったら強調表示定義ファイルがない・・・ということで作ってみました。キーワードが文字列内で強調されないようにしたかったけど、正規表現がちょっとめんどかったのでそのままにしてしまいました。

ファイルはここからダウンロードできます。

一応秀丸サイトにも投稿しておきます。

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

PowerShell

PowerShellで最新コードをダウンロード

by 入海 19. 11月 2008 13:25

Team Foundation Serverを使うようになってからもうかれこれ2年ぐらいが経つ。その間にだんだんソリューションファイルが多くなってきたり、一つの製品の開発環境を作るのにあっちをいじったりこっちをいじったりしなきゃいけなくなってきたので、自動化を試みている。その一環としてPowerShellを使ってTeam Foundation Serverから最新バージョンのコードをダウンロードするコードを書いてみた。

param
(
    $tfsServerName = $(Throw "TFSのサーバ名を入力してください。"),
    $localFolderPath = $(Throw "ローカルのフォルダパスを入力してください。"),
    $Domain = "",
    $Username = "",
    $Password = "",
    [String[]] $getPaths = $(Throw "サーバ側から最新コードをダウンロードするパスを配列として渡してください。")
)
 
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")
[void] [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.VersionControl.Client")
 
$credential = $null
 
if (($Username -eq "") -or ($Password -eq ""))
{
    $credential = Get-Credential
}
else
{
    $credential = New-Object System.Net.NetworkCredential($Username, $Password, $Domain)
}
 
#TeamFoundationServerオブジェクトを作成。
$tfs = New-Object Microsoft.TeamFoundation.Client.TeamFoundationServer($tfsServerName, $credential)
$tfs.Authenticate()
 
# VersionControlServerを使ってWorkspaceオブジェクトを取得。
$vcs = $tfs.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer])
$ws = $vcs.GetWorkspace($localFolderPath)
 
$ws.Get($getPaths, [Microsoft.TeamFoundation.VersionControl.Client.VersionSpec]::Latest, "Full", "GetAll")
 

最新のブログ

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

PowerShell

Calendar

<<  3月 2010  >>
月曜火曜水曜木曜金曜土曜日曜
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

View posts in large calendar
Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2010 PowerShell from Japan!!