Следуя этому вопросу (Невозможно установить режим обслуживания SCOM удаленно)
Мы пытаемся перевести серверы в режим обслуживания удаленно. Я использую функции SCOM, созданные Томом Шумахером (https://gallery.technet.microsoft.com/scriptcenter/Put-server-in-Mainmaintenance-0a23e1fe)
Я использую PSSession, чтобы попытаться перевести сервер в режим обслуживания с сервера, отличного от сервера SCOM:
. 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. Аргумент нулевой или пустой. Укажите аргумент, который не может быть пустым или пустым, а затем попробуйте выполнить команду еще раз. + CategoryInfo: InvalidData: (:) [Get-SCOMClassInstance], ParameterBindingValidationException + FullyQualifiedErrorId: ParameterArgumentValidationError, Microsoft.SystemCenter.OperationsManagerV10.Commands.GetSCClassInstanceCommand + PSComputerName:
Термин «Обслуживание Start-server» не распознается как имя командлета, функции, файла сценария или работающей программы. Проверьте написание имени или, если был включен путь, убедитесь, что путь правильный, и повторите попытку. + CategoryInfo: ObjectNotFound: (Start-serverScommainamination: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException + PSComputerName: scomserver
Вот копия функции, используемой для справки:
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"