Question [Resolu]System.Byte[] to sting

Plus d'informations
il y a 15 ans 10 mois #6675 par Seals
Bonjour,

J'aimerai exporter la valeur d'un champ de l'AD, mais ceui-ci me retourne System.Byte[]
J'ai donc recherché pour convertir la valeur en String et j'ai obtenu le code suivant :
([System.BitConverter]::ToString( $user.unixUserPassword ))

Mais ca ne focntionne pas, il me retourne l'erreur suivante :
Impossible de convertir l'argument « 0 » (valeur « System.DirectoryServices.PropertyValueColle
ction ») de « ToString » en type « System.Byte[] » : « Impossible de convertir la valeur « Sys
tem.DirectoryServices.PropertyValueCollection » en type « System.Byte[] ». Erreur : « Impossib
le de convertir la valeur « System.Byte[] » du type « System.Byte[] » en type « System.Byte ».
 » »
Au niveau de E:\Scripts\user\msSFU30\show_attribute_user_msSFU30Password.ps1 : 11 Caractère :
102
+ $export += ($user.displayName +\"`t\"+ $user.sAMAccountName +\"`t\"+ ([System.BitConverter]:
:ToString <<<< ( $user.unixUserPassword )) +\"`r`n\" )
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodArgumentConversionInvalidCastArgument


Voici mon code

[code:1]$Search = New-Object DirectoryServices.DirectorySearcher([ADSI] \"LDAP://DC=mondomaine,DC=com\"«»)
$Search.filter = \"(objectCategory=user)\"
$results = $Search.Findall()
$export =\"\"

foreach ($result in $results)
{
$User = $result.GetDirectoryEntry()

$export += ($user.displayName +\"`t\"+ $user.sAMAccountName +\"`t\"+ ([System.BitConverter]::ToString( $user.unixUserPassword )) +\"`r`n\" )
}[/code:1]

Pouvez vous m'aider ?
Merci<br><br>Message édité par: Seals, à: 5/05/10 11:40

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

Plus d'informations
il y a 15 ans 10 mois #6676 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:System.Byte[] to sting
Salut,
en .NET consulte plutot la classe System.Convert, en PowerShell :
[code:1]
[byte[]]$b=1..8
$ofs=\&quot;,\&quot;
$b -as [string]
#ou encore
\&quot;$b\&quot;
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 15 ans 10 mois #6678 par Seals
Réponse de Seals sur le sujet Re:System.Byte[] to sting
Avec les exemples, je n'arrive pas à retrouner la valeur.
Il me retroune soit System.Byte[] ou alors System.DirectoryServices.PropertyValueCollection

Voici mon code :
[code:1]
([System.Convert]::ToString( $user.unixUserPassword ))
ou
\&quot;$user.unixUserPassword\&quot;
# retroune System.DirectoryServices.PropertyValueCollection

( $user.unixUserPassword ) -as [string] )
#retounre System.Byte[]

[/code:1]
En ayant vu ca, je suis allé sur la classe System.DirectoryServices.PropertyValueCollection et j'ai rajouté la propriété Name. Mais sans grand succes:
[code:1]([System.Convert]::ToString($user.unixUserPassword) ).name[/code:1]

Y aurait il pas un autre moyen pour la convertir ou la récupérer ?
Merci.

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

Plus d'informations
il y a 15 ans 10 mois #6684 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:System.Byte[] to sting
Le membre que tu manipules est une collection spécialisée d'objet comme ici et pas un tableau (à confirmer) :
[code:1] $EL=Get-EventLog -list|? {$_.Log -match \&quot;Windows PowerShell\&quot;}
\&quot;$El.Entries\&quot;
#System.Diagnostics.EventLog.Entries
[/code:1]
visualise déjà le contenu de l'objet cible avec la fonction suivante, dispo ici :
[code:1]
Write-Properties $user.unixUserPassword
[/code:1]
Si la méthode ToString() renvoi le nom de la classe, c'est qu'elle n'est pas spécialisée.

Tutoriels PowerShell

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

Plus d'informations
il y a 15 ans 10 mois #6686 par Seals
Réponse de Seals sur le sujet Re:System.Byte[] to sting
Merci pour la fonction debug.

Donc avec la fonction suivante j'obtiens :
[code:1]
[DBG]: PS U:\&gt;&gt;&gt; Write-Properties ($user.unixUserPassword)
Count : 1
IsFixedSize :
IsReadOnly :
IsSynchronized :
Length :
LongLength :
Rank :
SyncRoot :
[/code:1]

Et chose que je n'avais pas vu, lors du debug, la propriété $user.unixUserPassword | Out-Host me retourne un tableau (enfin je crois) de ce type :
[code:1]
65
66
67
68
33
101
102
103
104
49
50
51
52
53
36
54
55
56
57
48
[/code:1]
et qui correspond en décimale ASCII à la chaine string de mon champ visible dans l'AD: ABCD!efgh12345$67890

Par contre je ne comprends pas pourquoi dans ce cas, il ne me donne pas la chaine denuméros lors de l'appel ?

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

Plus d'informations
il y a 15 ans 10 mois #6687 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:System.Byte[] to sting
Seals écrit:

Merci pour la fonction debug.

De rien, tu peux la coupler avec l'outil debugview ( dispos sur sysinternal).

Essaie ceci, sinon ton code affiche l'objet collection et pas l'objet contenu :
[code:1]
Write-Properties $user.unixUserPassword[0]
[/code:1]
il se peut qu'il faille adresser un membre, par exemple $user.unixUserPassword.Value
Seals écrit:

qui correspond en décimale ASCII à la chaine string de mon champ visible dans l'AD

Oui, c'est un tableau de Char, d'où le type System.Byte[] renvoyé à l'origine.
Seals écrit:

Par contre je ne comprends pas pourquoi dans ce cas, il ne me donne pas la chaine de numéros lors de l'appel ?

Je n'ai pas compris.

Tutoriels PowerShell

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

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