Je pense que peu d'entre vous le savent mais il est désormais possible d'utiliser les librairires .NET dans nos scripts AutoIt.
L'UDF CLR est en développement mais fonctionnel.
Je ne souhaite l’utiliser pour l'instant que pour remplacer l’utilisation de powershell.exe
Cela permet également d'améliorer la vitesse d'exécution, de ne pas avoir à relancer une session powershell à chaque fois et surtout de pouvoir conserver les connexions et valeurs de variables.
En anglais : https://audministrator.wordpress.com/20 ... framework/
Le sujet sur le forum officiel : https://www.autoitscript.com/forum/topi ... -framework
Pour l'instant j'arrive à lancer une commande de base, la stocker dans une variable que je peux récupérer plus tard.
Petit problème, lorsque j'utilise la sortie console ($PSOUT_CONSOLE), si la sortie est nulle, le fichier de sortie qui me sert à lire la valeur de sortie est nulle. Et pour je ne sais quelle raison, il ne peut être supprimé.
Vous pouvez tester en supprimant le paramètre $PSOUT_NULL de mes commandes Run_PSHost()
Gros problème, je crois comprendre que l'on peut utiliser les modules installés dans Powershell. Mais cela ne fonctionne pas.
J'ai testé avec les modules VMware.VimAutomation.Core et VMware.VimAutomation.HorizonView
Je souhaiterais en effet, pouvoir établir une connexion à un serveur VI ou Horizon et pouvoir réutiliser cette connexion plus tard dans mon script.
Si l'un d'entre vous a réussi, je serais très heureux d'avoir son aide.

Voici le script que j'ai créé et qui devrait me servir dans mes futurs développements :
#Region Wrapper
#AutoIt3Wrapper_UseX64=n
;~ #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
;~ #Autoit3Wrapper_Testing=y
;~ #AutoIt3Wrapper_Run_Debug_Mode=
#EndRegion Wrapper
#Region Includes
#include <CLR.au3>
#include <File.au3>
#include <Misc.au3>
#EndRegion Includes
#Region Variables
Global Const $g_sTitleApp = ''
Global $g_pObjectPS = 0
Global Const $PSOUT_CONSOLE = 0
Global Const $PSOUT_GRID = 1
Global Const $PSOUT_PRINTER = 2
Global Const $PSOUT_FILE = 3
Global Const $PSOUT_NULL = 4
#EndRegion Variables
;#RequireAdmin
Test()
Func Test()
Local $sRet = ''
Init_PSHost()
Run_PSHost('$out = $PSVersionTable', $PSOUT_NULL)
Run_PSHost('$out += "`rTexte supplémentaire"',$PSOUT_NULL)
Run_PSHost('$out')
ConsoleWrite('END PROCESS' & @CRLF)
Sleep(2000)
EndFunc ;==>Test
Func Init_PSHost()
Local $oAssembly = _CLR_LoadLibrary("System.Management.Automation")
ConsoleWrite("!$oAssembly: " & IsObj($oAssembly) & @CRLF)
; Create Object
Local $pAssemblyType = 0
$oAssembly.GetType_2("System.Management.Automation.PowerShell", $pAssemblyType)
ConsoleWrite("$pAssemblyType = " & Ptr($pAssemblyType) & @CRLF)
Local $oActivatorType = ObjCreateInterface($pAssemblyType, $sIID_IType, $sTag_IType)
ConsoleWrite("IsObj( $oAssemblyType ) = " & IsObj($oActivatorType) & @TAB & @CRLF)
; Create Object
$oActivatorType.InvokeMember_3("Create", 0x158, 0, 0, 0, $g_pObjectPS)
ConsoleWrite("IsObject: " & IsObj($g_pObjectPS) & @TAB & "$pObject: " & ObjName($g_pObjectPS) & @CRLF)
EndFunc ;==>Init_PSHost
Func Run_PSHost($PSScript, $iOutput = $PSOUT_CONSOLE, $sFileOutput = '')
Local $objAsync
Local $sOutput = ''
If $sFileOutput = '' Then $sFileOutput = _TempFile()
; Script
$g_pObjectPS.AddScript($PSScript)
ConsoleWrite('Commande : ' & $PSScript & @CRLF)
; Output
Switch $iOutput
Case $PSOUT_CONSOLE
;~ $g_pObjectPS.AddCommand("Out-Host")
;~ $g_pObjectPS.AddCommand("Out-String")
;~ $g_pObjectPS.AddCommand("Write-Host")
;~ Msgbox(16,"Error","This Output method '0' is not working yet :-( " & @CRLF & "choose another one")
;~ Exit
$g_pObjectPS.AddCommand("Out-File")
ConsoleWrite('File : ' & $sFileOutput & @CRLF)
$g_pObjectPS.AddArgument($sFileOutput)
Case $PSOUT_GRID
$g_pObjectPS.AddCommand("Out-GridView")
Case $PSOUT_PRINTER
$g_pObjectPS.AddCommand("Out-Printer")
Case $PSOUT_FILE
$g_pObjectPS.AddCommand("Out-File")
ConsoleWrite('File : ' & $sFileOutput & @CRLF)
$g_pObjectPS.AddArgument($sFileOutput)
Case $PSOUT_NULL
$g_pObjectPS.AddCommand("Out-Null")
Case Else
MsgBox($MB_SYSTEMMODAL + $MB_ICONERROR, "PSHost", "Wrong Output Choice ?")
Return SetError(1)
EndSwitch
$objAsync = $g_pObjectPS.BeginInvoke()
ConsoleWrite("$objAsync " & IsObj($objAsync & @TAB & "$pObject: " & ObjName($objAsync)) & @CRLF)
While $objAsync.IsCompleted = False
;~ ConsoleWrite($objAsync.IsCompleted & @CRLF)
ContinueLoop
WEnd
Local $objPsCollection = $g_pObjectPS.EndInvoke($objAsync)
Switch $iOutput
Case $PSOUT_CONSOLE
;~ ConsoleWrite( $objPsCollection & @CRLF)
;~ MsgBox(16,"PSHost","Output To Console is not working yet :-( ?" & @CRLF & @CRLF & " Best make a different OUTPUT option.")
Sleep(100)
$sOutput = FileRead($sFileOutput)
Sleep(100)
ConsoleWrite($sOutput & @CRLF)
FileDelete($sFileOutput)
Return $sOutput
Case $PSOUT_GRID
Sleep(10000)
;~ WinWaitClose("")
Case $PSOUT_FILE
Return $sFileOutput
EndSwitch
EndFunc ;==>Run_PSHost
#AutoIt3Wrapper_UseX64=n
;~ #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
;~ #Autoit3Wrapper_Testing=y
;~ #AutoIt3Wrapper_Run_Debug_Mode=
#EndRegion Wrapper
#Region Includes
#include <CLR.au3>
#include <File.au3>
#include <Misc.au3>
#EndRegion Includes
#Region Variables
Global Const $g_sTitleApp = ''
Global $g_pObjectPS = 0
Global Const $PSOUT_CONSOLE = 0
Global Const $PSOUT_GRID = 1
Global Const $PSOUT_PRINTER = 2
Global Const $PSOUT_FILE = 3
Global Const $PSOUT_NULL = 4
#EndRegion Variables
;#RequireAdmin
Test()
Func Test()
Local $sRet = ''
Init_PSHost()
Run_PSHost('$out = $PSVersionTable', $PSOUT_NULL)
Run_PSHost('$out += "`rTexte supplémentaire"',$PSOUT_NULL)
Run_PSHost('$out')
ConsoleWrite('END PROCESS' & @CRLF)
Sleep(2000)
EndFunc ;==>Test
Func Init_PSHost()
Local $oAssembly = _CLR_LoadLibrary("System.Management.Automation")
ConsoleWrite("!$oAssembly: " & IsObj($oAssembly) & @CRLF)
; Create Object
Local $pAssemblyType = 0
$oAssembly.GetType_2("System.Management.Automation.PowerShell", $pAssemblyType)
ConsoleWrite("$pAssemblyType = " & Ptr($pAssemblyType) & @CRLF)
Local $oActivatorType = ObjCreateInterface($pAssemblyType, $sIID_IType, $sTag_IType)
ConsoleWrite("IsObj( $oAssemblyType ) = " & IsObj($oActivatorType) & @TAB & @CRLF)
; Create Object
$oActivatorType.InvokeMember_3("Create", 0x158, 0, 0, 0, $g_pObjectPS)
ConsoleWrite("IsObject: " & IsObj($g_pObjectPS) & @TAB & "$pObject: " & ObjName($g_pObjectPS) & @CRLF)
EndFunc ;==>Init_PSHost
Func Run_PSHost($PSScript, $iOutput = $PSOUT_CONSOLE, $sFileOutput = '')
Local $objAsync
Local $sOutput = ''
If $sFileOutput = '' Then $sFileOutput = _TempFile()
; Script
$g_pObjectPS.AddScript($PSScript)
ConsoleWrite('Commande : ' & $PSScript & @CRLF)
; Output
Switch $iOutput
Case $PSOUT_CONSOLE
;~ $g_pObjectPS.AddCommand("Out-Host")
;~ $g_pObjectPS.AddCommand("Out-String")
;~ $g_pObjectPS.AddCommand("Write-Host")
;~ Msgbox(16,"Error","This Output method '0' is not working yet :-( " & @CRLF & "choose another one")
;~ Exit
$g_pObjectPS.AddCommand("Out-File")
ConsoleWrite('File : ' & $sFileOutput & @CRLF)
$g_pObjectPS.AddArgument($sFileOutput)
Case $PSOUT_GRID
$g_pObjectPS.AddCommand("Out-GridView")
Case $PSOUT_PRINTER
$g_pObjectPS.AddCommand("Out-Printer")
Case $PSOUT_FILE
$g_pObjectPS.AddCommand("Out-File")
ConsoleWrite('File : ' & $sFileOutput & @CRLF)
$g_pObjectPS.AddArgument($sFileOutput)
Case $PSOUT_NULL
$g_pObjectPS.AddCommand("Out-Null")
Case Else
MsgBox($MB_SYSTEMMODAL + $MB_ICONERROR, "PSHost", "Wrong Output Choice ?")
Return SetError(1)
EndSwitch
$objAsync = $g_pObjectPS.BeginInvoke()
ConsoleWrite("$objAsync " & IsObj($objAsync & @TAB & "$pObject: " & ObjName($objAsync)) & @CRLF)
While $objAsync.IsCompleted = False
;~ ConsoleWrite($objAsync.IsCompleted & @CRLF)
ContinueLoop
WEnd
Local $objPsCollection = $g_pObjectPS.EndInvoke($objAsync)
Switch $iOutput
Case $PSOUT_CONSOLE
;~ ConsoleWrite( $objPsCollection & @CRLF)
;~ MsgBox(16,"PSHost","Output To Console is not working yet :-( ?" & @CRLF & @CRLF & " Best make a different OUTPUT option.")
Sleep(100)
$sOutput = FileRead($sFileOutput)
Sleep(100)
ConsoleWrite($sOutput & @CRLF)
FileDelete($sFileOutput)
Return $sOutput
Case $PSOUT_GRID
Sleep(10000)
;~ WinWaitClose("")
Case $PSOUT_FILE
Return $sFileOutput
EndSwitch
EndFunc ;==>Run_PSHost
Et pour la petite histoire, j'avais trouvé un ActiveX (développé par SAPIEN) qui aurait pu m'aider dans ma tâche mais impossible d'enregistrer la dll.

Script : https://audministrator.wordpress.com/20 ... om-object/
Téléchargement : http://www.sapien.com/downloads# (Free Components)