我正在編寫一個管理腳本,它將:
- 從 vSphere 中刪除虛擬機
- 刪除虛擬機器的 DNS 項目
- 使用我們的 Windows DHCP 伺服器釋放虛擬機器的 IP 位址
我可以透過 vSphere 的 PowerCLI 完成第一項,並且可以透過 PowerShell“” 完成最後兩項Cmdlets
。此外,我可以將它們放入Cmdlets
一個*.ps1
檔案中並從 shell 執行該檔案。
初步研究表明,PowerCLI 只是包裝/擴展了 PowerShell,並且基本上僅由其自己的以 vSphere 為中心的Cmdlets
.所以我想知道:我可以將 PowerCLI“代碼”(Cmdlets
等)與其他 PowerShell 代碼一起放入 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
,其中的點將 [注意路徑是轉義引用的] 檔案 Initialize-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
...