は、我々がリモートでメンテナンスモードにサーバを置くしようとしているこの質問(Cannot set SCOM maintenance mode remotely)は、SCOMメンテナンスモードをリモート(その2)
からフォローアップを設定することはできません。私はトム・シューマッハが作成したSCOM機能を使用しています(https://gallery.technet.microsoft.com/scriptcenter/Put-server-in-Maintenance-0a23e1fe)
私は試してみて、SCOMサーバー以外のサーバーからメンテナンスモードにサーバーを置くためのPSSessionを使用してい:
. 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:(:) [取得-SCOMClassInstance]を、ParameterBindingValidationException + FullyQualifiedErrorId:ParameterArgumentValidationError、Microsoft.SystemCenter.OperationsManagerV10.Commands.GetSCClassInstanceCommand + PSComputerName:
scomserver用語 'スタート・serverScommaintenance' が認識されませんコマンドレット、関数、スクリプトファイル、または実行可能なプログラムの名前として使用します。名前のスペルを確認するか、パスに が含まれている場合は、パスが正しいことを確認してから、もう一度やり直してください。 + CategoryInfo:ObjectNotFound:(スタート-serverScommaintenance: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"
ハイベン私があなたが言及したように引数リストを使用すると、私は別のエラーを受け取ります。 コード: Invoke-Commandコマンド-Session $セッション-Scriptblock $ {関数:-serverScommaintenanceを開始} -ArgumentList -servername TESTSERVER -message "テスト" -maintmodeinMinutes '6' Erorr: Invoke-Commandコマンド:位置パラメータができません引数 'testserver'を受け付けることができます。 – Draaiboek
引数リストを使用すると、関数を編集して位置によってパラメータを許可する必要があることを意味します。それから '-argumentlist" testserver "、" test "、" 6 "を渡します。 – BenH