2017-07-18 10 views
0

私は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 
+1

スクリプトに問題がありますか?エラーが出ていますか?あなたは、あなたが問題を抱えていることについて具体的にしたいかもしれません。検索結果はCSVファイルですか、テキストファイルですか? – ShanayL

+0

ご意見ありがとうございます。私はelseifの部分に問題があります。それはどういうわけか... –

答えて

1

また、Nameプロパティを使用している場合は、Select-Object -ExpandProperty Nameを使用すると、毎回$file.Nameの代わりに$fileを使用できます。

また代わりに、複数のif/elseSwitch Statementを管理するためのコードより簡単に使用する:私はあなたのGet-VM/Move-VMコマンドをテストすることができていませんでした

$path = "C:\UPS" 
$logfile = "C:\UPS\log.txt" 
$date = Get-Date -Format g 

$files = Get-ChildItem -Path $path -File | Select-Object -ExpandProperty Name 

foreach ($file in $files) { 
    switch -Wildcard ($file) { 
     "*UPS1*" { 
      Get-VM -Location (Get-VMHost "ESX01") | Move-VM -Destination (GetVM-Host "ESX03") 
      Get-VM -Location (Get-VMHost "ESX02") | Move-VM -Destination (GetVM-Host "ESX04") 
      Add-Content $logfile "`n$date - VMs moved from 01 to 03 and 02 to 04!" 
     } 
     "*UPS2*" { 
      Get-VM -Location (Get-VMHost "ESX03") | Move-VM -Destination (GetVM-Host "ESX01") 
      Get-VM -Location (Get-VMHost "ESX04") | Move-VM -Destination (GetVM-Host "ESX02") 
      Add-Content $logfile "`n$date - VMs moved from 03 to 01 and 04 to 02!" 
     } 
     "*UPS3*" { 
      Stop-VMGuest -VM "Backup" 
      Add-Content $logfile "`n$date - UPS3 lost power, shutdown of the backup server initiated!" 
     } 
     default { 
      Add-Content $logfile "`n$date - All UPS are running!" 
     } 
    } 
} 

、私はVMware環境を持っていないとして、私は彼らが正常に動作すると仮定しています。

関連する問題