我正在寻找编写一个管理脚本来执行以下操作:
- 从 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
...