Je travaille sur un script qui itière à travers tous les utilisateurs trouvés dans un domaine, saisit quelques informations d'identification, puis les renvoie au format d'une instruction SQL Jusqu'à présent, je n'ai pu écrire que le dernier utilisateur à un fichier, mais je suis capable d'imprimer dans le terminal chaque utilisateur unique. J'ai un sentiment que je répandis au fichier de sortie en .txt chaque fois que je itione à travers ma boucle de Foreach. P> ci-dessous est mon code qui a été désinfecté: P> INSERT CODE> INSERTE que je souhaite stockée dans une. fichier txt comme sortie. $users = Get-ADUser -Properties uidNumber, sAMAccountName -SearchBase' OU=LiveUsers,OU=Users,OU=MyBusiness,DC=local' -Filter *
$message = ""
Set-Content -Path C:\Desktop\UIDs\currentList.txt -Value $null # ensures file is blank
foreach ($user in $users | Select-Object -Property uidNumber, sAMAccountName){
#Search in specified OU and List above for UID and name and write to a file
$message = "INSERT INTO `DataBaseNameHere`.`currentUser` (`User_id`, `User_name`) VALUES ('" + $user.uidNumber + "', '" + $user.sAMAccountName + "');" |
Out-File -FilePath C:\Desktop\UIDs\currentList.txt
}
Get-Content -Path C:\Desktop\UIDs\currentList.txt
3 Réponses :
En supposant que le code désinfecté que vous avez fourni fait ce que vous voulez, à l'exception de seulement une seule ligne dans le fichier de sortie, vous devez vous assurer que vous n'avez aucun fichier de sortie existant ou qu'il est vide, puis vous ajoutez le -Append code> Basculer vers le fichier Out-Fichier CODE> CMDLET: $users = Get-ADUser -Properties uidNumber, sAMAccountName -SearchBase 'OU=LiveUsers,OU=Users,OU=MyBusiness,DC=local' -Filter *
Set-Content -Path C:\Desktop\UIDs\CurrentList.txt -Value $null # ensures file is blank
foreach ($user in $users | Select-Object -Property uidNumber, sAMAccountName) {
$message = "INSERT INTO `databaseNameHere`.`currentUser` (`User_id`, `User_name`) VALUES ('" + $user.uidNumber + "', '" + $user.sAMAccountName + "');"
Out-File -FilePath C:\Desktop\UIDs\currentList.txt -append # -append added to not overwrite existing content.
}
Notez que les paramètres par défaut de fichier sur Unicode coding Ajout, même si un fichier préexistant est ASCII.
Le code que vous avez posté ne voudrait rien écrire dans un fichier car la boucle définit le message Quelque chose comme ça devrait faire ce que vous voulez faire: p> méfiez cependant, ce bâtiment $ code> sans rien faire avec elle, puis appelle out-fichier code> sans entrée. insérer code> Les déclarations de cette façon sont vulnérables à Injection SQL et doit être évitée. P> P>
Ainsi, après avoir pris des éléments de quelques-unes de vos réponses, j'ai pu modifier mon code et réparer la boucle. J'utilisais juste l'utilisation de la em> la cmdlet tort.
$users = Get-ADUser -Properties uidNumber, sAMAccountName -SearchBase 'OU=LiveUsers,OU=Users,OU=MyBusiness,DC=myCompany,DC=local' -filter *
Clear-Content -Path C:\Desktop\UIDs\CurrentList.txt
foreach ($user in $users ){
âINSERT INTO `databasename`.`currentUser` (`User_id`, `User_name`) VALUES ('"+ $user.uidNumber + "','"+ $user.sAMAccountName +"');" |
Out-File -FilePath C:\Desktop\UIDs\CurrentList.txt -Append
}