Я знаю, что уже немного поздно ответить на этот вопрос, но я хотел бы попробовать его на тот случай, если кому-то понадобится более подробное решение. Итак, вот и все.
Я создал пакетную функцию, которая будет выполнять скрипт ps для вас и возвращать значение, что-то вроде этого:
:: A function that would execute powershell script and return a value from it.
:: <PassPSCMD> pass the powreshell command, notice that you need to add any returning value witth Write-Host
:: <RetValue> the returned value
:RunPS <PassPSCMD> <RetValue>
Powershell Set-ExecutionPolicy RemoteSigned -Force
for /F "usebackq tokens=1" %%i in (`Powershell %1`) do set returnValue=%%i
set "%2=%returnValue%"
Goto:eof
:: End of :RunPS function
Теперь, в качестве примера, чтобы использовать его:
set psCmd="&{ Write-Host 'You got it';}"
call :RunPS %psCmd% RetValue
echo %RetValue%
Это будет отображаться на экране консоли. Вы получили
В качестве более сложного примера я бы добавил:
Давайте предположим, что мы хотим проверить, включена ли виртуальная машина или нет, то есть, включена она или выключена, поэтому мы можем сделать следующее:
:CheckMachineUpOrDown <returnResult> <passedMachineName>
set userName=vCenterAdministratorAccount
set passWord=vCenterAdminPW
set vCenterName=vcenter.somedmain.whatever
set psCmd="&{Add-PSSnapin VMware.VimAutomation.Core; Connect-VIServer -server %%vCenterName%% -User %userName% -Password %passWord%; $vmServer = Get-VM %2;Write-Host ($vmServer.PowerState -eq 'PoweredOn')}"
call :RunPS %psCmd% RetValue
if "%RetValue%" EQU "True" (set "%1=Up") else (set "%1=Down")
Goto:eof
:: A function that would execute powershell script and return a value from it.
:: <PassPSCMD> pass the powreshell command, notice that you need to add any returning value witth Write-Host
:: <RetValue> the returned value
:RunPS <PassPSCMD> <RetValue>
Powershell Set-ExecutionPolicy RemoteSigned -Force
for /F "usebackq tokens=1" %%i in (`Powershell %1`) do set returnValue=%%i
set "%2=%returnValue%"
Goto:eof
:: End of :RunPS function
Теперь, как использовать: функцию CheckMachineUpOrDown?
просто следуйте этому примеру:
set Workstation=MyVMName
call :CheckMachineUpOrDown VMStatus %Workstation%
echo %VMStatus%
Отображается «Вверх», если виртуальная машина включена, или «Вниз», если машина выключена.
Надеюсь, это полезно.
Спасибо