Question compiler en executable script powershell + modules
- Kevin
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 14
- Remerciements reçus 0
il y a 10 ans 11 mois #19416
par Kevin
Réponse de Kevin sur le sujet Re:compiler en executable script powershell + modules
J'ai déja 9/10eme du code fait 
J'ai des réajustement a faire et intégrer quelques recherches au niveau de l'AD ^^ mais rien de plus
Pour commencer j'ai réussi à obtenir les attributs d'un utilisateur par rapport à son login Windows que je récupère via une commande powershell:
[code:1]$IP = ((Get-WmiObject -Class Win32_NetworkAdapterConfiguration)|?{$_.Ipaddress}).IPAddress | select -First 1 # Récupération de l'adresse IP du poste
$Debut_IP = $IP.Split(\".\"«»)[0,1,2] -join \".\" # Récupère les 7 premiers caractères de l'adresse IP
$computer_name = (Get-WmiObject -Computer $IP -Class Win32_ComputerSystem).Name # Récupère le nom du poste
$loginfo = Get-WmiObject -Computer $IP -Class Win32_ComputerSystem
$login = $loginfo.UserName.Split(\"\\"«») | Select-Object -Last 1 # Récupère l'identifiant windows de l'utilisateur
$domaine = $loginfo.UserName.Split(\"\\"«») | Select-Object -First 1 # Récupère le domaine de l'utilisateur
$SID = ((New-Object System.Security.Principal.NTAccount($domaine, $login)).Translate([System.Security.Principal.SecurityIdentifier])).Value # Récupère le SID de l'utilisateur
$objDomain = [ADSI]''
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher($objDomain)
$objSearcher.Filter = '(objectCategory=person)'
$USER = $objSearcher.FindAll() | Select-object -ExpandProperty Path | Where-Object {$_ -match $login}
$act_user = ([ADSI]\"$USER\"«») | Select-Object -Property *[/code:1]
Et à partir de là, je pense pouvoir obtenir un peu ce que je veux de l'utilisateur
Laurent Dardenne écrit:
Je veux bien voir s'il te plait
que je regarde un peu comment tout ça ce construit et ce mets en place ^^
J'ai des réajustement a faire et intégrer quelques recherches au niveau de l'AD ^^ mais rien de plus
Pour commencer j'ai réussi à obtenir les attributs d'un utilisateur par rapport à son login Windows que je récupère via une commande powershell:
[code:1]$IP = ((Get-WmiObject -Class Win32_NetworkAdapterConfiguration)|?{$_.Ipaddress}).IPAddress | select -First 1 # Récupération de l'adresse IP du poste
$Debut_IP = $IP.Split(\".\"«»)[0,1,2] -join \".\" # Récupère les 7 premiers caractères de l'adresse IP
$computer_name = (Get-WmiObject -Computer $IP -Class Win32_ComputerSystem).Name # Récupère le nom du poste
$loginfo = Get-WmiObject -Computer $IP -Class Win32_ComputerSystem
$login = $loginfo.UserName.Split(\"\\"«») | Select-Object -Last 1 # Récupère l'identifiant windows de l'utilisateur
$domaine = $loginfo.UserName.Split(\"\\"«») | Select-Object -First 1 # Récupère le domaine de l'utilisateur
$SID = ((New-Object System.Security.Principal.NTAccount($domaine, $login)).Translate([System.Security.Principal.SecurityIdentifier])).Value # Récupère le SID de l'utilisateur
$objDomain = [ADSI]''
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher($objDomain)
$objSearcher.Filter = '(objectCategory=person)'
$USER = $objSearcher.FindAll() | Select-object -ExpandProperty Path | Where-Object {$_ -match $login}
$act_user = ([ADSI]\"$USER\"«») | Select-Object -Property *[/code:1]
Et à partir de là, je pense pouvoir obtenir un peu ce que je veux de l'utilisateur
Laurent Dardenne écrit:
J'ai un module de base (en prod), si tu veux l'adapter.
Je veux bien voir s'il te plait
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 10 ans 11 mois #19417
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:compiler en executable script powershell + modules
Regarde la fonction Get-ADSIObject, rien de bien compliqué.
Contenu du script encapsulé dans un .exe :
[code:1]
#Si besoin loggue dans le répertoire %Temp% du profile exécutant le script/.exe
Start-Transcript \"$Env:Temp\MyScript.Log\" -ea SilentlyContinue
#Ajoute le répertoire des modules de la solution
#On modifie uniquement la session PS en cours et pas la variable %PSModulePath% globale.
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$env:«»PSModulepath +=\";$scriptPath\modules\"
#Si on utilise un profile.
#on vide la collection d'erreurs avant l'exécution du traitement
$Error.Clear()
#Optionel : gestionnaire d'erreur global
# Invoke-CommandWithUnhandledExceptions 'InvokeTraitement' \"$scriptPath\Logs\" $sbTraitement
#ou
# ICI débute le traitement sans gestionnaire d'erreur
#...
[/code:1]
Ensuite on crée une archive, à partir du répertoire contenant la solution complète (script+modules+autres fichiers).
Puis, via la fonction ConvertTo-Sfx du module PsIonic on crée une archive autoextractible :
[code:1]
$ZipFileName=\"C:\Dev\MyScript\MySetup.zip\"
#contruit l'archive à partir de fichiers issus de répertoires différents
$T=@(\"C:\Temp\Modules\*\"; (Dir C:\Temp\*.PS1),(Get-Item 'C:\Temp\Setup'))
$T|Compress-ZipFile -OutputName $ZipFileName
$ReadOptions = New-Object Ionic.Zip.ReadOptions -Property @{
StatusMessageWriter = [System.Console]::Out
}
$Save=@{
ExeOnUnpack=\"MySscript.exe\"; #ligne de cmd exécutée une fois la décompression effectuée
Description=\"Setup for the xxx\";
NameOfProduct=\"MyProjectName\";
VersionOfProduct=\"1.0.0\";
Copyright='Copyleft.'
}
$SaveOptions=New-ZipSfxOptions @Save
#construit, à partir d'un .zip, une archive autoextractible
ConvertTo-Sfx $ZipFileName -Save $SaveOptions -Read $ReadOptions
[/code:1]
<br><br>Message édité par: Laurent Dardenne, à: 3/04/15 14:36
Contenu du script encapsulé dans un .exe :
[code:1]
#Si besoin loggue dans le répertoire %Temp% du profile exécutant le script/.exe
Start-Transcript \"$Env:Temp\MyScript.Log\" -ea SilentlyContinue
#Ajoute le répertoire des modules de la solution
#On modifie uniquement la session PS en cours et pas la variable %PSModulePath% globale.
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$env:«»PSModulepath +=\";$scriptPath\modules\"
#Si on utilise un profile.
#on vide la collection d'erreurs avant l'exécution du traitement
$Error.Clear()
#Optionel : gestionnaire d'erreur global
# Invoke-CommandWithUnhandledExceptions 'InvokeTraitement' \"$scriptPath\Logs\" $sbTraitement
#ou
# ICI débute le traitement sans gestionnaire d'erreur
#...
[/code:1]
Ensuite on crée une archive, à partir du répertoire contenant la solution complète (script+modules+autres fichiers).
Puis, via la fonction ConvertTo-Sfx du module PsIonic on crée une archive autoextractible :
[code:1]
$ZipFileName=\"C:\Dev\MyScript\MySetup.zip\"
#contruit l'archive à partir de fichiers issus de répertoires différents
$T=@(\"C:\Temp\Modules\*\"; (Dir C:\Temp\*.PS1),(Get-Item 'C:\Temp\Setup'))
$T|Compress-ZipFile -OutputName $ZipFileName
$ReadOptions = New-Object Ionic.Zip.ReadOptions -Property @{
StatusMessageWriter = [System.Console]::Out
}
$Save=@{
ExeOnUnpack=\"MySscript.exe\"; #ligne de cmd exécutée une fois la décompression effectuée
Description=\"Setup for the xxx\";
NameOfProduct=\"MyProjectName\";
VersionOfProduct=\"1.0.0\";
Copyright='Copyleft.'
}
$SaveOptions=New-ZipSfxOptions @Save
#construit, à partir d'un .zip, une archive autoextractible
ConvertTo-Sfx $ZipFileName -Save $SaveOptions -Read $ReadOptions
[/code:1]
La pièce jointe AD.zip est absente ou indisponible
Tutoriels PowerShell
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.083 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- compiler en executable script powershell + modules