tôi biết đó là một chút muộn để trả lời câu hỏi này, nhưng tôi muốn cung cấp cho nó một thử chỉ trong trường hợp bất kỳ một giải pháp cần chi tiết hơn. Vì vậy, ở đây nó đi.
Tôi tạo ra một chức năng hàng loạt mà sẽ thực hiện ps kịch bản cho bạn và trả về một giá trị, một cái gì đó như thế này:
:: 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
Bây giờ, làm ví dụ để sử dụng nó:
set psCmd="&{ Write-Host 'You got it';}"
call :RunPS %psCmd% RetValue
echo %RetValue%
chí này hiển thị trên màn hình điều khiển Bạn đã nhận được nó
Như một ví dụ phức tạp hơn, tôi sẽ thêm:
Giả sử rằng chúng ta muốn kiểm tra xem một máy ảo là lên hoặc xuống, có nghĩa là nếu nó được hỗ trợ hoặc tắt, vì vậy chúng ta có thể làm như sau:
: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
Bây giờ, làm thế nào để sử dụng: CheckMachineUpOrDown chức năng?
chỉ cần làm theo ví dụ này:
set Workstation=MyVMName
call :CheckMachineUpOrDown VMStatus %Workstation%
echo %VMStatus%
này sẽ hiển thị lên nếu VM được Powered On hoặc xuống nếu máy đang Tắt.
Hy vọng điều này hữu ích.
Cảm ơn
Giải pháp tốt. Tôi nghi ngờ có bất kỳ khác mà là như vậy dễ dàng và đơn giản. – stej
Cảm ơn bạn đã phản hồi, nhưng tôi không nghĩ rằng những điều trên sẽ hiệu quả? Điều tôi mong đợi xảy ra trong trường hợp này là giá trị của biến môi trường 'd' sẽ là 'powershell -noprofile' & {get-date} ''. IE: Nội dung của phía bên phải của biểu thức không được đánh giá. –
@Nicholas, bạn nói đúng. Tôi đã thử nó ngay bây giờ và thực sự chỉ có chuỗi được lưu trữ trong biến. – stej