Quantcast
Channel: 64 Blog
Viewing all 45 articles
Browse latest View live

dism で IIS8 のインストール

$
0
0

以前、dism で IIS7.5 のインストール で、DISM コマンドを用いたIIS7.5 のインストール例を書きましたが、今回は IIS8 の場合です。
* もし参考にされるなら、基本的にさらの状態のOSを意識していますので、ご自身の環境に合わせて機能の足し引きをしてください。

 

下記の DISM コマンドを PowerShell で実行した場合…。

dism /online /enable-feature `
 /featurename:NetFx3ServerFeatures `
 /featurename:NetFx3 `
 /featurename:IIS-WebServerRole `
 /featurename:IIS-WebServer `
 /featurename:IIS-CommonHttpFeatures `
 /featurename:IIS-StaticContent `
 /featurename:IIS-DefaultDocument `
 /featurename:IIS-DirectoryBrowsing `
 /featurename:IIS-HttpErrors `
 /featurename:IIS-HttpRedirect `
 /featurename:IIS-WebDAV `
 /featurename:IIS-ApplicationDevelopment `
 /featurename:IIS-WebSockets `
 /featurename:IIS-ApplicationInit `
 /featurename:IIS-NetFxExtensibility `
 /featurename:IIS-NetFxExtensibility45 `
 /featurename:IIS-ASPNET `
 /featurename:IIS-ASPNET45 `
 /featurename:IIS-ASP `
 /featurename:IIS-CGI `
 /featurename:IIS-ISAPIExtensions `
 /featurename:IIS-ISAPIFilter `
 /featurename:IIS-ServerSideIncludes `
 /featurename:IIS-HealthAndDiagnostics `
 /featurename:IIS-HttpLogging `
 /featurename:IIS-LoggingLibraries `
 /featurename:IIS-RequestMonitor `
 /featurename:IIS-HttpTracing `
 /featurename:IIS-CustomLogging `
 /featurename:IIS-ODBCLogging `
 /featurename:IIS-Security `
 /featurename:IIS-CertProvider `
 /featurename:IIS-BasicAuthentication `
 /featurename:IIS-WindowsAuthentication `
 /featurename:IIS-DigestAuthentication `
 /featurename:IIS-ClientCertificateMappingAuthentication `
 /featurename:IIS-IISCertificateMappingAuthentication `
 /featurename:IIS-URLAuthorization `
 /featurename:IIS-RequestFiltering `
 /featurename:IIS-IPSecurity `
 /featurename:IIS-Performance `
 /featurename:IIS-HttpCompressionStatic `
 /featurename:IIS-HttpCompressionDynamic `
 /featurename:IIS-WebServerManagementTools `
 /featurename:IIS-ManagementConsole `
 /featurename:NetFx4Extended-ASPNET45

 

結果は下図のようになります。
201211282029

 

Application Initialization (IIS-ApplicationInit) ありますね。


PowerShellでメール送信(SendGrid)

$
0
0

以前、PowerShellでメール送信 で、PowerShellからメールを送信する例を書きましたが、今回は、焼き直しでSendGridを使ってメールを送信してみたいと思います。

$smtp = "<SendGridのSMTPサーバー>"
$to = "<宛先アドレス>"
$from = "<送信元アドレス>"
$subject = "_?これはテストです?_"
$body = "てすとメ~ル"
$account = "<SendGridのアカウント>"
$pswd = "<SendGridのパスワード>"

$enc = [Text.Encoding]::GetEncoding("csISO2022JP");
$s64 = [Convert]::ToBase64String($enc.GetBytes($subject), [Base64FormattingOptions]::None)

$mail = New-Object Net.Mail.MailMessage($from, $to)
$mail.Subject = [String]::Format("=?{0}?B?{1}?=", $enc.HeaderName, $s64)
$view = [Net.Mail.AlternateView]::CreateAlternateViewFromString($body, $enc, [Net.Mime.MediaTypeNames]::Text.Plain)
$view.TransferEncoding = [Net.Mime.TransferEncoding]::SevenBit
$mail.AlternateViews.Add($view)

$sc = New-Object Net.Mail.SmtpClient($smtp)
$sc.Port = 587;
$sc.Credentials = New-Object Net.NetworkCredential($account, $pswd);
$sc.Send($mail)
$mail.Dispose()

 

SendGrid
http://sendgrid.com/

Corefig for Windows Server 2012 Core and Hyper-V Server 2012 を使ってみる。

$
0
0

Windows Server 2012で、フルインストールとServerCoreの切り替えがコマンドから出来るようになりましたよね。

Install-WindowsFeature Server-Gui-Mgmt-Infra,Server-Gui-Shell –Restart
Uninstall-WindowsFeature Server-Gui-Mgmt-Infra -Restart

とても便利ですが再起動が発生するので、おいそれと切り替えが出来ない場合があります。
そういうときに使えそうなのが、Corefig for Windows Server 2012 Core and Hyper-V Server 2012 です。
http://corefig.codeplex.com/

過去 たんたか さんが、Core Configurator 2.0 を使う の投稿がありますが、これの WindowsServer 2012 版 です。

そして、同様に日本語版で「Hyper-V Settings」のボタンが無効になっているため、今回は使えるように対応してみます。

Start_Config.wsf の修正

136行目付近にある、正規表現パターンを修正します。

修正前:

FeatureNameRegEx.Pattern = "\b" + FeatureName + "\b[ \t]*\|[ \t]*Enabled"

修正後:

FeatureNameRegEx.Pattern = "\b" + FeatureName + "\b[ \t]*\|[ \t]*有効"

「DISM.EXE /Online /Get-Features /Format:table」の実行結果に対して正規表現かけてるので、日本語環境の場合は表示が「有効/無効」ですからね。

修正後 Start_Corefig.wsf を実行すれば OK です。

2013127181146_097 2013127181213_098

Webロールに Application Initialization Module for IIS 7.5 を設定(半自動化)

$
0
0

昨年 取り掛かりそうで取り掛からなかったネタです。

このモジュールの簡易的な説明や、類似するそれっぽい投稿は下記をご覧ください。
Application Initialization Module for IIS 7.5 をインストール
Webロールで、初回リクエストの応答を早くする (たんたか さん)

 

まずは Application Initialization Module for IIS 7.5 をダウンロードします。
http://www.iis.net/downloads/microsoft/application-initialization

 

対象のフレームワークを .NET Framework 4 などにしたWebロールを含んだプロジェクトを作り、ダウンロードした [appwarmup_x64.msi] を出力ディレクトリに [常にコピーする] に設定して追加します。

 

ServiceDefitition.csdef を開いて管理者権限に設定します。

<Runtime executionContext="elevated"></Runtime>

 

ServiceConfiguration.Cloud(Local).cscfgファイルの osFamily が 2 に設定されていることを確認します。

 

参照設定に %windir%\system32\inetsrv にある Microsoft.Web.Administration を追加します。

 

WebRole.cs を下記のように編集します。

public class WebRole : RoleEntryPoint
{
    public override bool OnStart()
    {
        // For information on handling configuration changes
        // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

        var param = "\" /c msiexec.exe /i " + Environment.ExpandEnvironmentVariables(@"%RoleRoot%\approot\bin\Setup\appwarmup_x64.msi") + " /norestart /qn\"";
        ExecuteCommand("cmd.exe", param);

        InitAppHostConfig();

        return base.OnStart();
    }

    private void ExecuteCommand(string exe, string arguments)
    {
        using (var p = new Process())
        {
            p.StartInfo.FileName = exe;
            p.StartInfo.Arguments = arguments;
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.Verb = "RunAs";
            p.Start();

            var results = p.StandardError.ReadToEnd();
            p.WaitForExit(60000);
            p.Close();
        }
    }

    private void InitAppHostConfig()
    {
        using(var serverManager = new ServerManager())
        {
            var site = serverManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"];
            var app = site.Applications["/"];
            app["preloadEnabled"] = true;

            var apppool = serverManager.ApplicationPools[app.ApplicationPoolName];
            apppool["startMode"] = "AlwaysRunning";

            serverManager.CommitChanges();
        }
    }
}

 

プロジェクトのルートにある web.config の system.webServer に下記の設定を追加します。

<applicationInitialization remapManagedRequestsTo="/" skipManagedModules="true">
   <add initializationPage="/" />
</applicationInitialization>

 

あとはデプロイして正常に処理が行われれば、きっと500エラーが返ってきますので、例えば管理ポータルからインスタンスに対して次の操作を行います。
1:インスタンス停止
2:インスタンス開始

 

インスタンス開始直後はwebもターミナルも少し待つ必要がありますが、数十秒ほど待てばどちらもアクセス可能になります。

 

ということで…。
インスタンスが上がったことを検出して、停止 -> 開始 を組み込むような仕組みを作っておけば [自動化] することもできるかな。と思うだけ思って [半自動化] で、今回のネタは終わります。

Webロール(osFamily=3)に Application Initialization を設定

$
0
0

前回 Webロール(osFamily=2) に Application Initialization Module for IIS 7.5 を組み込み半自動で動作するようなことを書きましたが、Application Initialization Module は IIS8 からはサーバーの機能として有効または無効にできる項目になっていますので、Webロールでも osFamily=3 であれば、もっと簡単に自動化を含めて機能を組み込むことが可能ですね。

では、その方法です。

 

対象のフレームワークを .NET Framework 4.5 などにした Webロールを含んだプロジェクトを作ります。

 

ServiceDefitition.csdef を開いて管理者権限に設定します。

<Runtime executionContext="elevated"></Runtime>

 

ServiceConfiguration.Cloud(Local).cscfgファイルの osFamily が 3 に設定されていることを確認します。

 

参照設定に %windir%\system32\inetsrv にある Microsoft.Web.Administration を追加します。

 

WebRole.cs を下記のように編集します。

public override bool OnStart()
{
    // For information on handling configuration changes
    // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

    ExecuteCommand("cmd.exe", "\" /c dism /online /enable-feature /featurename:IIS-ApplicationInit\"");

    InitAppHostConfig();

    return base.OnStart();
}

private void ExecuteCommand(string exe, string arguments)
{
    using (var p = new Process())
    {
        p.StartInfo.FileName = exe;
        p.StartInfo.Arguments = arguments;
        p.StartInfo.CreateNoWindow = true;
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardError = true;
        p.StartInfo.Verb = "RunAs";
        p.Start();

        var results = p.StandardError.ReadToEnd();
        p.WaitForExit(60000);
        p.Close();
    }
}

private void InitAppHostConfig()
{
    using (var serverManager = new ServerManager())
    {
        var site = serverManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"];

        var app = site.Applications["/"];
        app["preloadEnabled"] = true;

        var apppool = serverManager.ApplicationPools[app.ApplicationPoolName];
        apppool["startMode"] = "AlwaysRunning";

        serverManager.CommitChanges();
    }
}

 

プロジェクトのルートにある web.config の system.webServer に下記の設定を追加します。


   

 

以上で設定は終了ですので、デプロイします。

 

前回は msiファイル(appwarmup_x64.msi)をインストールしましたが、今回は dism コマンドで Application Initialization の機能を追加しています。また、インスタンスがあがったあとに、手動でなんやかんやする手順が無くなってるので、とっても簡単に自動化することが出来ますね。

Windows Azure で Quartz.NET を使う

$
0
0

Quartz.NETは .NET用のスケジューリングジョブライブラリです。
http://quartznet.sourceforge.net/

たまたま見つけたので、Windows Azureで使えるか、たまたま試してみました。

 

まずは、Windows Azure クラウドサービスを含んだプロジェクトを作成します。

そして、Quartz.NETライブラリを追加します。
NuGetからでも、Quartz.NETのサイトからダウンロードしてQuartz.dllファイルを参照設定に追加しても、どちらでもOKです。
201336213148_231

 
スケジュールジョブの設定を下記のように作成して OnStart で動かすようにします。

private void SetScheduleTask()
{
    const string JOBNAME = "SimpleJob";
    const string JOBGROUP = "SimpleJobGroup";

    var factory = new StdSchedulerFactory();
    var schedule = factory.GetScheduler();

    if (!schedule.IsStarted)
        schedule.Start();

    var job = JobBuilder.Create<SimpleJob>()
        .WithIdentity(JOBNAME, JOBGROUP)
        .RequestRecovery()
        .Build();

    // 5分間隔で実行
    var trigger1 = TriggerBuilder.Create()
        .WithIdentity(JOBNAME, JOBGROUP)
        .StartNow()
        .WithCalendarIntervalSchedule(x => x.WithIntervalInMinutes(5))
        .Build();

    // Cron 的な書き方でもOK
    var trigger2 = TriggerBuilder.Create()
        .WithIdentity(JOBNAME, JOBGROUP)
        .StartNow()
        .WithCronSchedule("0 0/5 * * * ?")
        .Build();

    schedule.ScheduleJob(job, trigger1);
}

 
次に、スケジュールジョブの処理内容を下記のように作成してみます。

namespace WorkerRole1
{
    public class SimpleJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            var msg = string.Format("{0} : SCHEDULE TASK", DateTime.UtcNow);
            Trace.WriteLine(msg, "Information");
        }
    }
}

 
以上で設定は完了です。あとは実際にデプロイして確認です。

 
たまたま今回は診断のトレースログに、たまたま5分間隔でログを書き込むようなスケジュールジョブを作成してみましたが、ちゃんと動いてますね。
201336215230_232

Azure の Webサイトで WordPress のマルチサイトのマルチドメイン

$
0
0

WordPress でマルチサイトを構成した際に、運用環境であったり作業用のためであったりと、それぞれのサイトに別の独自ドメインを割り当てたい場合ってありますよね。

今回は WordPress をマルチサイト構成にした後で、追加したサイトに対して [WordPress MU Domain Mapping] のプラグインを使って別の独自ドメインを充てるように Windows Azure の Webサイトを使って設定してみたいと思います。

 

それでは設定方法です。

1.WebサイトにWordPress日本語版のインストール
まず、下記のサイトを参考に Windows Azure の Webサイトで日本語化した WordPess の環境を用意します。
http://msdn.microsoft.com/ja-jp/windowsazure/hh697357.aspx

 

2.Webサイトのモード変更
独自ドメインを充てるために、Azureの管理ポータルサイトからWebサイトのモードを [共有] に変更します。
2013326103052_261

 

3.独自ドメインの適用
Azureの管理ポータルサイトから、ドメインの管理を選びます。
2013326103755_263

モーダルウィンドウに表示されている内容に従い、追加する独自ドメインの管理ツール等を利用してDNSゾーンに対して適切なレコードを登録します。

DNSレコードの登録が完了したら独自ドメインを入力します。
2013326104019_264

 

4.マルチサイト設定
次に日本語化した WordPress を、サブドメイン形式でマルチサイト構成にします。設定方法は検索すれば出てきますので、この投稿では省略させて頂きます。
http://wpdocs.sourceforge.jp/Create_A_Network

 

5.サイトの追加
管理画面のヘッダーメニューから[参加サイト] – [サイトネットワーク管理者] – [サイト] を選びます。
201332694722_245

[新規追加] を選び、追加するサイトのアドレス等を入力します。
201332695311_246

問題無ければ [サイトの一覧] に追加したサイトが表示されるはずです。追加したサイトにマウスカーソルを乗せて、リンク先URLの最後についている [id=xxx] の数字を把握しておきます。
201332695509_248

 

6.WordPress MU Domain Mapping
[プラグイン] – [新規追加] から、検索ボックスを利用して [WordPress MU Domain Mapping] をリストアップします。
201332695732_250

[いますぐインストール] を選んでインストールが完了したら、[ネットワークで有効化] を選択します。
201332695930_251

[設定] – [Domain Mapping] を選んで、何も設定は変更せずに [Save] ボタンを押下します。
201332610158_254

次に、FTPクライアントなどを利用して下記の作業を行います。
■ [wp-content/plugins/wordpress-mu-domain-mapping/sunrise.php] のファイルを、[wp-content] フォルダ直下にコピーします。
■ wp-config.php ファイルに次の内容を追加します。

define( 'SUNRISE', 'on' );

 

管理画面から、[設定] – [Domains] を選んで、必要な入力を行い [Save] ボタンを押下します。

SIte ID: 上記で把握した [id=xxx] の数字を入力します。
Domain: 割り当てたい独自ドメインを入力します。
Primary: ON・OFFどちらでもOK

2013326102158_257

[サイト] – [サイト一覧] を表示して、追加したサイトを [編集] を行います。
2013326102357_259

[情報] タブのドメインのテキストボックスに割り当てたい独自ドメインを入力して、[変更を保存] を押下します。
2013326102543_260

 

ココまでの設定に問題が無ければ、下図のように独自ドメインで追加したサイトが運用できるはずです。
2013326104442_265

Task Scheduler Managed Wrapper を簡単に試してみる

$
0
0

Task Scheduler Managed Wrapper を使うと、コードやスクリプトからタスクスケジューラーを操作するのが簡単かな?と思ったので、物は試しで簡単に使ってみました。

簡単に試したことの内容は、下記に書くサンプルのソースと結果を見て頂ければ、お分かりいただけると思います。

 

ダウンロード
http://taskscheduler.codeplex.com/

 

ソース
(10分間隔でメモ帳を起動させるスケジュールジョブを登録させています。)

using System;
using Microsoft.Win32.TaskScheduler;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var ts = new TaskService())
            {
                var td = ts.NewTask();
                td.RegistrationInfo.Description = "タスクの説明";

                var tt = new TimeTrigger();
                tt.Repetition.Interval = TimeSpan.FromMinutes(10);
                td.Triggers.Add(tt);

                const string exe = "notepad.exe";
                td.Actions.Add(new ExecAction(exe, null, null));

                ts.RootFolder.RegisterTaskDefinition("タスクの名前", td);
            }
        }
    }
}

 

結果
20130430103002
20130430103010


PowerShell を使って Web.Config に設定された URLRewrite の設定を編集する

$
0
0

Web.Config を編集することで URLRewrite の規則を変更することが出来ますよね。

メンテナンスなどの繰り返し行う作業では、スクリプトなどを用意しておくと便利だと思うので、今回 PowerShell を使って URLRewrite の規則部分を書き換えてみたいと思います。

 

例えば、下記のような Web.Config において、受信規則:ReverseProxyInboundRule1 のURLの値を書き換えるには…

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <outboundRules>
                <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
                    <match filterByTags="A, Form, Img" pattern="^http(s)?://www.example.com/(.*)" />
                    <action type="Rewrite" value="http{R:1}://www.gine.jp/{R:2}" />
                </rule>
                <preConditions>
                    <preCondition name="ResponseIsHtml1">
                        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                    </preCondition>
                </preConditions>
            </outboundRules>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://www.example.com/{R:1}" />
                </rule>
            </rules>
        </rewrite>
        <urlCompression doDynamicCompression="false" />
    </system.webServer>
</configuration>

 

下記のようなコードで編集することが出来ます。

$ruleName = "ReverseProxyInboundRule1";
$value = "http://hogehoge/{R:1}";
$cfg = "c:\inetpub\wwwroot\web.config";

$xml = [xml](Get-Content $cfg -Encoding UTF8);
$rule = $xml.configuration."system.webServer".rewrite.rules.rule | where { $_.name -eq $ruleName }
$rule.action.SetAttribute("url", $value);

$xml.save($cfg);

PoshWSUS を使ってみる

$
0
0

WSUS を管理するときに Microsoft.UpdateServices.Administration を使ってゴニョゴニョする方法を、むかし試していましたが、PoshWSUS を使うとイロイロ簡単にできるようになりますね。

PoshWSUS
http://poshwsus.codeplex.com/

*ダウンロードして代替データストリームのZoneIdが張り付いた場合は(下記画像のセキュリティ)、stream コマンドなどで一括解除すると楽です。
201306201558

stream
http://technet.microsoft.com/en-us/sysinternals/bb897440.aspx

 

PoshWSUS を WindowsPowerShell のプロファイルフォルダ(%userprofile%\my documents\windowspowershell)にある Modules フォルダに配置します。
*プロファイルフォルダが存在しない場合は、下記TechNetサイトを参考に作成してください。
http://technet.microsoft.com/ja-jp/scriptcenter/powershell_owner06.aspx

 

あとは、powershell を起動して、下記のようなコマンドレットを入力して、WSUSからデータを引っ張ってきたり設定したりすることが可能になります。

import-module poshwsus
connect-poshwsusserver “WSUSサーバー名”

2013062016011

[同期ログ 取得]
201306201602

[クライアント情報 取得]
2013062015591

[クリーンアップ 実行]
201306201600

IIS7.5をスタンドアロンルートCAで発行したクライアント認証証明書を要求するように設定する

$
0
0

公的認証機関さんからクライアント認証証明書の購入資金が無いので、Active Directory 証明書サービスを用いて IIS7.5 にクライアント認証証明書を要求する設定するメモです。
(ココで設定している値は、あくまで自分のテスト環境における設定のメモです。目的・用途に合わせてCAや証明書の設定は読み替えてください)
(CAとIISは、1台のWindows Server 2008 R2で設定しています。またクライアントからアクセスするブラウザはIE10を用いています。)

 

[役割・機能のインストール]
1.サーバーマネージャーの役割の追加から [Active Directory 証明書サービス] と [Webサーバー(IIS)] を選択。
201307211602
2.[Active Directory 証明書サービス] に追加するサービスを [証明機関] と [証明機関 Web 登録] を選択。
([証明機関 Web 登録]に必要な役割サービスと機能の追加ウィザードが表示されるので追加する。)
201307211605
3.証明機関は [スタンドアロン] の [ルートCA] で [新しい秘密キーを作成する] を選択。
201307211607201307211608201307211609
4.CAの暗号化についてはデフォルト。
201307211611
5.CAの名前を適当に。有効期間もデフォルトで設定。
201307211613201307211614
6.IISの役割サービスはデフォルトで設定。
201307211616
7.あとはインストールボタンを押下するだけです。
201307211617
8.インストール完了したら [IISマネージャー] を起動して [Default Web Site] に https をバインドします。
今回、自己署名証明書を作ってバインドしています。(IIS7+で自己署名入り証明書の発行
201307211620201307211636

 

[クライアントにてCA証明書のインストール]
1.ブラウザから[Active Directory 証明書サービス]をインストールしたサーバーに対して下記のURLにアクセス。
https://<Active Directory 証明書サービスをインストールしたサーバー名>/certsrv
2.[CA証明書、証明書チェーン、または CRL のダウンロード] を選択。[この Web サイトはユーザーの代わりにデジタル証明書の操作を実行します。]メッセージで [はい] を選択。
201307211639
3.エンコード方式をBase64にしてCA証明書のダウンロードして保存します。
201307211641
4.ダウンロードした [certnew.cer] ファイルを右クリックして[証明書のインストール]を選びます。
201307211644
5.証明書ストアを「信頼されたルート証明機関」に設定します。
201307211645
6.正しくインポートされれば終了です。

 

[クライアントにてクライアント認証証明書の要求]
1.ブラウザから[Active Directory 証明書サービス]をインストールしたサーバーに対して下記のURLにアクセス。
https://<Active Directory 証明書サービスをインストールしたサーバー名>/certsrv
2.[証明書を要求する]
201307211648
3.[証明書の要求の詳細設定]
201307211649
4.[このCAへの要求を作成し送信する]
201307211650
5.下記の設定項目の値になるようにします。残りの設定項目はデフォルトで、識別情報は適当に入力して送信ボタンを押下します。
[証明書の種類]:クライアント認証証明書
[エクスポート可能なキーとしてマークする]:ON
201307211654
6.要求が成功すれば下図のようになるはずです。
201307211655

 

[要求されたクライアント認証証明書の発行]
1.[Active Directory 証明書サービス]をインストールしたサーバーで、管理ツール内にある[証明機関]を起動します。
2.[保留中の要求]に、クライアントからの要求を確認します。
201307211658
3.要求を右クリックして、[すべてのタスク] – [発行] を選択します。
201307211659
4.正常に発行されれば[発行した証明書]に表示されるはずです。
201307211701

 

[クライアントにてクライアント認証証明書のインストール]
1.ブラウザから[Active Directory 証明書サービス]をインストールしたサーバーに対して下記のURLにアクセス。
https://<Active Directory 証明書サービスをインストールしたサーバー名>/certsrv
2.[保留中の証明書の要求の状態]
201307211703
3.証明書を要求した日時が記載されたリンクを選択
201307211705
4.[この証明書のインストール]を選択してインストールします。
201307211706201307211707
5.IEのインターネットオプションで[コンテンツ]タブの[証明書]ボタンを押下します。
201307211708
6.[個人]タブに先ほどインストールした証明書があるはずなので、選択して[エクスポート]ボタンを押下します。
201307211711
7.秘密キーは[いいえ、秘密キーをエクスポートしません]を選択し、[Base 64 encoded X.509] 形式にして適当な名前を付けてエクスポートします。
201307211713201307211714
8.エクスポートした証明書ファイルをテキストエディターで開いて、「——BEGIN CERTIFICATE——」の文字と「——END CERTIFICATE——」の文字。さらに 改行コードを削除して別ファイル名で保存します。

 

[IISにクライアント認証証明書を要求するように設定]
1.IISマネージャーを起動して、[Default Web Site]をポイントして [SSL 設定]を選びます。
201307211721
2.SSL 設定を下記のように設定します。
[SSL が必要]:ON
[クライアント証明書]:必要
201307211724
3.次にクライアント構成エディターを開きます。
201307211725
4.セクションを下記の値に合わせます。
system.webServer/security/authentication/iisClientCertificateMappingAuthentication
5.下記の設定値を変更します。
enabled:True
manyToOneMappingsEnabled:False
201307211728
6.[oneToOneMappings] の「…」ボタンを選択します。
7.コレクションの[追加]を選びます。
8.下記の設定値を入力します。
certificate:前項の8番目で作成した証明書の文字列を入力
enabled:True
password:ローカルユーザーのパスワード
userName:ローカルユーザーの名前
201307211732
9.コレクションエディターフォームを閉じます。
10.IISマネージャーの右側にある操作パネルにある[適用]を選びます。201307211734

 

[動作確認]
クライアント認証証明書を持ってるPC/ユーザーで [Default Web Site] にアクセスすると正常にアクセスできることを確認します。201307211741

クライアント認証証明書を持っていないPC/ユーザーで [Default Web Site] にアクセスすると403が返ってくることを確認します。
201307211744

Web.config の Application Initialization の設定を Web.Release.config に。

$
0
0

Application Initialization の設定を Web.config には書かずに、Web.Release.config に書く場合にはどうしたらいいか?ということで、下記のような感じで Web.config には何も書かずに、Web.Release.config の applicationInitialization に xdt:Transform=”Insert” を付加すればいいですね。

 

[ Web.config ]

<?xml version="1.0" encoding="utf-8"?>
<!--
  ASP.NET アプリケーションを構成する方法の詳細については、
  http://go.microsoft.com/fwlink/?LinkId=169433 を参照してください
  -->
<configuration>
  <system.diagnostics>
    <trace>
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
          name="AzureDiagnostics">
          <filter type="" />
        </add>
      </listeners>
    </trace>
  </system.diagnostics>
  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <httpRuntime targetFramework="4.5" />
    <compilation debug="true" targetFramework="4.5" />
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>
</configuration>

 

 

[ Web.Release.config ]

<?xml version="1.0" encoding="utf-8"?>
<!-- web.config 変換の使用方法の詳細については、http://go.microsoft.com/fwlink/?LinkId=125889 を参照してください -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <!--
    次の例では、"MyDB" という値を持つ "name" 属性が "Match" ロケーターで
    見つかった場合にのみ、"SetAttributes" 変換によって "connectionString" の
    値が "ReleaseSQLServer" を使用するように変更されます。

    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  -->
  <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
    <!--
      次の例では、Web.config ファイルの <customErrors> セクション全体が 
      "Replace" 変換によって置き換えられます。
      <system.web> ノードには customErrors セクションが 1 つしかないため、
      "xdt:Locator" 属性を使用する必要はありません。

      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
    -->
  </system.web>
  <system.webServer>
    <applicationInitialization skipManagedModules="true" remapManagedRequestsTo="warmup.html" xdt:Transform="Insert">
      <add initializationPage="/" />
    </applicationInitialization>
  </system.webServer>
</configuration>

 

 

Web.config に書くと、Windows Azure のコンピューティングエミュレーター で、下図のように IIS Express Worker Process が止まっちゃうので。
201308201905

 

参考: Visual Studio を使用する Web アプリケーション プロジェクト配置の Web.config 変換構文

URL Rewrite で Azure の cloudapp.net ドメインを独自ドメインに書き換える

$
0
0

xxxxx.cloudapp.net

というような DNS名が、Windows Azure のクラウドサービスにアプリケーションを展開したときに提供されます。

 

このまま利用しても構いませんが、独自ドメインを利用したいという場合においてはCNAMEを設定することで可能になります。
ただ、CNAMEを設定しただけでは、当然 提供されているDNS名でもアクセスすることが出来てしまいます。

常に独自ドメインにする場合には、URL Rewrite を使って書き換えるのが手っ取り早いですね。

ということで、なんとなく今回は、そのまんま web.config に書かずに ServerManager クラスを使って OnStart で URL Rewrite の設定をしてみたいと思います。

 

[ WebRole.cs ]

using Microsoft.Web.Administration;
using Microsoft.WindowsAzure.ServiceRuntime;

namespace WebRole1
{
    public class WebRole : RoleEntryPoint
    {
        private const string DOMAIN_CLOUDAPP = @"^xxxxx\.cloudapp\.net$";
        private const string DOMAIN_CUSTOM = "www.hogehoge.local";

        public override bool OnStart()
        {
            // 構成の変更を処理する方法については、
            // MSDN トピック (http://go.microsoft.com/fwlink/?LinkId=166357) を参照してください。

            SetUrlRewrite(DOMAIN_CLOUDAPP, DOMAIN_CUSTOM);
            return base.OnStart();
        }

        private void SetUrlRewrite(string domainCloudapp, string domainCustom)
        {
            using (var serverManager = new ServerManager())
            {
                var site = serverManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"];
                var app = site.Applications["/"];
                var config = app.GetWebConfiguration();

                var rulesSection = config.GetSection(@"system.webServer/rewrite/rules");
                var rulesCollection = rulesSection.GetCollection();

                var ruleElement = rulesCollection.CreateElement("rule");
                ruleElement["name"] = @"FirstRule.CustomDomain";
                ruleElement["stopProcessing"] = true;

                var matchElement = ruleElement.GetChildElement("match");
                matchElement["url"] = @"(.*)";

                var conditionsElement = ruleElement.GetChildElement("conditions");
                conditionsElement["trackAllCaptures"] = true;
                var conditionsCollection = conditionsElement.GetCollection();

                var addHostElement = conditionsCollection.CreateElement("add");
                addHostElement["input"] = @"{HTTP_HOST}";
                addHostElement["pattern"] = domainCloudapp;
                conditionsCollection.Add(addHostElement);

                var addCacheElement = conditionsCollection.CreateElement("add");
                addCacheElement["input"] = @"{CACHE_URL}";
                addCacheElement["pattern"] = @"^(https?)://";
                conditionsCollection.Add(addCacheElement);

                var actionElement = ruleElement.GetChildElement("action");
                actionElement["type"] = @"Redirect";
                actionElement["url"] = @"{C:1}://" + domainCustom + "/{R:1}";
                rulesCollection.Add(ruleElement);

                serverManager.CommitChanges();
            }
        }
    }
}

※ 参照設定に %windir%\system32\inetsrv にある Microsoft.Web.Administration を追加します。

 

次に ServiceDefitition.csdef に管理者権限を設定します。

<Runtime executionContext="elevated"></Runtime>

 

あとは、デプロイして xxxxx.cloudapp.net にアクセスしたときに、独自ドメインに変われば成功ですね。
201309012002
※今回は hosts ファイルに www.hogehoge.local を書いて確認しています。

PowerShell で BACPAC ファイルを作成する。

$
0
0

BACPAC は、データベースのスキーマとテーブルデータを合わせた情報を持つファイルですね。よく オンプレミスの SQLServer 上のデータベースを Windows Azure の SQL データベースに移行したりする際に使われたりしますよね。

 

それでは、PowerShell で BACPAC ファイルを生成してみたいと思います。
(Microsoft.SqlServer.Dac.dll が存在しない場合は、Microsoft® SQL Server® 2012 SP1 用 Feature Pack  をダウンロードしてください。)

$DllPath = "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\Microsoft.SqlServer.Dac.dll"
$BackpacFilePath = "C:\temp\test.bacpac"
$DatabaseName = "BACPAC実行対象データベース名"
$ConnectionString = "Data Source=’SQLServerインスタンス名’;Initial Catalog=’データベース名’;Integrated Security=True";

Add-Type -Path $DllPath
$Sql = New-Object Microsoft.SqlServer.Dac.DacServices($ConnectionString)

if($Sql -eq $null){
    return
}

Write-Host $(Get-Date).ToString("yyyy/MM/dd hh:mm:ss") "- Start."
$Sql.ExportBacpac($BackpacFilePath, $DatabaseName)
Write-Host $(Get-Date).ToString("yyyy/MM/dd hh:mm:ss") "- Finish."

 

とても簡単に作成できますね。
201310171301

・参考
データ層アプリケーション
DacServices.ExportBacpac メソッド

Azure クラウドサービス でIPアドレスの制限を設定する

$
0
0

Azure のクラウドサービスにデプロイした Web コンテンツに対して、IP アドレスの制限を設けたい時があると思います。
そんな時は、スタートアップタスクで実行する下記の様な感じの PowerShell を用意しておけば、簡単に設定することが出来ます。

[startup.ps1]

Import-Module WebAdministration
Install-WindowsFeature Web-IP-Security

$SiteName = (get-item iis:\sites\*).name
$Filter = "/system.webServer/security/ipsecurity"

Set-WebConfigurationProperty -Filter $Filter -Name allowUnlisted -Value $false -Location $SiteName -PSPath "IIS:\"
Add-WebConfiguration -Filter $Filter -PSPath "IIS:\" -Value @{ipAddress="許可するIPアドレス";allowed=$true} -Location $SiteName

 

あとは、上記の PowerShell をコールするcmdファイルを下記の様な感じで。
[startup.cmd]

@echo off
powershell -executionpolicy remotesigned -file startup.ps1

 

[ServiceDefinition.csdef] に、スタートアップタスクの設定と管理者権限を追加します。

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="WindowsAzure35" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2013-03.2.0">
  <WebRole name="MvcWebRole1" vmsize="Small">
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
    </Endpoints>
    <Imports>
      <Import moduleName="Diagnostics" />
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
    </Imports>
    <Startup>
      <Task executionContext="elevated" commandLine="startup.cmd"></Task>
    </Startup>
    <Runtime executionContext="elevated"></Runtime>
  </WebRole>
</ServiceDefinition>

 

あとは デプロイして、アクセスを許可する IP アドレス以外からは、403ページが表示されれば成功ですね。
201311010751


Azure クラウドサービスで Dynamic IP Address Restrictions を設定する。

$
0
0

短時間に多くの要求を送ってくるクライアントに対して、IPアドレスベースでブロックするのが、Dynamic IP Address Restrictions になります。

Windows Azure では、すでに Web サイトで Web.Config に必要なセクションを追加することで Dynamic IP Address Restrictions モジュールが使えるようになっていますよね。
http://wabj.azurewebsites.net/?p=2341

今回、この Dynamic IP Address Restrictions をクラウドサービスで使えるようにして、簡単な実験をしてみようという内容になります。

 

1.Webロールを含んだプロジェクトを作って、ServiceDefitition.csdef を開いて管理者権限に設定します。

<Runtime executionContext="elevated"></Runtime>

2.ServiceConfiguration.Cloud(Local).cscfgファイルの osFamily が 3 に設定されていることを確認します。

3.参照設定に %windir%\system32\inetsrv にある Microsoft.Web.Administration を追加します。

4.WebRole.cs を下記のように編集します。

using System.Diagnostics;
using Microsoft.Web.Administration;
using Microsoft.WindowsAzure.ServiceRuntime;

namespace MvcWebRole1
{
    public class WebRole : RoleEntryPoint
    {
        public override bool OnStart()
        {
            // For information on handling configuration changes
            // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

            ExecuteCommand("cmd.exe", "\" /c dism /online /enable-feature /featurename:IIS-IPSecurity\"");
            InitDynamicIpSecurity();

            return base.OnStart();
        }

        private void ExecuteCommand(string exe, string arguments)
        {
            using (var p = new Process())
            {
                p.StartInfo.FileName = exe;
                p.StartInfo.Arguments = arguments;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.Verb = "RunAs";
                p.Start();

                var results = p.StandardError.ReadToEnd();
                p.WaitForExit(60000);
                p.Close();
            }
        }

        private void InitDynamicIpSecurity()
        {
            using (var serverManager = new ServerManager())
            {
                // セクションロック解除
                var appHostConfig = serverManager.GetApplicationHostConfiguration();
                var section = appHostConfig.RootSectionGroup.SectionGroups["system.webServer"].SectionGroups["security"].Sections["dynamicipsecurity"];
                section.OverrideModeDefault = @"Allow";
                serverManager.CommitChanges();

                var site = serverManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_Web"];
                var webConfig = serverManager.GetWebConfiguration(site.Name);

                // Dynamic IP Address Restrictions 設定
                var dipsSection = webConfig.GetSection("system.webServer/security/dynamicIpSecurity");
                dipsSection.SetAttributeValue("denyAction", "Forbidden");

                var concurrentElement = dipsSection.GetChildElement("denyByConcurrentRequests");
                concurrentElement.SetAttributeValue("enabled", false);

                var requestrateElement = dipsSection.GetChildElement("denyByRequestRate");
                requestrateElement.SetAttributeValue("enabled", true);
                requestrateElement.SetAttributeValue("maxRequests", 5);
                requestrateElement.SetAttributeValue("requestIntervalInMilliseconds", 1000);
                serverManager.CommitChanges();
            }
        }
    }
}

 

今回の実験では、requestIntervalInMilliseconds を1秒、maxRequests を5に設定しているので、1秒以内に5を超える要求をしたクライアントには Forbidden を返すようにしています。

それではデプロイしてる間に、下記の様なサイトにアクセスする簡単な PowerShell を作っておき、デプロイが完了したら実行してみましょう。

1..10|% {
 $ie = new-object -com "InternetExplorer.Application";
 $ie.navigate("クラウドサービスにURL");
 $ie.visible = $true;
}

 

結果
201312051735

URL Rewrite で Azure の azurewebsites.net ドメインを独自ドメインに書き換える

$
0
0

xxxxx.azurewebsites.net

というような DNS 名が、Windows Azure の Web サイトにアプリケーションを作成したときに提供されます。

 

このまま利用しても構いませんが、独自ドメインを利用したいという場合においては Web サイトのモードを 共有 以上に設定してカスタムドメイン名の設定とCNAMEを充てることで可能になります。

ただ、CNAMEを充てただけでは、当然 提供されている上記のDNS名でもアクセスすることが出来てしまいます。

常に独自ドメインにする場合には、URL Rewrite を使って書き換えるのが手っ取り早いですね。

ということで、なんとなく今回は、そのまんま web.config に書いて設定をしてみたいと思います。

 

例としては、<system.webServer> セクションに下記の Url Rewrite の設定をするだけです。

<rewrite>
  <rules>
    <rule name="FirstRule.CustomDomain" stopProcessing="true">
      <match url="(.*)" />
      <conditions trackAllCaptures="true">
        <add input="{HTTP_HOST}" pattern="^xxxxx\.azurewebsites\.net$" />
        <add input="{CACHE_URL}" pattern="^(https?)://" />
      </conditions>
      <action type="Redirect" url="{C:1}://www.xxxxx.com/{R:1}"></action>
    </rule>
  </rules>
</rewrite>

 

結果、問題ないですね。
201312281606

 

クラウドサービスの場合はコチラ

PowerShell で SQL Server 2012 をなんやかんや.1

$
0
0

どうやら以前に下記の様なポストをしていて、PowerShell から SQL Server 2008 に対していろいろやっていたみたいな痕跡が残っていました。
PowerShell から SQLServer に データベースやテーブルを作成
PowerShell から SQLServer の データベースやテーブルの定義を変更
PowerShell から SQLServer のデータベースやテーブルを削除

 

今回は SQL Server 2012 で、ユーザーの追加や認証モードの変更などを作業した際のメモを、ブログにもなんとなく残しておこうと思います。

 

■ 前提
なにはともあれ、まずは sqlps モジュールを読み込んでおく必要がありますね。

Import-Module "sqlps" -DisableNameChecking

 

■ 認証の変更
認証モードを変更する場合。

混合認証モード

$sql = new-object Microsoft.SqlServer.Management.Smo.Server "InstanceName"
$sql.Settings.LoginMode = [Microsoft.SqlServer.Management.SMO.ServerLoginMode]::Mixed
$sql.Alter()

Windows 認証モード

$sql = new-object Microsoft.SqlServer.Management.Smo.Server "InstanceName"
$sql.Settings.LoginMode = [Microsoft.SqlServer.Management.SMO.ServerLoginMode]::Integrated
$sql.Alter()

 

■ ユーザー
追加
パスワードの有効期限なし の SQL 認証のユーザーを追加

$SQL_LOGINNAME = "test-user"
$SQL_LOGINPSWD = "password"
$sql = new-object Microsoft.SqlServer.Management.Smo.Server "InstanceName"
$login = New-Object Microsoft.SqlServer.Management.Smo.Login $sql, $SQL_LOGINNAME
$login.LoginType = [Microsoft.SqlServer.Management.Smo.LoginType]::SqlLogin
$login.PasswordExpirationEnabled = $false
$login.Create($SQL_LOGINPSWD)

変更
上で追加したユーザーを sysadmin ロールに追加して、パスワードの有効期限あり に変更

$SQL_LOGINNAME = "test-user"
$sql = new-object Microsoft.SqlServer.Management.Smo.Server "InstanceName"
$login = New-Object Microsoft.SqlServer.Management.Smo.Login $sql, $SQL_LOGINNAME
$login.AddToRole('sysadmin')
$sql.Logins[$SQL_LOGINNAME].PasswordExpirationEnabled = $true
$sql.Logins[$SQL_LOGINNAME].Alter()

削除
上で追加したユーザーを削除

$SQL_LOGINNAME = "test-user"
$sql = new-object Microsoft.SqlServer.Management.Smo.Server "InstanceName"
$sql.Logins[$SQL_LOGINNAME].Drop()

 

今回はココまでにしておきます。次回も なんやかんや です。

 

[参考]
Microsoft.SqlServer.Management.Smo 名前空間
http://technet.microsoft.com/ja-jp/library/Microsoft.SqlServer.Management.Smo.aspx

ServerLoginMode 列挙体
http://technet.microsoft.com/ja-jp/library/microsoft.sqlserver.management.smo.serverloginmode.aspx

Login クラス
http://technet.microsoft.com/ja-jp/library/Microsoft.SqlServer.Management.Smo.Login.aspx

PowerShell で SQL Server 2012 をなんやかんや.2

$
0
0

今回は SQL Server 2012 で、PowerShell からデータベースの作成をゴニョゴニョしようと思います。というか、すでにゴニョゴニョし終わってるので、その作業をメモとして残しておこうと思います。
(※項目ごとに ■ でまとめていますが、実際にデータベースを作成する際には上から順に実行していく流れになります。)

 

■ 前提
ゴニョる前に、なんにせよ、とりあえず sqlps モジュールを読み込んでおきます。

Import-Module "sqlps" -DisableNameChecking

 

■ ファイルグループ

$sql = new-object Microsoft.SqlServer.Management.Smo.Server "InstanceName"
$database = new-object Microsoft.SqlServer.Management.Smo.Database $sql, "DatabaseName"
$filegroup = new-object Microsoft.SqlServer.Management.Smo.FileGroup $database, "PRIMARY"
$database.FileGroups.Add($filegroup)

 

■ データベースファイル設定
初期サイズ100MB、自動拡張100MB単位でデータファイル作成

$dbfile = "DatabaseName_Data"
$dbdfile = new-object Microsoft.SqlServer.Management.Smo.DataFile $filegroup, $dbfile
$filegroup.Files.Add($dbdfile)
$masterDBPath = $sql.Information.MasterDBPath
$dbdfile.FileName = $masterDBPath + "\" + $dbfile + ".mdf"
$dbdfile.Size = [double](100.0 * 1024.0)
$dbdfile.GrowthType = "KB"
$dbdfile.Growth = 100.0 * 1024.0

初期サイズ1MB、自動拡張1MB単位で1000MB制限のログファイル作成

$masterDBLogPath = $sql.Information.MasterDBLogPath
$logfile = "DatabaseName_Log"
$dblfile = new-object Microsoft.SqlServer.Management.Smo.LogFile $database, $logfile
$database.LogFiles.Add($dblfile)
$dblfile.FileName = $masterDBLogPath + "\" + $logfile + ".ldf"
$dblfile.Size = [double](1.0 * 1024.0)
$dblfile.GrowthType = "KB"
$dblfile.Growth = 1.0 * 1024.0
$dblfile.MaxSize = [double](1000.0 * 1024.0)

 

■ 照合順序

$database.Collation = "Japanese_CI_AS"

 

■ 作成

$database.Create()

 

[参考]
PowerShell で SQL Server 2012 をなんやかんや.1

Microsoft.SqlServer.Management.Smo 名前空間
http://technet.microsoft.com/ja-jp/library/Microsoft.SqlServer.Management.Smo.aspx

SQL Server 2012 でダンプ

$
0
0

SQL Server で MySQL や SQLite などのダンプっぽいことをしたかったのですが、SSMS の「スクリプトの生成」機能を使うことで簡単に出来ます。

この機能、CREATE TABLE 文(テーブル定義)のスクリプトを吐き出す “だけの” 機能だと思ってました。
しかし、設定を変更するだけで INSERT 文も吐き出せます。

とりあえず自分用メモの為に残しておきます。

 

■1:SSMS(Microsoft SQL Server Management Studio)の起動。

SSMS を起動したら、対象となるサーバーにログインします。
20140310-01

 

■2:ダンプするデータベースの選択。

SSMS でダンプするデータベースを選択して右クリックからコンテキストメニューを表示します。
表示されたコンテキストメニューから [タスク] – [スクリプトの生成] を選択します。
20140310-02

 

■3:ウィザードの起動。

[スクリプトの生成] を選択すると、ウィザード画面が表示されます。
最初のウィザード画面は説明画面なので、[次へ] ボタンで処理を進めます。
20140310-03

 

■4:対象となる範囲の決定。

ココでは、生成するスクリプトの対処となる範囲を、下記の2通りから決定します。

  • ・データベース全体とすべてのデータベース オブジェクトのスクリプトを作成
  • ・特定のデータベース オブジェクトの選択

 

今回の目的はダンプの確認になるので、「特定のデータベース オブジェクトの選択」を選んだ場合はデーターのあるテーブルを含める必要があります。
(今回の確認作業では全テーブルを選択しています。)
20140310-04

 

■5:出力先の決定。

最後に、吐き出されるスクリプトの出力先を指定します。
出力の種類は下記の2通り選べますが、ダンプする際にはどちらでも構いません。

  • ・スクリプトを指定した場所に保存
  • ・Web サービスにパブリッシュ

 

・「スクリプトを指定した場所に保存」を選んだ場合
ファイルに保存を選択して、詳細設定 のボタンを押下します。
20140310-05

スクリプト作成の詳細オプション の画面が表示されますので、「スクリプトを作成するデータの種類」の項目から「スキーマとデータ」を選びます。
20140310-06

 

・「Web サービスにパブリッシュ」を選んだ場合
詳細設定 のボタンを押下します。
20140310-07

スクリプト作成の詳細オプション の画面が表示されますので、「スクリプトを作成するデータの種類」の項目から「スキーマとデータ」を選びます。
20140310-08

 

■6:スクリプトの出力

ウィザードを先に進めると、設定等に問題が無ければスクリプトが指定された場所に出力されます。
20140310-09
20140310-10
20140310-11

 

という感じです。
それ以外の方法でデータを吐き出したい場合には、下記の stackoverflow にも書かれていますが、アドイン等もイロイロありそうです。
http://stackoverflow.com/questions/1515969/exporting-data-in-sql-server-as-insert-into

Viewing all 45 articles
Browse latest View live