2008/07/05DNSへの働きかけはWMIにてインターフェースが公開されていますので、これを利用します。 今回はホスティング仕様のDNS登録をおこないますので、ユニークドメインを使用した場合のDNSゾーンの作成および、CNAMEレコードの作成を行います。
'ゾーンの作成 Dim objManagementScope As New ManagementScope("\\localhost\root\MicrosoftDNS", Nothing) Dim objDNSZone As New ManagementClass(objManagementScope, New ManagementPath("MicrosoftDNS_Zone"), Nothing) Dim objDNSParameters As ManagementBaseObject = objDNSZone.GetMethodParameters("CreateZone") objDNSParameters("ZoneName") = "win1.jp" objDNSParameters("ZoneType") = 0 objDNSZone.InvokeMethod("CreateZone", objDNSParameters, Nothing)
'CNAMEレコードの作成 Dim objDNSResourceRecord As New ManagementClass(objManagementScope, New ManagementPath("MicrosoftDNS_ResourceRecord"), Nothing) Dim objDNSParameters As ManagementBaseObject = objDNSResourceRecord.GetMethodParameters("CreateInstanceFromTextRepresentation") objDNSParameters("TextRepresentation") = "www IN CNAME web.hosting.jp" '[1] objDNSParameters("ContainerName") = "win1.jp" objDNSParameters("DnsServerName") = "localhost" Try objDNSResourceRecord.InvokeMethod("CreateInstanceFromTextRepresentation", objDNSParameters, Nothing) '[2] Catch ex As Exception End Try
[1] www.win1.jp が web.hosting.jp を参照するようにレコードを登録します。 [2] CNAMEの登録に関してはエラーは無視して問題ありません。
以上で、IISおよびWSSまで一通りのProvisioningが完了したことになります。 参考にコードを記載しましたが、現在はPowerShellで同様の設定か可能と考えられます。
2008/06/08FrontPage Server Extension(FPSE)を作成したWebサイトにインストールします。 FPSEとWSSは同一サイトにはインストールできない為、今回はWSSは別サイトに作成し、FPSEはWebサイトと同じ場所にインストールすることとします。 FPSEの設定は管理ツールの「stsadm.exe」を使用して行います。
Dim objProcess As Process = New Process objProcess.StartInfo.FileName = "C:\Program Files\Common Files\Microsoft Shared\web server extensions\50\bin\owsadm.exe" objProcess.StartInfo.Arguments = "-o install -m www.win1.jp -u NewUser" objProcess.Start()
これにより、WebサイトがFPSE対応サイトに拡張されます。
2008/06/06
WindowsSharPoint(WSS)のサブウェブを作成します。 今回は、サブウェブとしてWSSを提供していますが、ルートサイトにWSSを設定することも可能です。 ただし、WSSはFrontPage Server Extensionと同一サイト上にインストールすることができませんので設定時には注意が必要です。 WSSの設定は管理ツールの「stsadm.exe」を使用して行います。
Imports System.Diagnostics
Dim objProcess As Process = New Process objProcess.StartInfo.FileName = "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe" 'WSSサブウェブ作成 objProcess.StartInfo.Arguments = "-o createweb -url http://wss.win1.jp/NewSite/ -sitetemplate STS#0 -description NewUser -title NewWSS -unique" objProcess.Start() 'アカウント設定 objProcess.StartInfo.Arguments = "-o adduser -url http://wss.win1.jp/NewSite/ -userlogin smallbusiness\NewUser -useremail newuser@win1.jp -role ""Administrator""-username NewUser" objProcess.Start()
一度サブウェブを作成した後、ユーザーアカウントをサブウェブに追加するといった手順となります。 2008/06/05ユーザー アカウントを作成します。 FTPを使用する場合、ユーザーアカウント名をFTPの仮想ディレクトリ名と同じにすることで、FTP接続時に自分のFTPフォルダにリダイレクトされます。 この辺りも後ほど別コーナーにて紹介します。
Dim strLDAPPath As String = "LDAP://CN=Users,DC=provision,DC=local" Dim objDirectoryEntry As DirectoryEntry = New DirectoryEntry(strLDAPPath, "AdminAccount", "AdminPassword") objDirectoryEntry.RefreshCache()
'Directoryオブジェクトの作成 Dim objNewUser As DirectoryEntry = objDirectoryEntry.Children.Add("CN=NewUser", "User") '[1] With objNewUser .Properties("SamAccountName").Add("NewUser") '[2] .Invoke("Put", New Object() {"Description", "新しいユーザー"}) .CommitChanges() '[3] .Invoke("SetPassword", New Object() {"FtpPassword"}) '[4] .Invoke("Put", "userPrincipalName", "NewUser@provision.local") .Properties("userAccountControl").Value = 512 + 65536 '[5] .CommitChanges() End With
ActiveDirectoryへのユーザー作成は少々コツが必要となっています。 順序としては、 [1] ActiveDirectoryにユーザーオブジェクトを作成 [2] アカウント名を設定 [3] 一度確定します。 これを行わないとパスワードの設定ができません。 [4] パスワード設定。 パスワードはポリシーなどでブランク禁止や、長さなど設定している場合もあるので、適切なものを入力してください。 [5] アカウント状態を設定。 (参考:UserAccountControl フラグを使用してユーザー アカウント プロパティを操作する方法)
2008/05/28
次にFTP仮想ディレクトリを作成します。 FTPはWebサイトのようにホストヘッダーなどでサイト判別することができないので、IISではルートのFTPサイト配下に仮想ディレクトリを配置することでマルチユーザーに対応することができます。 これらホスティング仕様設定に関しては、別コーナーにて後ほど紹介するつもりです。
Dim objAppPools As New DirectoryEntry("IIS://localhost/MSFTPSVC/1/ROOT") Dim objAppPool As DirectoryEntry = objAppPools.Invoke("Create", "IIsFtpVirtualDir", "NewUser") objAppPool.Invoke("Put", "Path", "C:\WebSite\NewSite") objAppPool.Invoke("Put", "AccessFlags", 3) '1 + 2 AccessRead + AccessWrite objAppPool.Invoke("SetInfo")
Webサイトのように複雑は設定はありません。 2008/05/16これから紹介するのはIIS6.0に対してのプロビジョニングです。 IISにサイトを作成する場合一般的にはIISの管理ツールによりGUIベースで行うことが可能です。 ですが、ホスティングサーバーとして使用する場合には、自動的にそれらの設定を完了させるといった要件が発生します。
Webサイトを作成する場合、IISに対して働きかけるプロバイダが2種類あります。 1つはWMI(Windows Management Instrumentation)、もう1つはADSI(Active Directory Service Interfaces)です。 当初、両方のインターフェースを用いた方法をご紹介しようと考えていたのですが、WMIのサイト作成時のプロパティー設定においてバグと思われる部分があり、その回避方法が確認できておりません。 ですので、ここではADSIに限定してご紹介しようと思います。 まずはじめは、Webサイトの作成からです。
Imports System.IO Imports System.DirectoryServices
'Webサイトの元となるディレクトリを作成 Dim strDirectoryPath As String = "C:\WebSite\NewSite" If Not System.IO.Directory.Exists(strDirectoryPath) Then Directory.CreateDirectory(strDirectoryPath) End If
'アプリケーションプールの作成 Dim objAppPools As New DirectoryEntry("IIS://localhost/W3SVC/AppPools") Dim objAppPool As DirectoryEntry = objAppPools.Invoke("Create", "IIsApplicationPool", "新しいアプリケーションプール") objAppPool.Invoke("Put", "AppPoolIdentityType", 3) objAppPool.Invoke("Put", "WAMUserName", "Account") objAppPool.Invoke("Put", "WAMUserPass", "Password") objAppPool.Invoke("SetInfo")
'IISWebサービスの取得 Dim objWebService As New System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC")
'新規サイトIDを取得 Dim intNewSiteID As Integer = 1 Dim objSite As System.DirectoryServices.DirectoryEntry For Each objSite In objWebService.Children If objSite.SchemaClassName = "IIsWebServer" Then Dim intSiteID As Integer = Convert.ToInt32(objSite.Name) If intSiteID >= intNewSiteID Then intNewSiteID = intSiteID + 1 End If Next
'Webサイトの作成 Dim objNewSite As DirectoryEntry = objWebService.Invoke("Create", "IIsWebServer", intNewSiteID) objNewSite.Invoke("Put", "ServerComment", "新しいサイト") objNewSite.Invoke("Put", "ServerBindings", New Object() {"192.168.0.1:80:www.win1.jp"}) objNewSite.Invoke("Put", "KeyType", "IIsWebServer") objNewSite.Invoke("Put", "ServerState", 2) objNewSite.Invoke("Put", "ServerAutoStart", 1) objNewSite.Invoke("Put", "AppPoolId", "新しいアプリケーションプール") objNewSite.Invoke("SetInfo")
'Webサイト詳細設定 Dim objVirtualDir As DirectoryEntry = objNewSite.Children.Add("Root", "IISWebVirtualDir") objVirtualDir.Invoke("Put", "AppIsolated", 2) objVirtualDir.Invoke("Put", "Path", "C:\WebSite\NewSite") objVirtualDir.Invoke("Put", "AccessFlags", 513) '1 + 512 AccessRead + AccessScript objVirtualDir.Invoke("Put", "AuthFlags", 3) '1 + 2 AuthAnonymous + AuthBasic objVirtualDir.Invoke("Put", "AppRoot", "LM/W3SVC/" & intNewSiteID & "/Root") objVirtualDir.Invoke("Put", "AppFriendlyName", "既定のアプリケーション") objVirtualDir.Invoke("SetInfo")
以上でWebサイトが作成されます。
余談ですが、なぜ、WMI、ADSIの二通りの方法があるのかといいますと、IIS5.0の時代ではWMI自体は存在したものの、IISに対するプログラム的は働きかけは、ActiveDirectoryを実装しはじめたWindows2000のLDAP情報にアクセスする方法と同様に、ADSIを介して行うのが一般的な方法でした。 その後、IIS6.0(WindowsServer2003)の時代になり、Windowsの管理を統合的に行うためのインタフェースとしてWMIが本格的に実装されるとともに、IISの管理もWMIから行うことが可能になったのです。 従って、「IISのWebサイト作成」に関しては、現時点では二つのインターフェースはほぼ同様の機能を提供することができるものの、トータル的なサーバー管理といった面から見れば、WMIによるプロビジョニングが今後一般的な手法となると思われます。 (参考:ADSI プロバイダと IIS WMI プロバイダの比較) 私的な好みとしてはWMIを用いた方法で統一したいと思うのですが、前述の問題があり残念です。 WMIを用いたサイト作成方法もいずれ紹介できればと思います。 2008/05/01はじめに・・・ 「Provisioning(プロビジョニング)」聞きなれない言葉ではないでしょうか。 直訳すると「供給・準備」といった意味となります。 Windows Serverの分野においてはサーバーに対してのボリュームの割り当てやサービスセットアップといった意味になります。 ここでは、ホスティング分野におけるプロビジョニング、すなわちWebサイト、メールボックス、アプリケーションセットアップに焦点を当てWindows Serverに対してどのような設定を行うのか、といった内容でプログラム的要素を踏まえて掲載して行きたいと思います。
このセクションにおいて掲載する内容により、以下のプロビジョニングを完了することができます。
-Webサイトの作成 -FTPサイトの作成 -ユーザーアカウントの作成 -Windows SharePointのインストール -FrontPage Server Extensionのインストール -DNSレコードの登録
※注 プログラム内容に関してはごく基本的内容にとどめており、エラー処理やロールバックなどは省略しています。
必要環境: ・ドメイン参加済みのWindows Server 2003 or 2008 ・IIS6.0 or IIS7.0 ・Windows Sharepoint Service 2.0 or 3.0 ・DNSサービス ・.NET Framework1.1 or 2.0以上 ・Visual Studio 2003 or 2005 or 2008
|
|
|
|
|