Net User en PowerShell
Je suis dans le milieu de la migration vers le nuage, la migration de SBS 2003 Active Directory 2008 R2.
J'ai configuré un nouvel utilisateur, et a remarqué que l'utilisateur n'a pas pu réinitialiser leur mot de passe.
Mon Serveur Admin m'a montré comment utiliser le net de l'utilisateur.
J'ai remarqué que je peux obtenir de l'information à partir de certains comptes et pas d'autres. Avec plus de 100 comptes à traiter, je pensais que je voudrais essayer PowerShell.
Dans ce post (Utiliser powershell pour look up "net user" sur d'autres domaines?) Lorenzo recommande l'utilisation de Get-ADUser (et cela s'applique à une interrogation à partir d'un autre domaine). Quand je lance Get-ADUser de mon invite de PowerShell, je reçois un message indiquant que le commandlet n'est pas reconnu.
Je suis à la lecture de l'Id d'utilisateur à partir d'un fichier texte, et envoyer la sortie vers un fichier journal de sorte que l'on peut envoyer à l'administrateur du serveur pour une analyse plus approfondie.
Voici mon code pour l'instant (veuillez noter que je suis complètement nouveau pour PowerShell):
# Get our list of user names from the local staff.txt file
$users = get-content 'C:\Scripts\staff.txt'
# Create log file of output:
$LogTime = Get-Date -Format 'MM-dd-yyyy_hh-mm-ss'
$CompPath = "C:\Scripts\"
$CompLog = $CompPath + "NetUserInfo" + $LogTime + ".txt"
New-Item -path $CompLog -type File
foreach ($user in $users) {
#Testing user:
"Testing user: $user" | out-file $CompLog -Append
# Obtain user information using net user:
net user $user /domain >> $CompLog
# Pause to let system gather information:
Start-Sleep -Second 15
}
Que le script s'exécute actuellement, mon fichier journal aura deux ou trois noms d'utilisateur, suivi par la réponse "la demande sera traitée à un contrôleur de domaine pour le domaine (domaine)"
Si l'internaute, à partir de CMD, retourne "erreur Système 5 s'est produite, l'Accès est refusé." Ce n'est pas enregistré dans le fichier de sortie. SI l'internaute, à partir de CMD, permettrait le retour d'informations de l'utilisateur, cela est consigné dans le fichier de sortie. Je suis actuellement à la réception de sortie pour seulement quelques utilisateurs, mais lorsque j'exécute la commande CMD, je suis en mesure de récupérer des informations pour au moins dix.
Ma première pensée a été que je devais attendre la commande net user pour compléter (d'où le Démarrage de la commande de mise en Veille) mais qui n'a pas eu d'effet sur la sortie.
Toute aide serait grandement appréciée.
- Utilisation
Get-ADUser
pour obtenir des informations de l'utilisateur dans PowerShell au lieu de l'appelernet
. Vous serez en mesure de mieux le contrôler et de mieux utiliser les données.
Vous devez vous connecter pour publier un commentaire.
Désolé, je n'ai pas assez de réputation pour ajouter un commentaire.
Lorsque vous exécutez des programmes en Powershell (comme
net user...
ouping
) elle doit être exécuté exactement le même que dans les conditions normales de l'invite de commande (cmd).Si je comprends bien, vous obtenez des résultats différents lorsque vous (efficacement) exécuter la même chose dans Powershell ou l'Invite de commandes. Est ce que le droit?
Êtes-vous à l'aide de l'ISE pour construire votre script? Si oui, vous pouvez définir des points d'arrêt qui fera une pause dans le script et vous permettra de voir ce que les variables sont. Il se pourrait que la
$user
variable n'est pas la tenue que vous pensez qu'il devrait être, ou que la valeur ne correspond pas au nom d'un compte d'utilisateur de domaine.EDIT:
Ce qui se passe lorsque vous exécutez le
net user ...
de commande de manière interactive (par exemple, non pas comme un script, mais manuellement) dans Powershell? Ne vous obtenez une erreur? Si oui, que fait l'erreur de dire?Supplémentaires liées trucs:
Vous ne devriez pas avoir besoin de la Start-Sommeil que les commandes sont exécutées dans l'ordre, et la ligne suivante ne devrait pas exécuter jusqu'à ce que le précédent est terminé.
Aussi, la version de Powershell utilisez-vous?
(Vous pouvez le vérifier en exécutant
$host.version.Major
)Le Get-ADUser applet de commande nécessite la version 3 (je crois) et aussi doit importer le module Active Directory.
La raison de la sortie d'erreur est de ne pas avoir ajouté le fichier journal est parce que vous êtes seulement en redirigeant la sortie standard STDOUT (standard output stream). Aussi rediriger la sortie STDERR (flux d'erreur standard) changement
à
Qu'il explique un peu plus:
http://www.techotopia.com/index.php/Windows_PowerShell_1.0_Pipes_and_Redirection#Windows_PowerShell_Redirection_Operators