首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法远程设置SCOM维护模式(Part2)

无法远程设置SCOM维护模式(Part2)
EN

Stack Overflow用户
提问于 2016-09-23 21:52:26
回答 1查看 545关注 0票数 0

跟进此问题(Cannot set SCOM maintenance mode remotely)

我们正在尝试远程将服务器设置为维护模式。我正在使用Tom Schumacher (https://gallery.technet.microsoft.com/scriptcenter/Put-server-in-Maintenance-0a23e1fe)创建的SCOM函数。

我正在使用PSSession从一台服务器而不是SCOM服务器尝试将服务器置于维护模式:

代码语言:javascript
运行
复制
. C:\Scripts\Start-serverScommaintenance.ps1
$s = New-PSSession -ComputerName scomserver
Invoke-Command -Session $s -Scriptblock {Import-Module OperationsManager}
Invoke-Command -Session $s -Scriptblock ${function:Start-
serverScommaintenance} 
Invoke-Command -Session $s -Scriptblock {Start-serverScommaintenance -
servername testserver -message "test" -maintmodeinMinutes '6'}

当我到达该函数时,我得到以下错误:

无法验证参数'DisplayName‘上的实参。参数为null或为空。请提供非null或空的参数,然后重试该命令。+ CategoryInfo : InvalidData:(:) Get-SCOMClassInstance,ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,scomserver + PSComputerName

术语“Start-serverScommaintenance”不能识别为cmdlet、函数、脚本文件或可操作程序的名称。请检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试。+ CategoryInfo : ObjectNotFound:(Start-serverScommaintenance:String) [],CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException + PSComputerName : scomserver

下面是正在使用的函数的副本以供参考:

代码语言:javascript
运行
复制
function Start-ServerScommaintenance
{
param([string] $servername = 'yourServerGoeshere',
   [string]$message = "Putting: $servername into Maintenance Mode via     automation",
   [int]$maintModeinMinutes = '60')

$funcName = 'func - Start-ServerScommaintenance:'
if(get-command -Name 'Get-SCOMClassInstance')
{
    $server = (Get-SCOMClassInstance -DisplayName "$servername*") | select -first 1 | select -ExpandProperty Displayname
    $scommanagementServers = (Get-SCOMManagementServer).displayName
    if($scommanagementServers -ccontains $server)
    {
        Write-Warning "$funcname contains a Management Server $server.. You cannot put a management server in Maintenance Mode!!!"
    }
    else
    {
        $time = ((get-date).AddMinutes($maintModeinMinutes))
        $serverClassIds = Get-SCOMClassInstance -DisplayName $server
        foreach($classid in $serverClassIds)
        {
            $server1 = Get-SCOMClassInstance -id ($classid.id) | Where-Object{$_.DisplayName -match $server}
            write-host "$funcName putting " ($server1.id) ' in maintenance Mode Servername -->' ($Server1.DisplayName)
            if(!(Get-SCOMMaintenanceMode -Instance $classid))
            {
                Start-SCOMMaintenanceMode -Instance $server1 -EndTime $time -reason PlannedOther -Comment $message
            }
            else
            { Write-host "$funcname " $classid.id " has already been placed in Maintenance Mode"}
        }
    }
}
    else
    { Write-host "$funcname doesn't have the Operationsmanager module imported for this session"}
}

function Stop-ServerScommaintenance
{
param([string] $servername = 'yourServerGoeshere',
   [string]$message = "Removing Maintenance Mode from: $servername via     automation"
   )
$funcName = 'func - Stop-ServerScommaintenance:'
if(get-command -Name 'Get-SCOMClassInstance')
{
    $server = (Get-SCOMClassInstance -DisplayName "$servername*") | select -    first 1 | select -ExpandProperty Displayname
    $scommanagementServers = (Get-SCOMManagementServer).displayName
    if($scommanagementServers -ccontains $server)
    {
        Write-Warning "$funcname contains a Management Server $server.. You     cannot put a management server in Maintenance Mode!!!"
    }
    else
    {
        $serverClassIds = Get-SCOMClassInstance -DisplayName $server
        foreach($classid in $serverClassIds)
        {
            $server1 = Get-SCOMClassInstance -id ($classid.id) | Where-    Object{$_.DisplayName -match $server}
            write-host "$funcName removing " ($server1.id) ' in maintenance     Mode Servername -->' ($Server1.DisplayName)
            $result = (Get-SCOMClassInstance -id ($classid.id)|Where-Object{$_.Displayname -like $servername}).StopMaintenanceMode((get-date).ToUniversalTime())
        }
    }
}
else
{ Write-host "$funcname doesn't have the Operationsmanager module imported for this session"}
}
#Start-serverScommaintenance -servername Server1 -message "my message" -maintmodeinMinutes '30' 
#Stop-ServerScommaintenance -servername Server1 -message "my message"  
EN

回答 1

Stack Overflow用户

发布于 2016-09-23 23:50:18

我相信当你使用函数的时候,你需要用argumentlist传递东西,而不是用args再次调用函数:

代码语言:javascript
运行
复制
Invoke-Command -Session $s -Scriptblock ${function:Start-serverScommaintenance} -argumentlist #argshere
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39662527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档