私はPowerShellスクリプトを書いています。これは、UPSの障害や停電があった場合に、すべてのVMを別のクラスタの対応するサーバに移動します。Powershell:停電状態で仮想マシンを移動するスクリプトですか?
電力損失が発生した場合、すべてのUPSは、特定のフォルダにログファイルを作成し、私のスクリプトは、UPSの電源が失われたかを検出する必要があります。
スクリプトは5分ごとに実行する必要がありますし、UPS3のケースの電力損失で、バックアップサーバのシャットダウンのみが必要とされています。
私はPowerShellのに対して完全に新たなんだ、ので、任意のヘルプや情報は素晴らしいことです。
これは今では私のコンセプトです:
あなたはもうWhere-Object
を使用してフィルタリングする必要がないことを意味
-File
Get-ChildItem
による返品ファイルのみを、使用
$text1 = "UPS1"
$text2 = "UPS2"
$text3 = "UPS3"
$path = "C:\UPS"
$logfile = "C:\UPS\logs"
$timer = 10000
$date = Get-Date -Format g
$search_results = Get-ChildItem -Path $path | Where-Object { ((!$_.PSIsContainer))}
foreach ($file in $search_results) {
if ($file.Name -contains $text1) {
Get-VM -Location (Get-VMHost ‘ESX01’) | Move-VM -Destination (GetVM-Host ‘ESX03’)
Get-VM -Location (Get-VMHost ‘ESX02’) | Move-VM -Destination (GetVM-Host ‘ESX04’)
Write-Output "VMs moved from 01 to 03 and 02 to 04!" | Out-File $logfile -Append
}
elseif ($file.Name -contains $text2) {
Get-VM -Location (Get-VMHost ‘ESX03’) | Move-VM -Destination (GetVM-Host ‘ESX01’)
Get-VM -Location (Get-VMHost ‘ESX04’) | Move-VM -Destination (GetVM-Host ‘ESX02’)
Write-Output "VMs moved from 03 to 01 and 04 to 02!" | Out-File $logfile -Append
}
elseif ($file.Name -contains $text3) {
$timer.start
Stop-VMGuest -VM "Backup"
Write-Output "UPS3 lost power, shutdown of the backup server initiated!" | Out-File $logfile -Append
}
}
else
Out-File $logfile -InputObject $date
Write-Output "Alle UPS are running!" | Out-File $logfile -Append
-WhatIf
スクリプトに問題がありますか?エラーが出ていますか?あなたは、あなたが問題を抱えていることについて具体的にしたいかもしれません。検索結果はCSVファイルですか、テキストファイルですか? – ShanayL
ご意見ありがとうございます。私はelseifの部分に問題があります。それはどういうわけか... –