Flash info

"La connaissance ce n’est point la possession de la vérité, mais d’un langage cohérent."

Antoine de Saint Exupéry (1900-1944)

 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
Gaby
Utilisateur

PowerShelleur Amateur
Messages: 86
graphgraph
Karma: 3  
Conversion VBS Powershell (Resolu) - 5/07/07 13:50 Alors voila j'essaye de convertir mes anciens scripts VBS en Powershell, mais je rencontre quelques difficultés lors des convertions Get-Object de VBS.

Et meme avec l'aide de microsoft qui propose les fonctions equivalentes, sa ne marche pas.
La fonction refuse ma variable qui est pourtant bien une chaine de caracteres.

Merci a celui ou celle qui prendra le temps de regarder mon probleme.

Exemple de code qui plante :

VBS Initial :

Function getDN(saMAccountName)
Dim nRoot, basedn, objConnection2, objCommand2, objRecordSet2
Set nRoot = GetObject("LDAP://rootDSE")
' genere automatiquement le chemin dc=************, dc=****, dc=***
' ou dc=*********, dc=*****, dc=***
basedn = nRoot.Get("defaultNamingContext")
set nRoot = Nothing
Set objConnection2 = CreateObject("ADODB.Connection")
objConnection2.Open "Provider=ADsDSOObject;"
Set objCommand2 = CreateObject("ADODB.Command")
objCommand2.ActiveConnection = objConnection2
objCommand2.CommandText = "<LDAP://" & basedn & ">;(saMAccountName=" & saMAccountName & ");distinguishedname;subtree"
Set objRecordSet2 = objCommand2.Execute
If objRecordset2.RecordCount = 0 Then
getDN = ""
Else
getDN = objRecordSet2(0)
End If
objConnection2.Close
End function


Convertion Powershell :

Function getDN([string] $saMAccountName)
{
[reflection.assembly]::LoadWithPartialName("microsoft.visualbasic")
$nRoot = [microsoft.visualbasic.interaction]::GetObject("LDAP://rootDSE")
$basedn = $nRoot.Get("defaultNamingContext") # probleme
$nRoot = $null
$objConnection2 = new-object -comobject "ADODB.Connection"
$objConnection2.Provider = "ADsDSOObject"
$objConnection2.Open
$objCommand2 = new-object -comobject "ADODB.Command"
$objCommand2.ActiveConnection = $objConnection2
$objCommand2.CommandText = "<LDAP://" + $basedn + ">;(saMAccountName=" + $saMAccountName + ");distinguishedname;subtree"
$objRecordSet2 = $objCommand2.Execute
if ($objRecordset2.RecordCount -eq 0)
{
return ""
}
else
{
return $objRecordSet2
}
$objConnection2.Close
}


Je joint egalement tout mon fichier ps1 car ce probleme se repete plusieurs fois

File Attachment:
File name: Fonctions_EspaceUtilisateur.ps1
File size:7916 bytes


Message édité par: Gaby, à: 5/07/07 14:52

Message édité par: Gaby, à: 16/07/07 13:05
Gaby
  | | L'administrateur a désactivé l'accés public en écriture.
janel
Admin

Administrateur
Messages: 576
graphgraph
Karma: 31  
Re:Conversion VBS Powershell - 6/07/07 11:59 L'erreur vient de l'utilisation du GetObject() de [microsoft.visualbasic.interaction]. Tu récupères un objet COM qui n'expose pas les méthodes dont tu as besoin.

L'objet que tu cherches est directement accessible en ADSI:

Code:

 $nRoot = [ADSI]"LDAP://RootDSE" $basedn $nRoot.Get("defaultNamingContext")



Au passage, tu pourras retirer le chargement de la bibliothèque Microsoft.VisualBasic devenue totalement inutile.

Janel
  | | L'administrateur a désactivé l'accés public en écriture.
Gaby
Utilisateur

PowerShelleur Amateur
Messages: 86
graphgraph
Karma: 3  
Re:Conversion VBS Powershell - 6/07/07 12:19 Ok merci janel je test et je te dit si sa marche. Gaby
  | | L'administrateur a désactivé l'accés public en écriture.
© 2020 PowerShell-Scripting.com