can I put PowerCLI "code" (Cmdlets, etc.) inside a PS1 file, along with other PowerShell code, and execute it like a normal PS1?
Sim. Mas se você quiser que ele funcione como esperado (como quando você usa o console PowerCLI), será necessário inicializar o ambiente. Você pode ver como isso é feito examinando o atalho "VMware vSphere PowerCLI.lnk", o destino é:
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\""
Quebrando isso:
-
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
O binário do Powershell
-
-psc "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\vim.psc1"
Abreviação de -PSConsole
, que carrega o console vim.psc1 especificado.
-
-noe
Abreviação de -NoExit
, não feche após executar os comandos de inicialização.
-
-c ". \"C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1\""
Abreviada para -Command
, qual ponto origina o arquivo [note path is escape-quote] Initialize-PowerCLIEnvironment.ps1 na sessão.
Você pode condensar isso e colocar a inicialização em qualquer arquivo .ps1. Este exemplo de stub deve ajudá-lo a começar.
# 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
...