设为首页 收藏本站
查看: 1595|回复: 0

SCOM PowerShell 命令使用指南 - 11 (Misc.)

[复制链接]

尚未签到

发表于 2018-9-3 09:21:26 | 显示全部楼层 |阅读模式
  在说完并不让人觉得轻松的名词部分是Override的命令之后,这周要介绍的几个名词都和系统管理员的日常工作有很大关系,同时也是SCOM中比较基础的几个概念。
  首当其冲的是名词部分是Alert的命令。我们使用SCOM的目的就是当被监视的系统出现故障时,SCOM能及时发出警报。在SCOM的PowerShell控制台中可以使用Get-Alert来获得所有报警信息,这里需要注意的是Get-Alert在不带参数的情况下会返回所有Alert,因此如果我们想要看到和图形界面一致的警报数量时,需要使用以下命令:
  Get-Alert -Criteria "ResolutionState=0" | FT Name,ResolutionState –A

  这里ResolutionState的数字0代表New状态,当然这个状态是可以通过图形界面来进行调整的。

  现在假设我们已经解决完警报中提示的问题后,接下来就可以使用Resolve-Alert来关闭警报。而如果需要关闭特定的活动警报则可以在Get-Alert的搜索条件中指定Name和ResolutionState的值。示例如下:
  >Get-Alert -Criteria "Name='Could not determine the FSMO role holder.' And ResolutionState=0" | Resolve-Alert -Comment "Resolved Alert" –Verbose

  接下来的一个问题情境就是,当一个问题反复出现后,系统管理员希望了解问题出现的频率及时间。如果上级需要了解系统管理员对问题的处理时间的话,那我们也要想办法提交。每次通过图形界面的HealthExplorer去查警报的历史记录的话,其实是非常耗时以及单调的工作。我们完全可以使用Get-AlertHistory命令来获得相关信息。下面就是一个示例命令:
  Get-Alert -Criteria "Name='Could not determine the FSMO role holder.'" | Get-AlertHistory | FT ResolutionState,Time*

  由于演示环境中的ResolutionState只定义了两种状态,其实完全可以通过之前的图形界面来定义多种状态,比如10 - Tier 1 Resolving, 30 - Tier 2 Resolving, 40 - Tier 2 Resolved等等,可以帮助我们分析问题的解决时间,团队之间的沟通效率等等。
  接下来的两个命令则和我们之前提到的Connected Management Group有关,也就是在管理组之间转发警报。首先是Get-AlertDestination,该命令主要使用获得警报是通过哪个Connector进行转发的。

  我们也可以使用Set-AlertDestination来设置Alert的转发目的地,下面的演示中使用的是SCOM自带的Connector,如果各位在环境中配置了其他Connector,那也可以将Alert转发到其他Connector。

  接下来,我们要关注到到的是名词部分是Task的命令。SCOM中的Task的种类可以说是非常丰富,而图形界面中的Task Status节点,则为我们提供了观察Task执行状态的一个非常好的视图。而在命令行下,Get-Task也为我们实现了相同的功能。默认情况下Get-Task不指定任何参数就能获得相关的任务信息,假设我们要获得特定Task的信息,那么同样可以使用Where-Object来对默认的输出进行过滤,以下便是一个例子:

  当然,这里仅仅只是根据我自己测试环境的情况所举的一个例子,各位可以根据自己的情况来指定,总的来说使用Where-Object来进行筛选并不是很复杂。接下来看看如何使用Start-Task启动一项Task。这里以自定义的任务GetVersion来说明。首先我们可以在Authoring界面中自定义任务GetVersion。接着使用Get-Task找到GetVersion并将找到的对象存入变量$task。随后需要准备Start-Task所需的另一项参数-TargetMonitoringObject, 可以使用Get-MonitoringObject来获得。最终在PowerShell下使用Start-Task的步骤如下:
  $task = Get-Task -Criteria "DisplayName='GetVersion'"
  $mc = Get-MonitoringClass -Name Microsoft.Windows.Computer
  $mo = Get-MonitoringObject -MonitoringClass $mc | ?{$_.DisplayName -match "CNSHSQLSVR01"}
  Start-Task -Task $task -TargetMonitoringObject $mo
  命令的运行结果如下:

  当然,刚才命令的运行结果也可以用Get-TaskResult来提取,使用起来也很简单。先将刚才的运行结果保存到变量$taskResult中,然后使用Get-TaskResult并指定ID参数即可:Get-TaskResult -Id $taskResult.Id。
  接下来我们来看一下名词部分是MaintenanceWindow的命令。首先维护窗口这个概念对系统工程师来说并不陌生,为了满足SLA中所规定的服务运行时间,我们必须在指定的时间段内完成系统的维护工作。而在维护窗口内由SCOM所产生的各种警报也应被视为正常现象。当然更好的方法是告诉SCOM,在维护窗口内暂停产生警报。在一个大型环境中,设置维护窗口也是需要一定技巧的,比如先设置前端网页服务器,在设置后端数据库服务器。虽然图形界面也能进行批量设置,但是可能不太满足我们的需要,因此我们可以使用名词部分是MaintenanceWindow的命令来完成设置维护窗口的任务。
  首先我们需要使用New-MaintenanceWindow来设置一个维护窗口。维护窗口有四个组成要素,开始时间,结束时间,维护原因,以及注释。具体的命令如下:
  [DateTime] $starttime = Get-Date
  $starttime = $starttime.ToUniversalTime()
  [DateTime] $endtime= "07/09/2011 15:30:00"
  $endtime = $endtime.ToUniversalTime()
  $mw = new-maintenancewindow -starttime $starttime -endtime $endtime -Reason PlannedOther -comment "Security Patch of July" -MonitoringObject $mo
  这里需要注意的是Reason并不是随意指定的字符串,而是一些特定值,各位可以查看New-MaintenanceWindow的帮助信息来查看可用值。而$mo则是一组特定的MonitoringObject对象,获得该对象的技巧已经在上次阐述过了,各位不妨回过头去再看看。命令执行完成之后,维护窗口便被打开了,我们可以使用Get-MaintenaceWindow来查看特定对象的维护窗口:Get-MaintenanceWindow -MonitoringObject $mo

  接下来,如果我们需要调整维护窗口的时间的话,则可以使用Set-MaintenanceWindow来完成,具体命令如下:
  Set-MaintenanceWindow -MonitoringObject $mo -EndTime $(Get-Date)
  接着再来看下SCOM中的另一项重要功能,警报订阅。警报订阅也是大家很容易理解的一项功能,主要帮助我们通过各种渠道来了解SCOM监视的各种系统的状态,从而防止监控空白。
  在SCOM为我们提供的命令中警报订阅这项功能主要通过名词部分包含Notification的命令来实现。接下来,还是先来看下如何使用Get-NotificationSubscription来获得警报订阅列表,该命令可以不加参数运行,也可以通过指定Id参数来获得特定的订阅的警报。当然我相信绝大多数朋友肯定会先不加参数执行一下命令,因为代表Id的GUID并不是那么好记,这一点我们可以从命令的运行结果中就可以知道:

  接下来,我们可以将Get-NotificationSubscription和Enable-NotificationSubscription及Disable-NotificationSubscription命令来启用或者禁用警报订阅。

  最后来看下剩下的三个命令:Get-NotificationAction, Get-NotificationEndpoint以及Get-NotificationRecipient。这三个命令很简单,第一个命令管理界面中的Subscription节点,第二个命令对应Channels节点,第三个命令对应Subscribers节点。三个命令的主要作用就是列出这三个节点下的对象。好吧,看到这里大家肯定注意到了,这些名词没有对应的动词Set来配合,相信大家会有点失望。这里我就试试看能不能通过PowerShell新建一个NotificationRecipient来说明。
  首先我们来看下Get-NotificationRecipient返回哪些信息:

  接着给出我查阅SDK和搜索之后得到结果:
  $notificationRecipient = New-Object Microsoft.EnterpriseManagement.Administration.NotificationRecipient "CORP\Anna"
  $notificationRecipientDevice = New-Object Microsoft.EnterpriseManagement.Administration.NotificationRecipientDevice "Smtp","anna@nwtrader.com"
  $notificationRecipientDevice.Name = "anna@nwtrader.com"
  $notificationRecipient.Devices.Add($notificationRecipientDevice)
  $(Get-ManagementGroupConnection).ManagementGroup.InsertNotificationRecipient($notificationRecipient)
  首先利用New-Object新建NotificationRecipient对象,并传递“Corp\Anna”给构造器作为Name参数,接着新建NotificationRecipientDevice对象,这里对象的设备是邮件,因此构造器第一个参数Protocol是Smtp,第二个参数是邮件地址。接着将得到的notificationRecipientDevice对象通过Add方法添加到$notificationRecipient.Devices属性。这里使用了Add方法,是需要注意到的地方。最后我们调用ManagementGroup的InsertNotificationRecipient方法递交修改。随后我们就可以用Get-NotificationRecipient查看下修改有没有成功:

  最后,我们来看看SCOM PowerShell命令中的最后一部分。首先来看看名词部分包含User的命令。命令一共两个,Get-UserRole和Add-UserToUserRole。这两个命令对应图形界面中Administration中Security节点下的User Roles节点。
  首先我们来看看Get-UserRole的运行结果。大家可以看到命令的使用非常简单,命令会显示SCOM安装完毕后内置的一些安全角色。接下来假设我们要将一个安全主体添加到安全角色中,比如将用户Anna添加到Operations Manager Operators中,那么就应当使用Add-UserToUserRole命令。

  命令的使用其实非常简单,第一步当然是得到需要操作的UserRole对象,第二步通过管道将用户账号添加到UserRole中的。因此命令如下:
  Get-UserRole | ?{$_.DisplayName -eq "Operations Manager Operators"} | Add-UserToUserRole -User "corp\anna"
  在命令的返回对象中,我们也可以看到刚才的用户账号已经被成功的添加到Operations Manager Operators这个Role中。

  而接下来要介绍的命令则是Get-RunAsAccount,命令的作用也非常简单,返回Administration下Run As Configuration下的Accounts信息。当然大家也看到了RunAsAccount没有动词Set或者Add与之搭配,这也不难理解,可能产品组当时做决策的时候考虑到这一块用PowerShell进行大批量操作的情况比较小,因此没有去实现。这里我也不再展开了,有兴趣的朋友不妨可以去SDK中找找有用的信息。
  而Get-Event和Get-Diagnostic则分别用来显示MonitoringObject中底层对象的一些信息,这连个对象的也没提供其它动词与之搭配,因此我们也只能看看作罢:

  至此,所有SCOM 2007中的PowerShell命令就介绍完毕了,总的来说有喜有忧吧,好在SCOM 2012的测试版已经发布了,PowerShell这一块的命令有所改进,各位可以去看下产品组给我们带来了哪些新功能。
  已发表 2011年8月23日 22:54 作者 ghjconan
  归档在:SCOM, PowerShell, OpsMgr


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-561873-1-1.html 上篇帖子: UI-to-PowerShell Mapping 下篇帖子: Powershell 管理用户及组
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表