PCだい「ちゅき」

気がつけば庶事手伝い

目次

Blog 利用状況

ニュース

・H24/01/02
 Microsoft MVPを受賞しました
・H23/11/18
 MCTの憂鬱さんと相互リンクを張っていただきました^^
・H23/09/10
 プログラミング生放送でスピーカーさせていただきました^^ ・H22/12/18
 わんくま同盟でスピーカしました^^
さて、来年はどんな年になるかな。予想が当たるといいなぁ。
・H22/07/17
 わんくま同盟でスピーカしました^^
技術系のセッションは久しぶり。VB! VB!
・H22/03/13
 Tech FieldersでLTのスピーカしました^^
・H21/12/12
 わんくま同盟でスピーカしました^^
最近はずっとLT担当だったので、ちょっと新鮮でした^^
・H20/11/18
 Tech Fielders セミナー 大阪の
 Lightning Talkで優勝しました^^
・H20/8/23
 わんくま同盟で2回目のスピーカしちゃいました
 WCFと戯れてみました^^
・H20/5/17
 わんくま同盟でスピーカしちゃいました^^
 ちゃんとスピーカー持参しましたよんw
・H20/2/22
 なめ猫の参加証もらいました^^
・H20/1/22
 テンプレートを変えてみました^^
・H19/7/23
 ACEプログラムで、ナップサックをもらった上、工具セットももらえることになりました^^
・H19/1/11
 1が並ぶ縁起の良い日に投稿開始!。今後ともお付き合いよろしくお願いします
・H18/10/29
 参加させていただきました^^
ド・初心者ですがどうぞよろしくお願いします。

↓うーん、仕事しろ^^;
Chukiの脳内メーター

Chukiの脳内メーター

書庫

日記カテゴリ

ギャラリ

コミュニティ

相互リンク

2018年12月19日

Windows OSとか Active Directoryのセキュリティーグループに所属するかを確認したい!

ここ最近、UiPathでイロイロ遊んでます。そこでUiPath (ja) Advent Calendar 2018に参加してみました。第二弾!

結論!

セキュリティー担保したいなら、Orchestrator買え。以上。


はじめに

UiPathを軽くみんなでお安く使用しようとすると、Node-Lockedライセンスという共有端末をみんなで使うライセンス形態があります。しかし!、この場合、どのユーザーでログインしても、端末に入っているすべてのロボットが見えてしまいます。つまり申請系と承認系のロボットが起動できてしまうという、監査人大喜びのツッコミどころができてしまいます。

そこで、ユーザーがActive DirectoryなりWindows OSのセキュリティーグループに所属しているかを確認するプログラムを作ってみます。

Active Directoryでは、グループの中にグループを突っ込めたりするので、単にグループのメンバーの一覧取得だと、ガッつり再帰かけないといけないので面倒すぎます。この時IADsGroupクラスのIsMember を使うのがいつものパターンです。

ではやってみる。

image

↑OrchestratorなしのNode Lockedライセンスだと、すべてのロボットがどのユーザーにログインしても見えて実行が可能

Orchestratorなしで頑張ってみる

まずは、参照の追加。DirectoryEntryは System.DirectoryServicesの参照を追加して…あれ?IADsGroupはCOMだけどどうやって参照するんだ?

image

XAMLで追加するのはあくまでclr-namespaceなので、きっぱりあきらめる。
ここで登場するのは、「カスタムアクティビティ

自分でもサクっとアクティビティを作れてしまうのがUiPathのいいところ。だって、まんまWFなんだもの。

■作業

1、プログラムを作成

2、パッケージを作成

3、UiPathに読込

4、使ってみる


1、プログラムを作成

新しい.クラスライブラリ(NET Framework)のプロジェクトを作って次の4つを参照追加

.NET
・System.Activities
・System.ComponentModel.Composition
・System.DirectoryServices
COM

・Active DS Type Library

(コードは最後に入れてます)


2、パッケージを作成

詳しい作成方法は、「カスタムアクティビティ」をごらんあれ

image

3、UiPathに読込

「パッケージを管理」から設定を押して、作成したパッケージの場所を追加してください。詳しくは(以下略
Activitiesペインに表示されるようになります

imageimageimage


4、使ってみる

ローカルコンピューターのAdministratorsグループにいるかを確認

TargetGroup:”Administrators”
TargetService:System.Environment.MachineName

image

image

成功!!!

こんなもん作ってメンテナンスするくらいなら、Orchestrator買いましょう^^;

以下、コード

Imports System.Activities
Imports System.ComponentModel
Imports System.DirectoryServices
Imports ActiveDs

Public Class IsGroupMember
     Inherits CodeActivity

    <Description("Domain | Domain\ComputerName | ComputerName")>
     <Category("Input")>
     <RequiredArgument>
     Public Property TargetService As InArgument(Of String)

    <Description("対象のグループ名")>
     <Category("Input")>
     <RequiredArgument>
     Public Property TargetGroupName As InArgument(Of String)

    <Description("結果")>
     <Category("Output")>
     <RequiredArgument>
     Public Property Result As OutArgument(Of Boolean)
     Protected Overrides Sub Execute(context As CodeActivityContext)
         Dim comInfo As DirectoryEntry = New DirectoryEntry("WinNT://" + TargetService.Get(context))
         Dim theGroup As DirectoryEntry = comInfo.Children.Find(TargetGroupName.Get(context), "group")
         Dim localgroup As IADsGroup = CType(theGroup.NativeObject, IADsGroup)
         Dim currentUser As String = "WinNT://" + System.Environment.UserDomainName + "/" + System.Environment.UserName

        Result.Set(context, localgroup.IsMember(currentUser))
     End Sub
End Class

posted @ 21:00 | Feedback (588)