Upload
junichi-anno
View
13.275
Download
14
Embed Size (px)
DESCRIPTION
Windows PowerShell 2.0 を使用した ・Server Core の設定 ・Hyper-Vの管理 ・Active Directoryの管理 ・EventLogの管理
Citation preview
1
Windows PowerShell によるServer Core の環境設定と操作
マクロソフト株式会社
エバンジェリスト
安納 順一 Anno Junichi
http://blogs.technet.com/junichia/
22
本日の目的
従来のWindows Script にかわるPowerShell を使用したさまざまな管理手法
PowerShell でしかできないこと
33
Agenda
• OSの基本設定
• Hyper-V 環境の管理
• Active Directory の管理
• EventLog の管理
PowerShell を使用して以下の作業を行います
4
OSの基本設定
55
OSの基本設定
Windows Server 2008 R2 Server Core では簡易GUIを提供
Sconfig.cmd
66
PowerShell のンストールと環境設定
ここからPowerShellコンソール
• WinRMサービスを起動• WinRMサービスを「自動」に設定• WinRM リスナを作成• WS-Management(HTTP)のFirewall例外を有効にする• PowerShell セッション構成を有効にする
Set-WSManQuickConfig
77
PowerShell Remoting
ローカルで実行
リモート CL01 上で実行
88
PowerShell Remoting
複数のリモートコンピューターを管理
方法1:コンピュータ名を並べて指定
方法2:コンピュータ名一覧をテキストファイルで用意
c:¥tmp¥hosts.txt
99
(参考)Server Core がWGの場合
クラゕント側の TrustedHosts に Server Core を追加する
1010
コンピューター名変更とドメン参加
1111
ネットワーク設定
1212
Windows Update とデバスドラバのダウンロード
1313
画面の解像度
(例)43882AFB-EB1A-406B-98F8-BDC4D019D84E
1414
(参考)PowerShellを使わない場合作業 初期状態 操作方法、コマンド例
パスワード変更 未設定 ログオン時に実施
コンピュータ名の変更 ランダム Netdom renamecomputer %computername% /NewName:Server2008-01
ネットワーク環境設定 DHCP Netsh interface ipv4 show interfaces
Netsh interface ipv4 add address name=“ローカルエリゕ接続” address=“192.168.7.100” mask=“255.255.255.0”gateway=192.168.7.254”
Netsh interface ipv4 add dnsserver name=“ローカル エリゕ接続” 192.168.7.11 index=1
WSHのエンジン変更 wscript Cscript.exe //h:cscript (エンジンを cscript にする)
Windows Update設定 未設定 Scregedit.wsf /AU 4 (自動更新を有効にする)
電源管理系機能の設定 Powercfg.exe
役割と機能の追加 未 Oclist.exe で一覧参照、Ocsetup.exeでンストール
ドメン参加 Netdom join %computername% /domain:<domainName> /userd:<domainName>¥<userName> /passwordd:<password>
シャットダウン、再起動、ログオフ Shutdown.exe (再起動時は /r ), logoff.exe
1515
Server Core の管理メージ
Server Core Remote PC
コマンドプロンプト/PowerShellコンソール
MMC/Server Manager/リモードデスクトップ
コマンドプロンプト/PowerShellコンソール
1616
リモートからの管理を有効にする
• MMC• リモートデスクトップサービス• Server Manager• Windows PowerShell(実施済み)
1717
MMCを使用したリモート管理を有効にするsconfig.cmd の中で実行している内容
1818
リモートデスクトップを有効にする
1919
(参考)Workgroup構成の場合Server Core側
クライアント側
20
Hyper-Vの管理
21
Server Core 上の Hyper-V を管理するには• Hyper-V マネージャーから(リモート)
• GUIからHyper-Vを管理• OSのンストール、OSの操作も可能
• System Center Virtual Machine Manager から(リモート)• 合理化されたGUIからHyper-Vを管理• OSのンストール、操作も可能• 専用のPowerShellコマンドレットも用意
• WMIを使用してPowerShell から(リモート,ローカル)• コマンドランからHyper-Vを管理• (通信可能であれば)OSの操作が可能• OSのンストールが行えない
Server Coreローカル
リモート
22
root¥virtualization 内のクラス一覧
MSVM_VirtualSystemManagementServiceSettingDataMSVM_virtualSystemManagementServiceMSVM_ShutdownComponentMSVM_SwitchLANEndpointMSVM_SyntheticEthernetPortSettingDataMSVM_VirtualSwitchManagementServiceMSVM_VirtualSystemGlobalSettingDataMSVM_VirtualSystemSettingDataMSVM_VlanendpointMSVM_AllocationCapabilitiesMSVM_ComputerSystemMSVM_DiskDriveMSVM_SwitchPortMSVM_VirtualSwitch
MSVM_EmulatedEthernetPortSettingDataMSVM_ExternalEthernetPortMSVM_HeartbeatComponentMSVM_InternalEthernetPortMSVM_KvpExchangeComponentMSVM_KvpExchangeDataItemMSVM_MemorySettingDataMSVM_MountedStorageImageMSVM_ProcessorMSVM_ProcessorSettingDataMSVM_ResourceAllocationSettingDataMSVM_ResourcePoolMSVM_SettingsDefineCapabilities
23
MSVMクラス 利用のコツ
24
Msvm_VirtualSystemManagementService クラス
AddKvpItemsAddVirtualSystemResourcesApplyVirtualSystemSnapshotApplyVirtualSystemSnapshotExCheckSystemCompatibilityInfoCloneVirtualSystemCreateVirtualSystemSnapshotDefineVirtualSystemDestroyVirtualSystemExportVirtualSystemExportVirtualSystemExFormatErrorGetSummaryInformationGetSystemCompatibilityInfoGetVirtualSystemImportSettingDataGetVirtualSystemThumbnailImage
ImportVirtualSystemImportVirtualSystemExInstantiateVirtualSystemModifyKvpItemsModifyServiceSettingsModifyVirtualSystemModifyVirtualSystemResourcesPlanVirtualSystemRemoveKvpItemsRemoveVirtualSystemResourcesRemoveVirtualSystemSnapshotRemoveVirtualSystemSnapshotTreeRequestStateChangeStartServiceStopService
Hyper-Vの全体的な管理を行うクラス
メソッド一覧
25
(例)スナップショットを取る
2626
(参考)PowerShell modules for Hyper-V
Codeplex で提供されているPowerShellコマンドレット群2009年11月30日時点で ベータ版
http://pshyperv.codeplex.com/
2727
Active Directory を管理する+
Eventlog を管理する
28
AD DS を管理するための準備
• Active Directoryモジュールの読み込み
• Active Directory 関連コマンド一覧の参照
2929
(参考)Windows PowerShell ADモジュール一覧
Add-ADComputerServiceAccountAdd-ADDomainControllerPasswordReplicationPolicyAdd-ADFineGrainedPasswordPolicySubjectAdd-ADGroupMemberAdd-ADPrincipalGroupMembership
Clear-ADAccountExpiration
Disable-ADAccountDisable-ADOptionalFeature
Enable-ADAccountEnable-ADOptionalFeature
Get-ADAccountAuthorizationGroupGet-ADAccountResultantPasswordReplicationPolicyGet-ADComputerGet-ADComputerServiceAccountGet-ADDefaultDomainPasswordPolicyGet-ADDomainGet-ADDomainControllerGet-ADDomainControllerPasswordReplicationPolicyGet-ADDomainControllerPasswordReplicationPolicyUsageGet-ADFineGrainedPasswordPolicyGet-ADFineGrainedPasswordPolicySubjectGet-ADForestGet-ADGroupGet-ADGroupMemberGet-ADObjectGet-ADOptionalFeatureGet-ADOrganizationalUnitGet-ADPrincipalGroupMembershipGet-ADRootDSEGet-ADServiceAccountGet-ADUserGet-ADUserResultantPasswordPolicy
3030
Install-ADServiceAccount
Move-ADDirectoryServerMove-ADDirectoryServerOperationMasterRoleMove-ADObject
New-ADComputerNew-ADFineGrainedPasswordPolicyNew-ADGroupNew-ADObjectNew-ADOrganizationalUnitNew-ADServiceAccountNew-ADUser
Remove-ADComputerRemove-ADComputerServiceAccountRemove-ADDomainControllerPasswordReplicationPolicyRemove-ADFineGrainedPasswordPolicyRemove-ADFineGrainedPasswordPolicySubjectRemove-ADGroupRemove-ADGroupMemberRemove-ADObjectRemove-ADOrganizationalUnitRemove-ADPrincipalGroupMembershipRemove-ADServiceAccountRemove-ADUserRename-ADObjectReset-ADServiceAccountPasswordRestore-ADObject
Search-ADAccount
Set-ADAccountControlSet-ADAccountExpirationSet-ADAccountPasswordSet-ADComputerSet-ADDefaultDomainPasswordPolicySet-ADDomainSet-ADDomainModeSet-ADFineGrainedPasswordPolicySet-ADForestSet-ADForestModeSet-ADGroupSet-ADObjectSet-ADOrganizationalUnitSet-ADServiceAccountSet-ADUser
Uninstall-ADServiceAccount
Unlock-ADAccount
31
ユーザー情報の参照
• 現在ログオンしているユーザーIDの情報
• ユーザーのプロパテゖを参照
32
AD DS をブラウズPS C:>cd AD:PS AD:>dir
Name ObjectClass DistinguishedName-------------------------------------------------------------------------Contoso domainDNS dc=Contoso,dc=ComConfiguration configuration cn=Configuration,dc=contoso,…Schema dMD cn=schema,cn=Configuration,…・・PS AD:¥>cd ‘.¥DC=Contoso,DC=Com’PS AD:¥DC=Contoso,DC=Com>dir
Name ObjectClass DistinguishedName-------------------------------------------------------------------------Builtin BuiltinDomain cn=Builtin,dc=contoso,dc=comComputers container cn=Computers,dc=contoso,dc…・・
33
特定条件のユーザーを検索①
• ユーザーIDに test を含むユーザーを検索する
• 無効化されたユーザーを検索する
• パスワードの有効期限が切れたユーザーを検索する
• ゕカウントの有効期限が切れたユーザーを検索する
• ロックされたユーザーを検索する
• パスワードが無期限のユーザーを検索する
34
特定条件のユーザーを検索②
• 1年間ログオンしていないユーザーを検索する※ただし最近作成したユーザーは除外する
2009/11/1817:00:00
除外
今から365日前
この間にログオンしていないユーザー
35
ユーザーを作成
#ドメンに移動cd AD:cd ‘.¥DC=contoso,DC=com’
#OUを作成New-ADOrganizationalUnit “TESTOU”
#OUに移動cd ‘.¥OU=TESTOU’
#ユーザーを作成New-ADUser –Name “itanaka” -UserPricipalName “[email protected]” -displayName “田中 一郎”
36
UserAccountControl フラグ の設定Set-AccountControl –Identity “<UserID>”-AccountNotDelegated $True | $False ゕカウントは重要なので委任できない-AllowReversiblePasswordEncryption $True | $False 暗号化を元に戻せるパスワードで保存する-AuthType {Negotiate | Basic} 使用する認証方式-CannotChangePassword <bool> ユーザーはパスワードを変更できない-DoesNotRequirePreAuth <bool> Kerberos事前認証を必要としない-Enabled <bool> ゕカウントの有効/無効-HomedirRequired <bool> ゕカウントにホーム デゖレクトリが必要であるかどうか-MNSLogonAccount <bool> マジョリテゖ ノード セットログオン ゕカウントであるかどうか-Partition <DN> Active Directory パーテゖションの識別名-PasswordNeverExpires <bool> パスワードを無期限にする-PasswordNotRequired <bool> ユーザーは次回ログオン時にパスワード変更が必要-TrustedForDelegation <bool> 任意のサービスへの委任でこのユーザーを信頼する-TrustedToAuthForDelegation <bool> このゕカウントで委任を使用できる-UseDESKeyOnly <bool> このゕカウントにKerberos DES暗号化を使う
37
パスワード
Set-ADAccountPassword -Identity <ADAccount> -NewPassword <SecureString> -OldPassword <SecureString>
Set-ADAccountPassword -Identity <ADAccount> -NewPassword <SecureString> -Reset <switch>
38
PowerShellでしかできない削除ユーザーの復活
Active Directory Recycle Bin
機能削除したユーザーを完全復活!既定で180日間保持(変更可能)削除状態からの復旧であればAuthoritative Restoreは不要
属性情報の紛失時には使えないLinked-Value も完全復活
グループメンバーシップやグループメンバー など
留意事項(ご参考)Active Directory フォレスト機能レベル
Windows Server 2008 R2規定では無効(有効にしたら元には戻せない)DITの容量が10~15%程度増加(目安)操作は Windows PowerShell を使用
3939
削除済 リサクル済
Lifetime180 Days
Lifetime180 Days
有効
Active Directory Recycle Bin
「削除済」からの完全復旧
消滅
削除操作
GarbageCollection
・・・・ ・・
40
削除済オブジェクト の ライフタイム を変更する
リサイクル済オブジェクトのライフタイムを変更する
(参考)ラフタムを変更するには
4141
Recycle Binを使用するための準備
フォレストの機能レベルを「2008 R2」にする
「ゴミ箱」を有効にする
4242
削除されたユーザーを復旧する
削除されたユーザーを参照する
ユーザーを復旧する
43
Active Directory Recycle Bin のメカニズム
削除されるとDeleted Objects コンテナに移動
IsDeleted属性が Trueに
全てのオブジェクトがフラットに並ぶ
RDN(識別名)が書き換えられる<現在のRDN>¥0ADEL:<GUID>
CN=Deleted Objects
OU=Admins¥0ADEL:…
CN=Tom¥0ADEL:…
CN=Sally¥0ADEL:…
CN=Mark¥0ADEL:…
OU=Finance¥0ADEL:...
CN=Robert¥0ADEL:…
OU=Finance
OU=Admins
CN=Tom
CN=Sally
CN=Mark
OU=Finance
CN=Robert
44
ツリー構造の復旧はルートから行う
復旧は親から順に行う
親オブジェクトが存在しない場合にエラー
親はlastKnownParent 属性に入っている
CN=Deleted Objects
OU=Admins¥0ADEL:…
CN=Tom¥0ADEL:…
CN=Sally¥0ADEL:…
CN=Mark¥0ADEL:…
OU=Finance¥0ADEL:...
CN=Robert¥0ADEL:…
まずはここから
OU=Finance
OU=Admins
CN=Tom
CN=Sally
CN=Mark
CN=Robert
45
組織ツリーの復旧
1. 親を復旧
2. 親が「Finance_Department」であるものを復旧
3. 親が「Admins」であるものを復旧
46
ユーザーIDのプロビジョニング - Before
従来のプロビジョニング(WS2003~WS2008)
各種属性所属グループメンバーシップ
47
ユーザーIDのプロビジョニング - After
Windows Server 2008 R2では
各種属性所属グループメンバーシップ
48
ユーザーIDのプロビジョニング - After+
さらなる内製化
監査ログ
各種属性所属グループメンバーシップ
49
ユーザー属性の変更を追跡するには①
[ADSIエデゖタ] で Everyoneに対して「すべてのプロパテゖの書き込み」を監査
監査の設定
50
ユーザー属性の変更を追跡するには②
デゖレクトリサービスのゕクセスの監査 を有効にする
51
ベントID 5136department 属性が 「営業部」から「経理部」に変わったことがわかる
52
EventID 5136 を検索する
searchEvent.ps1
53
出力結果例
54
AD Recycle Bin + PowerShell + 監査ログ
業務に与えるンパクト
データ復旧時のシステム停止時間を大幅に削減従来
Authoritative Restore によるバックゕップからの復元
Snapshot から取り出し(Windows Server 2008)
今後Windows PowerShell によって簡単に復元
局所的に復元が可能
簡易的なユーザーIDプロビジョニングシステムの実現導入コストの大幅な軽減
中小規模システムへの適用が可能に
55
まとめ
56
まとめ
難しくて面倒なWMIが身近に
コードの量が半分以下に(VBS比)
慣れたコマンドを併用可能
GUIでは知りえない情報も取得
今後、多くのServer製品にコマンドレットが付属
5757
58
Appndix- WMI による Windows Server の 監視
(VBScript編)
5959
WMI とは
WBEM/CIMに準拠
各種管理情報への共通ンターフェース
Windows Management Serviceとして実装
Windows 2000以上のOSに標準搭載
WMIプロバダはベンダーが拡張可能
別途エージェントは一切必要なし
もちろんタダ!
Windows Management Instrumentation
6060
6161
WMI にゕクセスするには
バッチフゔルから
WMICコマンド(Windows XP以降)
Windows Script Host から
Windows PowerShell から
Visual Studio から
GUIツールから
WMI Admin Tools など
6262
WMIの構造
Namespace
Class
%WinDir%¥System32¥wbem 配下の mof (Managed Object Format)フゔルに定義されている
Namespace によって使えるClass が異なることに注意
規定のNamespaceはRoot¥CIMV2
(例) ROOT¥COMV2Win32_OperatingSystemWin32_NTLogEventLog・・
ROOT¥DefaultSTDREGPROV
ROOT¥microsoft¥SqlServer¥ComputerManagement10SqlService・・
6363
WMIの主役 Win32_クラス
Win32_ActiveRouteWin32_ComputerShutdownEventWin32_ComputerSystemEventWin32_ConnectionShareWin32_CurrentTimeWin32_DeviceChangeEventWin32_DiskQuotaWin32_GroupInDomainWin32_IP4PersistedRouteTableWin32_IP4RouteTableWin32_IP4RouteTableEventWin32_JobObjectStatusWin32_LoggedOnUserWin32_LogonSessionWin32_LogonSessionMappedDiskWin32_NetworkAdapterWin32_ComputerSystem
・・
Win32_ModuleTraceWin32_NamedJobObjectWin32_NTDomainWin32_PingStatusWin32_ProcessStartTraceWin32_ProcessStopTraceWin32_ProxyWin32_QuotaSettingWin32_ServerConnectionWin32_SessionConnectionWin32_TokenGroupsWin32_TokenPrivilegesWin32_VolumeChangeEventWin32_WindowsProductActivationWin32_ControllerHasHub
・・・
一部抜粋
6464
WMI Tools ~ CIM Studioブラウザを使用して、WMIの構造、実際のンスタンスを確認クエリを発行して戻り値を確認リモートコンピュータに接続も可能
6565
VBScriptからWMIを使う
6666
WMI Scriptingの基本形
'SWbemLocator オブジェクトの作成Set Locator = CreateObject("WbemScripting.SWbemLocator")
‘ローカルコンピュータへの接続Set Service = Locator.ConnectServer("", "root¥cimv2", "", "")
‘クエリーの定義(WQL:WMI Query Language)strQuery = "Select * from Win32_NetworkAdapterConfiguration " & _
"where IPEnabled = True"
‘クエリーの実行(インスタンスを取得する)Set objNet = Service.ExecQuery(strQuery)
'結果の参照For each n in objNet
WScript.Echo n.captionWScript.Echo n.MACAddress
Next
6767
WMIスクリプトの実行権限
Set Service = Locator.ConnectServer(RemoteHost,Namespace,User,Password)
リモートコンピュータに対するゕクセス権の取得
特殊権限の取得
Set Locator = CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer("DC01", "root¥cimv2", "Dom¥administrator", "pass")
Service.Security_.Privileges.AddAsString "SeBackupPrivilege", TrueService.Security_.Privileges.AddAsString "SeSecurityPrivilege", True
strQuery = "Select * from Win32_NTEventlogFile" & _" Where LogfileName = 'Security' "
Set obj = Service.ExecQuery(strQuery)
For each n in objr = n.BackupEventLog("C:¥tmp¥Security.evt")
Next
6868
(注意)リモートコンピュータにゕクセスする前に①
リモートからの接続が許可されていることを確認規定ではシステム管理者にはゕクセスが許可されている
6969
(注意)リモートコンピュータにゕクセスする前に②
7070
Windows Serverを監視する
7171
ベントの監視
システムで発生したベントをトリガーとして処理を実行
一時監視と永続的監視
以下のベント監視用クラスが用意されている
__InstanceCreationEvent
あたらしいンスタンスが作成された
__InstanceModificationEvent
ンスタンスの属性が変更された
__InstanceDeletionEvent
既存のンスタンスが削除された
7272
監視のメージ
WORDが起動
ベントログにベントが書かれた
ユーザーがログオン
USBデバスが挿された
タムゾーンが変更
メモ帳が終了IPゕドレス変更
シャットダウン
7373
一時的な監視例①
Set objLocator = CreateObject("WbemScripting.SWbemLocator")Set objService = objLocator.ConnectServer(TargetComputer, _
"", AdminUser, AdminPass)
strQueryCreate = "Select * " & _"FROM __InstanceCreationEvent WITHIN 5 " & _"WHERE TargetInstance ISA 'Win32_Process' "
Set objEventsCreation = objService.ExecNotificationQuery(strQueryCreate)
DoSet CreationEvent = objEventsCreation.NexteventProcessName = CreationEvent.TargetInstance.NameWscript.Echo ProcessName
Loop
__InstanceCreationEventによる新たに作成されたインスタンスの監視
Win32_Procassのプロパテゖ
監視したいクラス
7474
一時的な監視例②
Set objLocator = CreateObject("WbemScripting.SWbemLocator")Set objService = objLocator.ConnectServer(TargetComputer, _
‚ROOT¥CIMV2", AdminUser, AdminPass)
strQuery= "Select * " & _"FROM __InstanceModificationEvent WITHIN 5 " & _"WHERE TargetInstance ISA 'Win32_ComputerSystem' "
Set objEventsModification = objService.ExecNotificationQuery(strQuery)
DoSet ModificationEvent = objEventsModification.NexteventUserName = ModificationEvent.TargetInstance.UserNameWscript.Echo UserName
Loop
__InstanceModificationEventによるユーザーログオンの監視
7575
そこでこんな方法…
現在のログオンセッション一覧をキャッシュログオンしたらセッション作成ログオフしたらセッション削除
ログオン時に割り振られた番号
ログオンのタプ(対話、ネットワーク…)
現在ログオンしているユーザーのユーザーIDとログオンIDをキャッシュ
ログオンしたユーザーID
ログオン時に割り振られた番号
7676
一時的な監視例③
Set objLocator = CreateObject("WbemScripting.SWbemLocator")Set objService = objLocator.ConnectServer("demo2008", "ROOT¥CIMV2", "", "")Wscript.Echo "接続が完了しました"strQueryCreate = "Select * FROM __InstanceCreationEvent WITHIN 5 " & _
"WHERE TargetInstance ISA 'Win32_LogonSession' ‚Set objEventsCreation = objService.ExecNotificationQuery(strQueryCreate)Do
Set CreationEvent = objEventsCreation.NexteventLogonId= CreationEvent.TargetInstance.LogonIDLogonType = CreationEvent.TargetInstance.LogonTypestrQueryLU = "Select * " & _
‚FROM Win32_LoggedOnUser‛ ' Where Dependent like ‘%" & LogonId & "%’‚Set objLoggedOnUser = objService.ExecQuery(strQueryLU)For Each u in objLoggedOnUser
If instr(u.Dependent, LogonId) ThenWscript.Echo u.AntecedentWscript.Echo u.Dependent
End IfNext
Loop
__InstanceCreationEventによるユーザーログオンの監視
ユーザーID
ログオンID
7777
一時的な監視例③‘ (③をブラッシュアップ)Set objLocator = CreateObject("WbemScripting.SWbemLocator")Set objService = objLocator.ConnectServer("demo2008", "ROOT¥CIMV2", "", "")
Wscript.Echo "接続が完了しました"strQueryCreate = "Select * FROM __InstanceCreationEvent WITHIN 5 " & _
"WHERE TargetInstance ISA 'Win32_LogonSession' ‚Set objEventsCreation = objService.ExecNotificationQuery(strQueryCreate)Do
Set CreationEvent = objEventsCreation.NexteventLogonId= CreationEvent.TargetInstance.LogonIDLogonType = CreationEvent.TargetInstance.LogonTypeSelect Case LogonType
Case 0 strLogonType = "System"Case 2 strLogonType = "Interactive"Case 3 strLogonType = "Network"Case 4 strLogonType = "Batch"Case 5 strLogonType = "Service"Case 6 strLogonType = "Proxy"Case 7 strLogonType = "Unlock"Case 8 strLogonType = "NetworkClearText"Case 9 strLogonType = "NewCredentials"Case 10 strLogonType = "RemoteInteractive(TS)"Case 11 strLogonType = "CachedInteractive"Case 12 strLogonType = "CachedRemoteInteractive"Case 13 strLogonType = "CachedUnlock"
End Select
7878
strQueryLoggedOnUser = "Select * " & _"FROM Win32_LoggedOnUser"
Set objLoggedOnUser = objService.ExecQuery(strQueryLoggedOnUser)
For Each u in objLoggedOnUserIf instr(u.Dependent, LogonId) Then
arrAntecedent = Split(u.Antecedent,".")Wscript.Echo Date & "," & Time & "," & _
LogonId & "," & arrAntecedent(2) & "," & strLogonTypeExit For
End IfNext
Loop
7979
一時的な監視例④
Set objLocator = CreateObject("WbemScripting.SWbemLocator")Set objService = objLocator.ConnectServer("demo2008", "ROOT¥CIMV2", "", "")
Wscript.Echo "接続が完了しました"strQueryCreate = "Select * " & _
"FROM __InstanceDeletionEvent WITHIN 5 " & _"WHERE TargetInstance ISA 'Win32_LogonSession' "
Set objEventsDeletion = objService.ExecNotificationQuery(strQueryCreate)
DoSet DeletionEvent = objEventsDeletion.NexteventLogonId= DeletionEvent.TargetInstance.LogonIDLogonType = DeletionEvent.TargetInstance.LogonType
Wscript.Echo Date & "," & Time & "," & LogonId & "," & strLogonType
Loop
__InstanceDeletionEventによるユーザーログオフの監視
セッションの削除はログオフしてから1分程度を要する
8080
③’と④を組み合わせると
ログDB
ログオンID をキーにしてログデータベースに書き込むことでサーバーを使用したユーザーの履歴を管理できる
ServerName LogonID LogonType LogonDateTime LogoffDateTime Domain UserID
demo2008 5443965 Interactive 2009/03/01 10:00:00
2009/03/01 12:15:30
dom anno
demo2008 6220879 TS 2009/03/01 12:00:00
2009/03/01 13:10:01
dom administrator
8181
スクリプトをサービス化
8282
ベントコンシューマ
• ActiveScriptEventConsumer– イベントが発生したらスクリプトを実行
• LogFileEventConsumer– ベントが発生したらテキストフゔルに書き込み
• NTEventLogEventConsumer– ベントが発生したらベント
• SMTPEventConsumer– ベントが発生したらメール送信
• CommandLineEventConsumer– ベントが発生したらコマンドを実行
イベントコンシューマとは….
システムで発生したイベントをトリガーに特定のアクションを実行する機構
システムに登録されるのでログオンする必要が無いただし、監視できるのはローカルコンピュータ
8383
MOFフゔルによる永続的監視
#pragma namespace("¥¥¥¥.¥¥root¥¥subscription")
instance of ActiveScriptEventConsumer as $Cons{
Name = "LogonUserLogging";ScriptingEngine = "VBScript";ScriptFileName = "c:¥¥tmp¥¥demoscript¥¥wmisample08.vbs";
};
instance of __EventFilter as $Filt{
Name = "LogonUser";Query = "SELECT * FROM __InstanceCreationEvent WITHIN 5 "
"WHERE TargetInstance ISA ¥"Win32_LogonSession¥" ";QueryLanguage = "WQL";EventNamespace = "root¥¥cimv2";
};
instance of __FilterToConsumerBinding{
Filter = $Filt;Consumer = $Cons;
};
ActiveScriptEventConsumerによるmofフゔルの例
8484
コマンドプロンプトからコンパルC:¥>mofcomp.exe <mofフゔル名>
拡張子mofで保存
8585
呼び出されるスクリプト(③‘’)Set objLocator = CreateObject("WbemScripting.SWbemLocator")Set objService = objLocator.ConnectServer("demo2008", "ROOT¥CIMV2", "", "")Set objFS = CreateObject("Scripting.FileSystemObject")
Wscript.Echo "接続が完了しました"strQueryCreate = "Select * FROM __InstanceCreationEvent WITHIN 5 " & _
"WHERE TargetInstance ISA 'Win32_LogonSession' ‚Set objEventsCreation = objService.ExecNotificationQuery(strQueryCreate)Do
Set CreationEvent = objEventsCreation.NexteventLogonId= CreationEventTargetEvvent.TargetInstance.LogonIDLogonType = CreationEventTargetEvent.TargetInstance.LogonTypeSelect Case LogonType
Case 0 strLogonType = "System"Case 2 strLogonType = "Interactive"Case 3 strLogonType = "Network"Case 4 strLogonType = "Batch"Case 5 strLogonType = "Service"Case 6 strLogonType = "Proxy"Case 7 strLogonType = "Unlock"Case 8 strLogonType = "NetworkClearText"Case 9 strLogonType = "NewCredentials"Case 10 strLogonType = "RemoteInteractive(TS)"Case 11 strLogonType = "CachedInteractive"Case 12 strLogonType = "CachedRemoteInteractive"Case 13 strLogonType = "CachedUnlock"
End Select
8686
strQueryLoggedOnUser = "Select * FROM Win32_LoggedOnUser"Set objLoggedOnUser = objService.ExecQuery(strQueryLoggedOnUser)
For Each u in objLoggedOnUserIf instr(u.Dependent, LogonId) ThenarrAntecedent = Split(u.Antecedent,".")Set objLogFile = objFS.OpenTextFile("C:¥tmp¥demoscript¥userlog.txt",8,True)objLogFile.WriteLine Date & "," & Time & "," & LogonId & "," & _
arrAntecedent(2) & "," & strLogonTypeobjLogFile.CloseWscript.Echo Date & "," & Time & "," & _
LogonId & "," & arrAntecedent(2) & "," & strLogonTypeExit For
End IfNext
Loop
8787
リソース
MSDN - Windows Management Instrumentationhttp://msdn.microsoft.com/en-us/library/aa394582(VS.85).aspx
Script Guy!http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/default.mspx
8888