Op internet zijn er veel artikelen over hoe je PowerChute Business Edition instelt en hoe je verbinding maakt met VMWare vanuit PowerShell, maar het is moeilijk om alles op één plek te vinden, inclusief de fijne details. En die zijn er zeker.
1. Inleiding
Hoewel we enige relatie hebben met energie, treden er soms problemen op met elektriciteit. Hier komt de UPS in het spel, maar de batterijen gaan helaas ook niet eeuwig mee. Wat te doen? Uitschakelen!
Zolang alle servers fysiek waren, ging het goed, we werden geholpen door PowerChute Business Edition. Gratis, voor 5 servers, wat meer dan genoeg was. Op één machine was de agent geïnstalleerd, de server en de console. Bij het naderen van het einde voerde de agent gewoon een batchbestand uit, waarin shutdown.exe /s /m naar de aangrenzende servers werd gestuurd, en daarna schakelde hij zijn eigen OS uit. Iedereen leeft nog.
Toen kwam het moment virtuele machines.
2. Gegevens en overpeinzingen
Wat hebben we? In feite niets – één fysieke server met Windows Server 2008 R2 en één hypervisor met meerdere virtuele machines, waaronder Windows Server 2019, Windows Server 2003 en CentOS. En daarnaast een UPS – APC Smart-UPS.
We hebben gehoord van NUT, maar we hebben er nog geen tijd voor gehad om het uit te zoeken, we hebben alleen gebruikt wat voorhanden was, namelijk PowerChute Business Edition.
De hypervisor kan zelf zijn virtuele machines afsluiten, het enige wat we moeten doen is hem laten weten dat het tijd is. Er is een nuttige tool genaamd VMWare.PowerCLI, een extensie voor Windows Powershell, waarmee je verbinding kunt maken met de hypervisor en hem kan vertellen wat hij moet weten. Ook hierover zijn er veel artikelen beschikbaar.
3. Proces
De UPS was fysiek aangesloten op de COM-poort van de server 2008, gelukkig was deze beschikbaar. Hoewel dit niet cruciaal is - je kunt ook via een interfaceconverter (MOXA) met elke virtuele Windows-server verbinden. Verder worden alle handelingen uitgevoerd op de machine waaraan de UPS is aangesloten – Windows Server 2008, tenzij anders aangegeven. Daar hebben we de agent van PowerChute Business Edition geïnstalleerd. Hier is het eerste fijne punt: de agentservice moet niet door het systeem worden gestart, maar door een gebruiker, anders kan de agent het cmd-bestand niet uitvoeren.
Vervolgens hebben we .Net Framework 4.7 geïnstalleerd. Hier is een herstart nodig, zelfs als het framework dit niet expliciet vraagt na de installatie, anders gaat het niet verder. Na de installatie kunnen er ook updates komen, die ook geïnstalleerd moeten worden.
Daarna hebben we PowerShell 5.1 geïnstalleerd. Herstarten is ook vereist, zelfs als dit niet gevraagd wordt.
Vervolgens installeren we PowerCLI 11.5. Een vrij recente versie, daarom de eerdere vereisten. Dit kan via het internet, daar zijn veel artikelen over, maar wij hadden het al gedownload, dus we hebben gewoon alle bestanden naar de map Modules gekopieerd.
We hebben gecontroleerd:
Get-Module -ListAvailableOké, we zien dat we hebben geïnstalleerd:
Import-Module VMWare.PowerCLIJa, de Powershell-console is natuurlijk als administrator gestart.
Powershell-instellingen.
- Sta uitvoering van alle scripts toe:
Set-ExecutionPolicy Unrestricted- Of sta alleen het negeren van certificaten voor scripts toe:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned - Sta PowerCLI-verbinding met servers met ongeldig (verlopen) certificaten toe:
Set-PowerCLIConfiguration -InvalidCertificateAction ignore -confirm:$false- Onderdruk de melding van PowerCLI over deelname aan het gebruikerservaringprogramma, anders komen er veel onnodige berichten in het log:
Set-PowerCLIConfiguration -Scope User -ParticipateInCEIP $false- Bewaar de inloggegevens van de gebruiker voor toegang tot de VMWare-host, zodat ze niet expliciet in het script verschijnen:
New-VICredentialStoreItem -Host address -User user -Password 'password'De controle toont wie we hebben opgeslagen:
Get-VICredentialStoreItemWe kunnen ook de verbinding controleren: Connect-VIServer address.
Het script zelf, bijvoorbeeld: we hebben verbonden, hebben uitgezet, en voor de zekerheid weer losgekoppeld, er zijn verschillende opties:
Connect-VIserver -Server $vmhost
Stop-VMHost $vmhost -force -Confirm:$false
Disconnect-VIserver $vmhost -Confirm:$false
4. Default.cmd
Het betreffende batchbestand dat door de APC-agent wordt uitgevoerd. Gelegen in 'C:Program Files[(x86)]APCPowerChute Business Editionagentcmdfiles', en binnenin:
"C:Windowssystem32WindowsPowerShellv1.0powershell.exe" -File "C:…shutdown_hosts.ps1"
Het lijkt erop dat we alles hebben ingesteld en gecontroleerd, we hebben zelfs cmd gestart – het werkt correct, het schakelt uit.
We starten de controle van het batchbestand vanuit de APC-console (er is een knop Test) – het werkt niet.
Daar is hij, dat ongemakkelijke moment, wanneer al het werk voor niets is geweest.
5. Catharsis
We kijken naar de Taakbeheer, zien een flits van cmd, een flits van powershell. We kijken beter naar de details – cmd *32 en, overeenkomstig, powershell *32. We begrijpen dat de agent-service van APC 32-bits is, wat betekent dat deze de bijbehorende console start.
Start powershell x86 als administrator, doorloop de installatie en configuratie van PowerCLI nogmaals vanuit punt 3.
En we wijzigen de aanroepregel van powershell:
"C:Windows<b>SysWOW64</b>WindowsPowerShellv1.0powershell.exe…6. Happy end!
Bron: habr.com
