迷走ITProですわな~

ITPro駆け出しによるブログ。「認証」にはまり中

SharePoint Onlineにおける通知機能の補完方法

SharePointの通知にはリボンメニューから設定できる「個人用通知」と、SharePoint Designerで設定する「ワークフローのメール送信」がありますが、いずれも実際に使ってみると少し機能が足りないと感じることが多いです。
※個人用通知では、全く足りないですが・・・

私が過去に不足感を感じた用途は以下になります。

  • ワークフローを起動するタイミングが「アイテムが作成されたとき」or「アイテムが変更されたとき」しか設定できない f:id:michaelowen628:20170816205008p:plain
  • 匿名ユーザーの投稿や編集では、ワークフローの起動に失敗する

この問題に対応するために別途タスクスケジューラに対して条件に合うアイテムを「更新」するスクリプトを登録することで、SharePoint Designerで設定したワークフローを起動するようにして実現していることも多いかと思います。

オンプレミスのSharePoint Serverであればそれでいいのですが、上記の方法ではSharePoint Onlineに対応することができないです。
そこでSharePoint Onlineにおいて、上記問題を解決する方法を2点ご紹介させて頂きます。

  1. Office 365 サイト用の Azure Web ジョブ ("タイマー ジョブ") の使用の開始 | MSDN f:id:michaelowen628:20170816212652p:plain

  2. オンデマンド Flow による新しい SharePoint 通知 – MS Japan Office 365 Tech Blog f:id:michaelowen628:20170816212948p:plain

それぞれのソリューションを簡単に比較すると以下のようになります。

【価格】

  • Azure Webジョブ + SharePoint Designer
    Azure WebジョブはAzure App Serviceのコストがかかってきます。 ただ、他で利用しているAzure Web Appにのせることも可能です。

  • Microsoft Flow
    制限はありますが、多くのOffice 365ライセンスにプランが含まれています。
    プラン | Microsoft Flow

【機能】

  • Azure Webジョブ + SharePoint Designer
    SharePoint Online内で完結するのであれば、基本的にやりたいことはできます。
    Exchangeや、Skype、Dynamics等他のMicrosoft アプリと連携すると不利。
    ※Azure Webジョブ側にアップロードするスクリプトにコードを記載すれば多くのことを実現できるが、基本的にはSPDのトリガー補助を想定

  • Microsoft Flow
    SharePoint Online内で完結する場合、SPDのワークフローと比較して複雑なフローになりがちですが、機能面ではSPDにほとんど追いついていると考えられます。
    他のOffice 365アプリ等と連携する場合、とても強力です。

【運用】

  • Azure Webジョブ + SharePoint Designer
    SharePointリストと連携する等、実装を工夫することで、事前に想定される運用作業は軽減可能です。
    しかし根本的な実装面で改修が必要な場合、SPDスクリプトの理解及びその環境が必要になります。
    Powershell+CSOM等のスクリプトをオンプレミスで利用している場合、参照するDLLと合わせてアップロードすることでSharePoint Onlineでも同じスクリプトを利用可能です。

  • Microsoft Flow
    フローが複雑になりがちですが、ブラウザのみで比較的容易に編集可能です。   Json,zip形式でインポート/エクスポート可能ですが、当然ながらオンプレと異なる実装となります。

将来的にMicrosoftは、SharePoint DesignerとInfopathの開発を打ち切るとアナウンスしていることからも、Microsoft Flowの利用にも慣れておきたいところですね。

なお、今回はよく直面する問題として通知機能を中心に記載していますが、このソリューションはSharePoint Onlineに対してあらゆるスケジューリングタスクを実現してくれますので、応用範囲は多岐に渡ります。
是非色々試してみてください。

Azure上でNested Virtualizationが利用可能に

最近色々ゴタゴタしていたので久しぶりの投稿になります。

タイトルの通り、Azure上のVMNested Virtualizationが利用可能になったようですね。
(※一部のサイズに限定されているようですが)

azure.microsoft.com

オンプレでは、Windows Server 2016から既にこのNested Virtualization機能は利用できるようになっているので、Azureの仮想化基盤が追いついてきた形になります。
ちなみにオンプレの場合は、Hyper-Vホスト側で以下のコマンド実行が必要だったのですが、Azureではどうなるのでしょうか・・・

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

まぁ何はともあれ、これでAzure上でHyper-V周りの検証も実施できるようになりました。Docker for Windowsも内部的にはHyper-Vの機能を利用することになるので、今まではAzure上のVMで利用することができなかった仮想化周りの検証が捗りますね。

docs.docker.com

SharePoint Server 2013 利用状況ログについて

ちょっとSharePointネタで最近ハマったものを投稿します。

SharePoint Server 2010から移行する場合等は特に注意していただきたいのですが、SharePoint 2013から利用状況分析機能が大きく変化しています。
SharePoint 2010でアクセス解析等を行う場合、Web Analytics Serviceを使っていたと思いますが、こちら2013以降廃止されています。
SharePoint 2010 から SharePoint 2013 への変更点

で、2013以降代わりに利用状況レポートがあるのですが、これが少し曲者です。 検索クエリの分析等は問題なくできるのですが、利用状況のレポートをダウンロードしても数値がカウントされていない・・・?
f:id:michaelowen628:20170513150923p:plain

色々調べていると、どうやらStandard Editionでこのレポートは使えない!?との情報有り。
公式ブログ見てもUsage Reporting and LoggingUsage AnalyticsYesになってるけど大丈夫か(笑)
SharePoint 2013 onpremise edition comparison chart – SharePoint & Cloud

で、さらに色々調べているうちに以下のようなブログも発見。
SharePoint 2013 – Usage Analytics (the story) – SharePoint Support Blog PowerShell Script to Workaround No Data in SharePoint 2013 Usage Reports | The Frog Pond of Technology

ブログに記載の下記コマンドを実施してReceiverを追加してみたところ、確かにアクセス数が記録されるようになりました。
※コマンドの英語の部分を一部日本語に変更する必要がありました。

$ad = Get-SPUsageDefinition | where {$_.Name -like”分析の利用状況”}
$ad.Receivers.Add(“Microsoft.Office.Server.Search.Applications, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”,”Microsoft.Office.Server.Search.Analytics.Internal.AnalyticsCustomRequestUsageReceiver”) 
$ad.EnableReceivers = $true

$pd = Get-SPUsageDefinition | where {$_.Name -like”ページの要求”}
$pd.Receivers.Add(“Microsoft.Office.Server.Search.Applications, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”, “Microsoft.Office.Server.Search.Analytics.Internal.ViewRequestUsageReceiver”)
$pd.EnableReceivers = $true 

ただMSのサポートにも問い合わせたところ、やはりこの機能はStandard CALでは使えないものとなっているようで、上記ブログの手順で有効化した場合は未サポートとなる旨の回答を頂きました。
ご利用に際してはご注意下さい。

Powershell DSCによるSQL Serverのインストール 【Part 2】

Part 1はこちら t-wakabayashi.hatenablog.com

少し間が空いてしまいました。
前回は、DSCリソースモジュールの配置まで実施しました。
このモジュールですが、実際に配置されたフォルダは以下のパスにあります。
C:\Program Files\WindowsPowerShell\Modules\xSQLServer
f:id:michaelowen628:20170420231427p:plain

中にはDSCリソースは勿論、Examplesフォルダの中にConfigrationのサンプルが記載されたものも入っています。
今回は、基本的にそのサンプルをそのまま使って流してみます。
C:\Program Files\WindowsPowerShell\Modules\xSQLServer\6.0.0.0\Examples内にあるSQLPush_SingleServer.ps1を使います。

中はこんな感じですね。
f:id:michaelowen628:20170420232003p:plain

流石にそのまんま完全に使うことはできず、以下のように環境依存している部分を見つけて修正してあげる必要があります。

  • 構成対象のコンピュータ名
  • mofファイルの出力先
  • SQL Serverのインストールディレクト
  • OS,SQLメディアのドライブ
  • 管理者、サービスアカウント情報

また、環境の面では構成対象のマシンに対して以下のような最低限のセットアップはしてあげます。

ワークグループの端末に対して構成を行うことも可能ですが、以下のような追加の設定が発生します。
t-wakabayashi.hatenablog.com

では、ここまでで準備は整ったのでまずmofファイルの生成を行います。
f:id:michaelowen628:20170420234504p:plain

エラー(;‘∀’)
管理共有を利用してDSCリソース送り付けるためのFWが空いてなかったようです。。。空けました。
f:id:michaelowen628:20170420234618p:plain

再トライ!
f:id:michaelowen628:20170420234726p:plain いけましたね。構成予定のマシンにもDSCリソースがコピーされていることも確認できます。

それでは、実際のConfigrationを実行!( ˘•ω•˘ ) f:id:michaelowen628:20170421000738p:plain

再起動されて・・・状況追えんのかーい!
冪等性が担保されているので、もう1回実行。。。
f:id:michaelowen628:20170421001822p:plain

完了しました。
構成対象の状態も軽く確認。
f:id:michaelowen628:20170421002153p:plain
できてそうな雰囲気! ちょっと、Test-DSCConfigrationが上手く動いていないようなのですが構成は成功しているような気がします(笑)

とりあえずお試しということで、細かいところはすっ飛ばして実験してますが、 実際に利用する際にはカスタムDSCリソースを自分で修正・加工できるぐらいの状態でやりたいですね。
また後日、SQLSharePointぐらいは自動で構成するシナリオで記事を書かせて頂こうかと思います。

Powershell DSCによるSQL Serverのインストール 【Part 1】

PowerShell DSCってなんぞや?の方はこちらを一読ください。 www.atmarkit.co.jp

クラウドやDocker等、開発者にとって検証環境を用意するのがどんどん楽になっているのは間違いないですが、構築・構成管理の自動化技術はまだまだ一般的なWindows SIの現場に浸透しているとは思えません。 特に私のような従来のオンプレSIでバリバリやってる現場ですと、結構無縁の世界に生きてます(笑)

そんな私ですが、興味はあるのでこのPowerShell DSCでInfrastructure(Configration) as Codeの扉を叩こうかと思った次第です。
とりあえずタイトル通り、SQL Server 2014をWindows Server 2016に展開してみようかと思います。
SQL Server 2016じゃない理由は後述

ちなみに勉強ネタとしては以下2点。
日本語で素晴らしい記事を書いてくださっている方がいらっしゃったので熟読させて頂きました。 あとは実際MVAのデモで雰囲気を掴んでTryあるのみですね。(※英語ですが耳がついていけなくても十分参考になります)

www.adventar.org mva.microsoft.com

一先ず、DSCお試しなのでPUSHモードで実験します。
DSCに関する構成は既定のまま
f:id:michaelowen628:20170408231313p:plain

で、SQL Serverに関するDSCリソースは既定で配置されていないので、GitHubからとってきます。 さすがにお試しで、カスタムDSCリソースは書けません。。。MSのPowerShellチームを中心にオープンに開発されているようなので利用させて頂きます。 ※これが現時点でSQL Server 2016のインストーラに対応していないようなので今回は2014になります。(SSMS分離とかね)

DSCリソースの配置ですが、Linuxのパッケージ管理apt-getみたいな形で管理する方法と、オフライン環境において自分で配置する方法があります。

・オフライン環境
SQL ServerのDSCリソースファイルは以下なので、ダウンロードして展開したものをそのままC:\Program Files\WindowsPowerShell\Modulesに置きます。
GitHub - PowerShell/xSQLServer

・オンライン環境
以下のコマンドで自動配置・更新が可能です。

Find-Module -name xSQLServer | Install-Module
Get-DscResource *SQL*

こんな感じ
f:id:michaelowen628:20170408232525p:plain

次回はこのDSCリソースを使って、シンプルなSQL Serverを展開してみます。

Let's Encryptを使ってADFS用の証明書を発行 【Part 3】

これの最終回になります。
t-wakabayashi.hatenablog.com

まずは、AAD ConnectウィザードからADFSで利用している証明書更新作業を行います。(WinRMでの構成を実施している場合のみ)
※WinRMを構成していない場合は、各ADFS,WAPの証明書を頑張って更新する必要があります。

f:id:michaelowen628:20170329233749p:plain f:id:michaelowen628:20170329233752p:plain f:id:michaelowen628:20170329233756p:plain

AAD Connectから一発でいけるのは楽でいいですねホント。 以前は結構めんどくさかったのですが。。。
※こんな感じ
AD FS 3.0におけるSSL証明書更新 | 日々徒然

それでは早速外部(WAP経由)からIEを使ってアクセステスト。
ブラウザ既定で入っているIdenTrust 社の証明書「DST Root CA X3」によって、中間証明書「Let’s Encrypt Authority X3」に対するクロス署名が行われているため、クライアントに証明書を入れることなくブラウザアクセスが可能です。 f:id:michaelowen628:20170329233801p:plain

あとは、先進認証を有効化していない場合のネイティブアプリケーション(OutlookSkype等)によるアクセスにおいて、MFGからWAPに対するアクセスが発生するシナリオ(WS-Trustを利用)です。
※Office 2013以降であれば、先進認証(OAuthを利用)を有効化することでMFGからのアクセスを回避可能です。

このシナリオはアクセス元がクライアントではなくMFGとなるため、MFGがWAPから提示される証明書を信頼しているかどうかという話になります。
この動作検証の主旨はそこです。

で結果ですが、繋がりました。 Office ProPlusですが、Exchange Onlineはアプリケーション側が既定で先進認証無効のため、WS-Trustの認証のはずです。 f:id:michaelowen628:20170330005113p:plain

Outlook側の 認証も「クリア」になっています。(先進認証の場合は、「ベアラー」となります) f:id:michaelowen628:20170330011909p:plain

以上の結果、ADFSの検証においてLet’s Encryptの証明書は問題なく使えそうです。 実際のお客様の環境に対してはまだまだ受け入れていただけないでしょうが、動作検証のハードルが下がるので是非ご活用いただければと思います。

Let's Encryptを使ってADFS用の証明書を発行 【Part 2】

これのPart2です。
t-wakabayashi.hatenablog.com

前回は、Azure上にUbuntuを展開してRDP接続できるところまでやりました。
今回は、実際にLet’s Encryptで証明書の発行を行います。
なおADFS用の証明書ですが、どうせなのでDRS用のレコード
enterpriseregistration.<domain name>
サブジェクト代替名に追加したものを発行します。

ちなみに詳しい手順は、先駆者の方々と公式サイトにも記載がありますのでそちらをご覧ください。

なお、今回はIISに導入するための証明書をAzure上のApacheから取得するシナリオになっているので、自動インストール・更新機能等は使いません。
取得するサーバーと異なるサーバーで利用する場合、-manualオプションを利用するようです。

./certbot-auto -manual -d adfs.wpec.xyz -d enterpriseregistration.wpec.xyz

ちょいちょい手間取りましたが、上手くいきました。 f:id:michaelowen628:20170328231735p:plain

そこからIISで使えるように、PFX形式に変換。

openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out adfs.pfx

f:id:michaelowen628:20170328233704p:plain

思ったよりはスムーズにできました。先駆者の方々に感謝です。 ちなみにWin-Linux間は下記ツールで行っています。

発行された証明書はこちら。意図通りに作成できています。
f:id:michaelowen628:20170328234955p:plain

次回は、ADFSの証明書更新と簡単な動作検証ですかね。