Question Script .ps1 en .exe

Plus d'informations
il y a 17 ans 2 mois #3714 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Script .ps1 en .exe
janel écrit:

il faut que PowerShell soit installé sur la machine.

Laurent Dardenne écrit:

c'est à dire intégrer la mécanique de PS dans un exécutable

Cela sous-entendait que les assemblies de powershell soit déployés sur chaque poste.
Effectivement j'aurais du le préciser, c'est évident pour moi mais pas pour tout le monde.
janel écrit:

Sinon, pour répondre à ton besoin d'interface de gestion centralisée,

Il y a aussi le projet Dashboard .
L'auteur a rédigé une doc d'installation en Français.
Thievery écrit:

Ce n'est pas très \"propre\" à mon sens, mon interface graphique se lance bien mais j'ai une petite fenêtre DOS/PowerShell qui s'ouvre en fond ... mais bon, vous allez dire que je pinaille !

Il doit y a voir une solution à ce problème sur le net, c'est un besoin récurrent.

Au vu des informations supplémentaires fournies,l'ébauche de solution proposée n'apporte rien dans ton cas. De plus tu sembles avoir une hiérarchie de scripts ce qui rend ma proposition inapproprié, puisque la mécanique d'appel de scripts imbriqués s'appuie sur le File Système uniquement.

janel écrit:

A moins que quelq'un ait déjà testé?

Pas de mon coté.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 2 mois #3749 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:Script .ps1 en .exe
Salut,

Pour le moment j'ai placé mon script sur notre serveur de fichier et j'ai créé un petit .cmd dans lequel il y a simplement : powershell.exe ./src/monscript.ps1

Ce n'est pas très \"propre\" à mon sens, mon interface graphique se lance bien mais j'ai une petite fenêtre DOS/PowerShell qui s'ouvre en fond ... mais bon, vous allez dire que je pinaille !


C'est une question qui est récurrente; je viens de mettre à jour la FAQ. Regarde ici .

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 2 mois #3760 par Thievery
Réponse de Thievery sur le sujet Re:Script .ps1 en .exe
Merci pour la MAJ, j'ai utilisé cette astuce avec les raccourcis et c'est en effet plus \"joli\".

Je pense avec un peu de recul qu'il peut être intéressant de garder cette fenêtre PowerShell pour afficher des logs, ou des petits résultats en complément d'une interface graphique.

Dan mon cas, je vais placer un petit bouton sur mon interface pour lister l'ensemble des utilisateurs de mon domaine dont le compte est verrouillé et le resultat sera formaté dans la petite console PowerShell.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #3815 par Bredin Samuel
Réponse de Bredin Samuel sur le sujet Re:Script .ps1 en .exe
Bonjour Messieurs,

Petite suggestion (Peut etre pas très propre mais je trouvais mieux que de modifier le raccourci comme Arnaud)

Dans le script voulant cacher la console :
[code:1]#Cache de la console
Hide-PowerShell

#Affichage fenetre
[void]$Form1.ShowDialog()

#Libération ressource de la fenetre
$Form1.Dispose()

#Affichage console
Show-PowerShell[/code:1]

Les deux fonctions dans ma librairie commune à toutes mes instances de Powershell sur mes domaines (Venant de Jamel de mémoire).

Ces deux fonctions ont besoin de deux autres utilisées dans d'autres cas.

Première :
[code:1]Function Invoke-Win32 ( [string] $dllName,
[Type] $returnType,
[string] $methodName,
[Type[]] $parameterTypes,
[Object[]] $parameters) {

#Fonction récupéré sur powershell-scripting.com
## Begin to build the dynamic assembly
$domain = [AppDomain]::CurrentDomain
$name = New-Object Reflection.AssemblyName 'PInvokeAssembly'
$assembly = $domain.DefineDynamicAssembly($name, 'Run')
$module = $assembly.DefineDynamicModule('PInvokeModule')
$type = $module.DefineType('PInvokeType', \"Public,BeforeFieldInit\"«»)

# Go through all of the parameters passed to us. As we do this,
# we clone the user's inputs into another array that we will use for
# the P/Invoke call.
$inputParameters = @()
$refParameters = @()

for($counter = 1 ; $counter -le $parameterTypes.Length ; $counter++) {
# If an item is a PSReference, then the user
# wants an [out] parameter.
if ($parameterTypes[$counter - 1] -eq [Ref]) {
# Remember which parameters are used for [Out] parameters
$refParameters += $counter

# On the cloned array, we replace the PSReference type with the
# .Net reference type that represents the value of the PSReference,
# and the value with the value held by the PSReference.
$parameterTypes[$counter - 1] = $parameters[$counter - 1].Value.GetType().MakeByRefType()
$inputParameters += $parameters[$counter - 1].Value
} else {
# Otherwise, just add their actual parameter to the input array.
$inputParameters += $parameters[$counter - 1]
}
}

# Define the actual P/Invoke method, adding the [Out] attribute for any parameters that were originally [Ref] parameters.
$method = $type.DefineMethod($methodName, 'Public,HideBySig,Static,PinvokeImpl', $returnType, $parameterTypes)
foreach ($refParameter in $refParameters) {
$method.DefineParameter($refParameter, \"Out\", $null)
}

# Apply the P/Invoke constructor
$ctor = [Runtime.InteropServices.DllImportAttribute].GetConstructor([string])
$attr = New-Object Reflection.Emit.CustomAttributeBuilder $ctor, $dllName
$method.SetCustomAttribute($attr)

#Create the temporary type, and invoke the method.
$realType = $type.CreateType()
$realType.InvokeMember($methodName, 'Public,Static,InvokeMethod', $null, $null, $inputParameters)

# Finally, go through all of the reference parameters, and update the values of the PSReference objects that the user passed in.
foreach ($refParameter in $refParameters) {
$parameters[$refParameter - 1].Value = $inputParameters[$refParameter - 1]
}
}[/code:1]

Deuxième :
[code:1]Function ShowWindowAsync([IntPtr] $hWnd, [Int32] $nCmdShow)
{
#0 Cache la fenetre
#1 Montre la fenetre
#2 Minimize la fenetre
$parameterTypes = [IntPtr], [Int32]
$parameters = $hWnd, $nCmdShow

Invoke-Win32 \"user32.dll\" ([Boolean]) \"ShowWindowAsync\" $parameterTypes $parameters
}[/code:1]

Troisième:
[code:1]Function Show-PowerShell() {
$null = ShowWindowAsync $($global:myWindowHandle) 1
}[/code:1]

Et enfin dernière :
[code:1]Function Hide-PowerShell() {
$global:myWindowHandle = (Get-Process -Id $pid).MainWindowHandle
$null = ShowWindowAsync $((Get-Process -Id $pid).MainWindowHandle) 0
}[/code:1]

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 1 mois #8721 par Blanc
Réponse de Blanc sur le sujet Re:Script .ps1 en .exe
Bonjour à tous,

Même si le sujet à un peu glissé, j'ai trouvé sur la toile plusieurs sites qui traitent le problème d'apparition d'une fenêtre intempestive lors de l'exécution de programmes PowerShell.

Globale on peut passer par un script VBS ou recréer un interpréteur PowerShell. Vos trouverez plus de détails sur l'article www.silogix.fr/Blog-Silogix/powershell-n...her-une-fenetre.aspx .

Jean-Paul

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.065 secondes
Propulsé par Kunena