我们正在寻找一种方法来获取SCOM中最新的已知(扫描/收集/ ...)登录用户(1801)。对于SCOM中的每个设备,我们很快就想看看谁是最新登录的用户。即使服务器不再可用,我们也想知道在崩溃或连接丢失之前登录的是谁。
我们不想要的:
在我看来,它应该看起来像计算机/设备类的属性,但没有历史或配置重新加载。或者没有预定义错误/警告/ ...状态的监视器,但是自定义文本状态(=登录用户)。
我们还通过OperationsManager(DW)数据库上的SQL查询在其他(自定义)应用程序中使用SCOM数据。如果数据在数据库中可用,则使用SQL查询导出数据没有问题。如果我们在SQL查询中获取信息,也可以搜索特定用户登录的设备。
该方法不应仅限于登录用户。解决方案也可以应用于其他类型的数据。
有人知道如何做到这一点吗?
答案 0 :(得分:0)
好的,所以,我知道你已经对SCOM有了深入的了解,所以如果你不介意的话,我想给你一个钓竿,而不是鱼。
一般的想法是将数据收集到文件,将文件上传到SCOM,解析并插入到DB(可能的DW DB)中。要做到这一点:
[InputStream(0)]
public void OnNewDataItems(DataItemBase[] dataItems, bool logicalSet, DataItemAcknowledgementCallback acknowledgedCallback, object acknowledgedState, DataItemProcessingCompleteCallback completionCallback, object completionState)
{
if (shutdown)
return;
try
{
// collect data
// Create JSON, save into temp file and upload it to SCOM
var TempFolder = Environment.ExpandEnvironmentVariables("%TEMP%");
char[] pathSeparator = { '\' };
pathReportFileName = TempFolder.TrimEnd(pathSeparator) + "\" + "Report.json";
if (File.Exists(pathReportFileName))
File.Delete(pathReportFileName);
File.WriteAllText(pathReportFileName, JsonConvert.SerializeObject(Results));
// return file name to upload
Dictionary bagItem = new Dictionary();
bagItem.Add("DataGenerated", "OK");
bagItem.Add("ResultPath", pathReportFileName);
Global.logWriteInformation("Returning patching report file at " + pathReportFileName + ".", this);
ModuleHost.PostOutputDataItem(Global.CreatePropertyBag(bagItem), new DataItemAcknowledgementCallback(OnAcknowledgementCallback), pathReportFileName);
}
catch (Exception e)
{
Global.logWriteException("Failed to ...", e, this);
ModuleHost.RequestNextDataItem();
return;
}
}
在你的回调中删除文件并请求下一个
protected void OnAcknowledgementCallback(object state)
{
try
{
Global.logWriteInformation("Patch report inventory file has been sent, deleting.", this);
string sentFileName = (string)state;
File.Delete(sentFileName);
}
catch (Exception e)
{
Global.logWriteException("Failed to delete patch report inventory file.", e, this);
}
finally
{
ModuleHost.RequestNextDataItem();
}
}
然后在您的目标(大约是Windows计算机)上,创建一个写入操作为<WriteAction ID="WA_UploadFile" TypeID="System!System.FileUploadWriteAction" RunAs="System!System.PrivilegedMonitoringAccount">
在Microsoft.SystemCenter.CollectionManagementServer
创建另一个数据源为<DataSource ID="DS_GetFile" TypeID="System!System.FileUploadDataSource" RunAs="System!System.PrivilegedMonitoringAccount">
的接收规则
在接收规则中,我使用自己的WriteActionModuleType工作流程,该工作流程解析上传的文件并将其保存到DW DB中(这正是您的要求)。
NB!产生文件的ReadAction和解析文件的WriteAction都必须支持确认回调,因此它们必须是托管代码,例如。用C#,F#,VB编写,但不是PowerShell。
NB!发送和接收规则都必须具有ConfirmDelivery="true"
属性。
祝你好运 Max V。