Question Mise à jour en Powershell v3
- gege
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 14
- Remerciements reçus 0
il y a 11 ans 8 mois #17783
par gege
Mise à jour en Powershell v3 a été créé par gege
Bonjour,
J'ai procédé ces derniers temps à une mise à jour de Powershell sur mon poste, passant de la V2 à la V3.
Un de mes script \"maison\" qui me sert bien, est un script de création d'utilisateur dans l'AD.
Et depuis mon passage en v3, une commande ne passe plus.
[code:1]$objOU = New-Object System.DirectoryServices.DirectoryEntry(\"LDAP://OU=zzzz,OU=Utilisateurs,OU=yyyy,DC=xxx,DC=net\"«»)
$objUser= $objOU.Create(\"user\",$usercn)
$objuser.psbase.commitchanges()
$objUser.put(\"sAMAccountName\", $CP)
$objuser.psbase.commitchanges()
$objUser.put(\"userPrincipalName\", $CP+ $domaineSMTP)
$objuser.psbase.commitchanges()
$objUser.put(\"givenName\", $Prenom)
$objuser.psbase.commitchanges()
[/code:1]
j'ai le message suivant:
[code:1]Exception lors de l'appel de « put » avec « 2 » argument(s) : « Erreur non spécifiée (Exception de HRESULT : 0x80004005 (E_FAIL)) »
Au caractère T:\Kuser.ps1:780 : 8
+ $objUser.put(\"givenName\", $Prenom)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI
[/code:1]
J'ai essayé mon script sur une machine en powershell v2 et cela fonctionne.
Je me doute que la mise à jour y est pour quelque chose mais je n'arrive pas à trouver la parade.
Au pire je devrais changer ma méthode dans mon script, mais j'aurais aimer comprendre et trouver une solution pour palier le problème rapidement.
Merci à vous.
J'ai procédé ces derniers temps à une mise à jour de Powershell sur mon poste, passant de la V2 à la V3.
Un de mes script \"maison\" qui me sert bien, est un script de création d'utilisateur dans l'AD.
Et depuis mon passage en v3, une commande ne passe plus.
[code:1]$objOU = New-Object System.DirectoryServices.DirectoryEntry(\"LDAP://OU=zzzz,OU=Utilisateurs,OU=yyyy,DC=xxx,DC=net\"«»)
$objUser= $objOU.Create(\"user\",$usercn)
$objuser.psbase.commitchanges()
$objUser.put(\"sAMAccountName\", $CP)
$objuser.psbase.commitchanges()
$objUser.put(\"userPrincipalName\", $CP+ $domaineSMTP)
$objuser.psbase.commitchanges()
$objUser.put(\"givenName\", $Prenom)
$objuser.psbase.commitchanges()
[/code:1]
j'ai le message suivant:
[code:1]Exception lors de l'appel de « put » avec « 2 » argument(s) : « Erreur non spécifiée (Exception de HRESULT : 0x80004005 (E_FAIL)) »
Au caractère T:\Kuser.ps1:780 : 8
+ $objUser.put(\"givenName\", $Prenom)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
+ FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI
[/code:1]
J'ai essayé mon script sur une machine en powershell v2 et cela fonctionne.
Je me doute que la mise à jour y est pour quelque chose mais je n'arrive pas à trouver la parade.
Au pire je devrais changer ma méthode dans mon script, mais j'aurais aimer comprendre et trouver une solution pour palier le problème rapidement.
Merci à vous.
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 11 ans 8 mois #17785
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Mise à jour en Powershell v3
Salut,
sous quel OS testes-tu ?
Le poste a-t-il les dernières MAJ ?
As-tu testé sur le même poste avec :
[code:1]
powershell.exe -version 2.0 -noprofile
[/code:1]
Le framework utilisé n'est pas le même que celui de la v2.
La pile d'appel pourrait être utile ( cf. la fonction Resolve-Error).
Je n'ai pas trouvé d'infos sur MSConnect, à priori ce n'est pas un 'breaking change' référencé.
sous quel OS testes-tu ?
Le poste a-t-il les dernières MAJ ?
As-tu testé sur le même poste avec :
[code:1]
powershell.exe -version 2.0 -noprofile
[/code:1]
Le framework utilisé n'est pas le même que celui de la v2.
La pile d'appel pourrait être utile ( cf. la fonction Resolve-Error).
Je n'ai pas trouvé d'infos sur MSConnect, à priori ce n'est pas un 'breaking change' référencé.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- gege
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 14
- Remerciements reçus 0
il y a 11 ans 8 mois #17787
par gege
Réponse de gege sur le sujet Re:Mise à jour en Powershell v3
Bonjour,
Je suis sous Seven 64 bits.
De quel maj parles tu ? Celle du framework ou de l'OS en générale?
J'ai testé avec ta commande, et le script passe nickel mon utilisateur est bien créé.
j'ai utilisé la fonction Resolve-ErrorRecord en provoquant de nouveau l'erreur et voici ce que ça donne:
[code:1]
PSMessageDetails :
Exception : System.Management.Automation.MethodInvocationException: Exception lors de l'appel de «put» avec «2» argument(s): «Erreur non spécifiée (Exception de HRESULT : 0x80004005
(E_FAIL))» ---> System.Runtime.InteropServices.COMException: Erreur non spécifiée (Exception de HRESULT : 0x80004005 (E_FAIL))
--- Fin de la trace de la pile d'exception interne ---
à System.Management.Automation.Adapter.BaseMethodInvoke(PSMethod method, PSMethodInvocationConstraints invocationConstraints, Object[] arguments)
à System.Management.Automation.PSMethod.Invoke(PSMethodInvocationConstraints invocationConstraints, Object[] arguments)
à System.Management.Automation.PSMethod.Invoke(Object[] arguments)
à System.Management.Automation.Language.PSInvokeMemberBinder.InvokeAdaptedMember(Object obj, String methodName, Object[] args)
à System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2)
à System.Management.Automation.Interpreter.DynamicInstruction`4.Run(InterpretedFrame frame)
à System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
TargetObject :
CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI
ErrorDetails :
InvocationInfo : System.Management.Automation.InvocationInfo
ScriptStackTrace : à <ScriptBlock>, T:\Kuser.ps1 : ligne 780
à <ScriptBlock>, T:\Kuser.ps1 : ligne 1147
PipelineIterationInfo : {}
MyCommand :
BoundParameters : {}
UnboundArguments : {}
ScriptLineNumber : 780
OffsetInLine : 8
HistoryId : -1
ScriptName : T:\Kuser.ps1
Line : $objUser.put(\"givenName\", $Prenom)
PositionMessage : Au caractère T:\Kuser.ps1:780 : 8
+ $objUser.put(\"givenName\", $Prenom)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PSScriptRoot : T:\
PSCommandPath : T:\Kuser.ps1
InvocationName :
PipelineLength : 0
PipelinePosition : 0
ExpectingInput : False
CommandOrigin : Internal
DisplayScriptPosition :
Exception at nesting level 0
ErrorRecord : Exception lors de l'appel de « put » avec « 2 » argument(s) : « Erreur non spécifiée (Exception de HRESULT : 0x80004005 (E_FAIL)) »
StackTrace : à System.Management.Automation.Adapter.BaseMethodInvoke(PSMethod method, PSMethodInvocationConstraints invocationConstraints, Object[] arguments)
à System.Management.Automation.PSMethod.Invoke(PSMethodInvocationConstraints invocationConstraints, Object[] arguments)
à System.Management.Automation.PSMethod.Invoke(Object[] arguments)
à System.Management.Automation.Language.PSInvokeMemberBinder.InvokeAdaptedMember(Object obj, String methodName, Object[] args)
à System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2)
à System.Management.Automation.Interpreter.DynamicInstruction`4.Run(InterpretedFrame frame)
à System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
WasThrownFromThrowStatement : False
Message : Exception lors de l'appel de « put » avec « 2 » argument(s) : « Erreur non spécifiée (Exception de HRESULT : 0x80004005 (E_FAIL)) »
Data : {System.Management.Automation.Interpreter.InterpretedFrameInfo}
InnerException : System.Runtime.InteropServices.COMException (0x80004005): Erreur non spécifiée (Exception de HRESULT : 0x80004005 (E_FAIL))
TargetSite : System.Object BaseMethodInvoke(System.Management.Automation.PSMethod, System.Management.Automation.PSMethodInvocationConstraints, System.Object[])
HelpLink :
Source : System.Management.Automation
HResult : -2146233087
Exception at nesting level 1
ErrorCode : -2147467259
Message : Erreur non spécifiée (Exception de HRESULT : 0x80004005 (E_FAIL))
Data : {}
InnerException :
TargetSite :
StackTrace :
HelpLink :
Source :
HResult : -2147467259
[/code:1]
Merci du coup de pouce
<br><br>Message édité par: kenobytes, à: 3/07/14 16:47
Je suis sous Seven 64 bits.
De quel maj parles tu ? Celle du framework ou de l'OS en générale?
J'ai testé avec ta commande, et le script passe nickel mon utilisateur est bien créé.
j'ai utilisé la fonction Resolve-ErrorRecord en provoquant de nouveau l'erreur et voici ce que ça donne:
[code:1]
PSMessageDetails :
Exception : System.Management.Automation.MethodInvocationException: Exception lors de l'appel de «put» avec «2» argument(s): «Erreur non spécifiée (Exception de HRESULT : 0x80004005
(E_FAIL))» ---> System.Runtime.InteropServices.COMException: Erreur non spécifiée (Exception de HRESULT : 0x80004005 (E_FAIL))
--- Fin de la trace de la pile d'exception interne ---
à System.Management.Automation.Adapter.BaseMethodInvoke(PSMethod method, PSMethodInvocationConstraints invocationConstraints, Object[] arguments)
à System.Management.Automation.PSMethod.Invoke(PSMethodInvocationConstraints invocationConstraints, Object[] arguments)
à System.Management.Automation.PSMethod.Invoke(Object[] arguments)
à System.Management.Automation.Language.PSInvokeMemberBinder.InvokeAdaptedMember(Object obj, String methodName, Object[] args)
à System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2)
à System.Management.Automation.Interpreter.DynamicInstruction`4.Run(InterpretedFrame frame)
à System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
TargetObject :
CategoryInfo : NotSpecified: (:«») [], MethodInvocationException
FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvokeTI
ErrorDetails :
InvocationInfo : System.Management.Automation.InvocationInfo
ScriptStackTrace : à <ScriptBlock>, T:\Kuser.ps1 : ligne 780
à <ScriptBlock>, T:\Kuser.ps1 : ligne 1147
PipelineIterationInfo : {}
MyCommand :
BoundParameters : {}
UnboundArguments : {}
ScriptLineNumber : 780
OffsetInLine : 8
HistoryId : -1
ScriptName : T:\Kuser.ps1
Line : $objUser.put(\"givenName\", $Prenom)
PositionMessage : Au caractère T:\Kuser.ps1:780 : 8
+ $objUser.put(\"givenName\", $Prenom)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PSScriptRoot : T:\
PSCommandPath : T:\Kuser.ps1
InvocationName :
PipelineLength : 0
PipelinePosition : 0
ExpectingInput : False
CommandOrigin : Internal
DisplayScriptPosition :
Exception at nesting level 0
ErrorRecord : Exception lors de l'appel de « put » avec « 2 » argument(s) : « Erreur non spécifiée (Exception de HRESULT : 0x80004005 (E_FAIL)) »
StackTrace : à System.Management.Automation.Adapter.BaseMethodInvoke(PSMethod method, PSMethodInvocationConstraints invocationConstraints, Object[] arguments)
à System.Management.Automation.PSMethod.Invoke(PSMethodInvocationConstraints invocationConstraints, Object[] arguments)
à System.Management.Automation.PSMethod.Invoke(Object[] arguments)
à System.Management.Automation.Language.PSInvokeMemberBinder.InvokeAdaptedMember(Object obj, String methodName, Object[] args)
à System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2)
à System.Management.Automation.Interpreter.DynamicInstruction`4.Run(InterpretedFrame frame)
à System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
WasThrownFromThrowStatement : False
Message : Exception lors de l'appel de « put » avec « 2 » argument(s) : « Erreur non spécifiée (Exception de HRESULT : 0x80004005 (E_FAIL)) »
Data : {System.Management.Automation.Interpreter.InterpretedFrameInfo}
InnerException : System.Runtime.InteropServices.COMException (0x80004005): Erreur non spécifiée (Exception de HRESULT : 0x80004005 (E_FAIL))
TargetSite : System.Object BaseMethodInvoke(System.Management.Automation.PSMethod, System.Management.Automation.PSMethodInvocationConstraints, System.Object[])
HelpLink :
Source : System.Management.Automation
HResult : -2146233087
Exception at nesting level 1
ErrorCode : -2147467259
Message : Erreur non spécifiée (Exception de HRESULT : 0x80004005 (E_FAIL))
Data : {}
InnerException :
TargetSite :
StackTrace :
HelpLink :
Source :
HResult : -2147467259
[/code:1]
Merci du coup de pouce
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 11 ans 8 mois #17788
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Mise à jour en Powershell v3
kenobytes écrit:
kenobytes écrit:
Si ton lecteur T est un share essaie ton script en local.
As-tu essayé avec un seul appel à CommitChanges() ?
Les noms de propriétés sont peut-être sensibles à la casse ?
Je ne peut tester ton code, si un lecteur peut le faire ( v3 ou v4) tu aurais confirmation que c'est un pb récurrent.
Je pensais plus à celle du framework dotnet.De quel maj parles tu ? Celle du framework ou de l'OS en générale?
kenobytes écrit:
Oui, mais on est tjr en v2J'ai testé avec ta commande, et le script passe nickel mon utilisateur est bien créé.
Si ton lecteur T est un share essaie ton script en local.
As-tu essayé avec un seul appel à CommitChanges() ?
Les noms de propriétés sont peut-être sensibles à la casse ?
Je ne peut tester ton code, si un lecteur peut le faire ( v3 ou v4) tu aurais confirmation que c'est un pb récurrent.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- gege
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 14
- Remerciements reçus 0
il y a 11 ans 8 mois #17789
par gege
Réponse de gege sur le sujet Re:Mise à jour en Powershell v3
Salut,
Le .net Framework est en 4.5.1 sur mon poste.
J'ai essayé le script en local, même sanction.
J'ai essayé avec un seul commit, même chose.
Par contre, j'ai remplacé ma variable $Prenom par une valeur \"toto\" et là ça fonctionne.
[code:1]
$objUser.put('givenname', \"toto\"«»)
[/code:1]
Je me suis donc pencher sur l'alimentation de ma variable $prenom dont voici le code:
[code:1]
$Verif.add_click( #Début Bouton Vérif
{
$i = 0
$login = ''
$pre = $txtboxprenom.get_text()
$pre2 = $txtboxprenom2.get_text()
if ($txtBoxPrenom2.get_text() -eq '')
{
$login = $pre.substring(0,1) + $txtBoxNom.get_text()
[string]$Prenom = $txtBoxPrenom.get_text()
while (userexist($login) -eq $true)
{
$i++
$login = $pre.substring(0,$i) + $txtBoxNom.get_text()
}
}
elseif ($txtBoxPrenom2.get_text() -ne '')
{
$login = $pre.substring(0,1) + $pre2.substring(0,1) + $txtboxnom.get_text()
[string]$Prenom = $txtBoxPrenom.get_text() + \"-\" + $txtBoxPrenom2.get_text()
while (userexist($login) -eq $true)
{
$i++
$login = $pre.substring(0,$i) + $pre2.substring(0,1) + $txtboxnom.get_text()
}
}
$txtboxlogin.text = $login.tolower()
}) #Fin Bouton Vérif
[/code:1]
Mon script génère un formulaire de saisie basé sur le windows forms, c'est pour cette raison que tu vois des entrées de type $txtboxprenom.get_text() , c'est le code d'un bouton Vérif, qui me génère un login et qui vérifie si il n'existe pas de doublons dans l'AD avec le fonction \"userexist\"
Le .net Framework est en 4.5.1 sur mon poste.
J'ai essayé le script en local, même sanction.
J'ai essayé avec un seul commit, même chose.
Par contre, j'ai remplacé ma variable $Prenom par une valeur \"toto\" et là ça fonctionne.
[code:1]
$objUser.put('givenname', \"toto\"«»)
[/code:1]
Je me suis donc pencher sur l'alimentation de ma variable $prenom dont voici le code:
[code:1]
$Verif.add_click( #Début Bouton Vérif
{
$i = 0
$login = ''
$pre = $txtboxprenom.get_text()
$pre2 = $txtboxprenom2.get_text()
if ($txtBoxPrenom2.get_text() -eq '')
{
$login = $pre.substring(0,1) + $txtBoxNom.get_text()
[string]$Prenom = $txtBoxPrenom.get_text()
while (userexist($login) -eq $true)
{
$i++
$login = $pre.substring(0,$i) + $txtBoxNom.get_text()
}
}
elseif ($txtBoxPrenom2.get_text() -ne '')
{
$login = $pre.substring(0,1) + $pre2.substring(0,1) + $txtboxnom.get_text()
[string]$Prenom = $txtBoxPrenom.get_text() + \"-\" + $txtBoxPrenom2.get_text()
while (userexist($login) -eq $true)
{
$i++
$login = $pre.substring(0,$i) + $pre2.substring(0,1) + $txtboxnom.get_text()
}
}
$txtboxlogin.text = $login.tolower()
}) #Fin Bouton Vérif
[/code:1]
Mon script génère un formulaire de saisie basé sur le windows forms, c'est pour cette raison que tu vois des entrées de type $txtboxprenom.get_text() , c'est le code d'un bouton Vérif, qui me génère un login et qui vérifie si il n'existe pas de doublons dans l'AD avec le fonction \"userexist\"
Connexion ou Créer un compte pour participer à la conversation.
- gege
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 14
- Remerciements reçus 0
il y a 11 ans 8 mois #17790
par gege
Réponse de gege sur le sujet Re:Mise à jour en Powershell v3
j'ai continué quelques tests en mettant des \"Write-Host $Prenom\" dans mon script a divers endroits.
Et apparemment, à la sortie du code du bouton vérif la variable ne contient plus rien.
Et apparemment, à la sortie du code du bouton vérif la variable ne contient plus rien.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.101 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les initiés
- Mise à jour en Powershell v3