다음과 같은 관리 스크립트를 작성하려고 합니다.
- vSphere에서 VM 삭제
- VM의 DNS 항목 삭제
- Windows DHCP 서버를 사용하여 VM의 IP 주소를 해제합니다.
vSphere의 PowerCLI를 통해 첫 번째 항목을 수행할 수 있고, PowerShell " "을 통해 마지막 2개 항목을 수행할 수 있습니다 Cmdlets
. 게다가 이것을 파일 Cmdlets
안에 넣고 *.ps1
쉘에서 파일을 실행할 수도 있습니다.
초기 연구에 따르면 PowerCLI는 PowerShell을 래핑/확장하며 기본적으로 자체 vSphere 중심 .NET으로 구성되어 있습니다 Cmdlets
. 그래서 궁금합니다. Cmdlets
다른 PowerShell 코드와 함께 PowerCLI "코드"( 등)를 PS1 파일 안에 넣고 일반 PS1처럼 실행할 수 있습니까?
답변1
PowerCLI "코드"(Cmdlet 등)를 다른 PowerShell 코드와 함께 PS1 파일 안에 넣고 일반 PS1처럼 실행할 수 있나요?
예. 그러나 예상대로 작동하려면(PowerCLI 콘솔을 사용할 때처럼) 환경을 초기화해야 합니다. 바로가기 "VMware vSphere PowerCLI.lnk"를 검토하여 이 작업이 수행되는 방법을 확인할 수 있습니다. 대상은 다음과 같습니다.
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -psc "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" -noe -c ". \"C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1\""
이를 분석하면 다음과 같습니다.
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Powershell 바이너리
-psc "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\vim.psc1"
-PSConsole
지정된 vim.psc1 콘솔을 로드하는 의 약어입니다 .
-noe
의 줄임말로 -NoExit
, 시작 명령을 실행한 후에 닫지 마세요.
-c ". \"C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1\""
의 약어입니다 -Command
. 점은 [참고 경로는 이스케이프 인용됨] 파일 초기화-PowerCLIEnvironment.ps1을 세션에 소싱합니다.
이를 압축하여 초기화를 .ps1 파일에 넣을 수 있습니다. 이 스텁 예제를 시작하면 됩니다.
# This is the main magic.
Add-PSSnapin VMware.VimAutomation.Core
# Dot source the PowerCLI init script
. 'C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1'
# We're up and running with "PowerCLI", do some VM stuff.
Connect-VIServer vcenter-01
Get-VM
...