0
votes

La variable PowerShell ne contient pas tous les objets

J'ai eu la variable suivante $ listofusers strud> qui renvoie les objets ci-dessous dans deux colonnes:

    #get the objectSid of the source account
    $objectSid = $SourceAccount.objectSid

    #copy source account objectSid to target account msExchMasterAccountSid
    $TargetAccount | Set-ADUser -Replace @{"msExchMasterAccountSid"=$objectSid}
    #enable targetaccount
    $TargetAccount | Enable-ADAccount

    #disable the source account
    $SourceAccount | Disable-ADAccount
    #move the migrated user into prod OU
    $TargetAccount | Move-ADObject -TargetPath "ou=test,dc=contoso,dc=com"


9 commentaires

Je ne comprends pas, $ listofusers est déjà une collection ...


Je voulais juste diviser les colonnes de la variable en tenant la logique pour un traitement ultérieur. Je pense que Itchydon m'a donné la bonne entrée.


@Stacklad - comme Roque Sosa implicite ... Il y a rarement une bonne raison de briser les articles associés comme vous le faites. Ils sont déjà dans une collection et peuvent être facilement utilisés comme via la même méthode que vous utilisez pour détruire l'association ... $ listofusers.sourceuer pour l'ensemble de l'ensemble ou $ listofusers [ $ Index] .sourceuser [ou itérer à travers la liste] pour en obtenir un. Êtes-vous sûr de vous avoir besoin de casser l'association?


Bonjour @lee_Dailey, je ne suis pas sûr, d'être honnête, j'ai besoin de progresser cela et de voir comment ça se passe. En attendant, cela serait capable de me fournir un exemple selon votre considération?


@Stacklad - Les réponses de itchydon & Roque Sosa contiennent la raison de votre problème et un moyen de travail pour briser l'association en deux collections indépendantes. Il n'y a rien à vous donner comme exemple de ne pas casser l'association puisque vous n'avez pas mentionné le raisonnement qui vous a conduit à ce point. [ Grin ]


@Lee_Dailey, j'ai édité mon message avec les informations manquantes.


@Stacklad - Veuillez vérifier ma réponse pour une façon de gérer le besoin de valeurs individuelles tout en conservant l'association initiale des différentes parties.


Bonjour @lee_Dailey, j'aime l'approche de votre logique et je me demandais si vous pouviez m'aider à remplir les pièces manquantes que j'ai ajoutées dans la publication indiquée comme "nouvelle mise à jour". Cela compléterait le script que je travaille actuellement. Merci beaucoup


@Stacklad - OK, j'ai réécrit ma réponse avec ce qui fonctionnera probablement. Comme auparavant, je ne peux pas le tester car je n'ai aucun accès publicitaire.


3 Réponses :


0
votes

$ SourceUtilisers et $ DestinationUsers ne contient que les derniers que les derniers parce que vous remplacez la valeur sur chaque itération de chaque foreach.

Si vous voulez séparer les propriétés Ceci: xxx

qui créera une collection de ces chaînes. Vous ne pourrez plus accéder à ces valeurs par propriété, ce qui signifie qu'une chaîne simple [] après le -expandproperty .


0 commentaires

0
votes
$SourceUsers = @()
$DestinationUsers = @()
$Results = ForEach ($User in $listofusers) {
    Write-Host "Processing SourceUser $($User.SourceUser)"
    Write-Host "Processing DestinationUser $($User.DestinationUser)"

    #Assign the content to variables
    $SourceUsers += $User.SourceUser
    $DestinationUsers += $User.DestinationUser
}

$SourceUsers = @() and $DestinationUsers = @() creates two empty
arrays which we will use in the loop
+= is an assignment operator which enables us to assign more than
one value to a variable.  According to the documentation: Increases
the value of a variable by the specified value, or appends the
specified value to the existing value.

1 commentaires

YUP - C'était ce que je voulais réaliser pour cela et qui a également travaillé aussi de cette manière: #Assigner le contenu des variables $ SourceUtilisateurs = $ listofuser.sourceuser $ DestinationAusersers = $ listofusers.destinationUser merci pour votre aide :-)



0
votes

Voici une démonstration du concept que j'essayais de traverser. [ grin ] Il conserve l'association des objets de votre CSV dans l'objet d'origine aussi longtemps que possible. Le code n'a pas été testé depuis que je n'ai aucun accès publicitaire.

Qu'est-ce que c'est ...

  • Factes Lecture dans un fichier CSV
    Lorsque vous êtes prêt à utiliser des données réelles, remplacez l'ensemble de la "région" avec un appel à importateur-csv .
  • iTère à travers la liste
  • construit une écaille des paramètres pour les appels d'annonce de
    Voir Get-Aide À propos_splatting Pour plus d'informations sur celui-ci merveilleusement utile idée.
  • appels get-aduseur avec chacun sur les ensembles de données utilisateur source / cible
  • stocke ce qui précède
  • utilise les informations de compte stockées pour ...
    == Remplacer le .Objectsid du compte cible
    == Activer le compte cible
    == Désactiver le compte source
    == Déplacez le compte cible sur le ou sur la valeur souhaitée Le codé dur OU pourrait être défini avec une variable pour en faire un TAD plus flexible. Cependant, cela semble être une opération unique - il n'y a probablement aucun avantage.

    Si vous souhaitez ajouter une journalisation, faites-le dans la même boucle.

    Il n'y a pas de manipulation d'erreur, non plus. Cela devrait être ajouté avec un essayer / attraper autour de chaque appel d'annonce et de la journalisation du succès et de l'échec.

    Le code ... xxx

    Aucune sortie indiquée car je ne peux pas réellement exécuter cette annonce. [ grin ]


2 commentaires

Merci, LEE_DAILEY C'est très utile pour moi de tester et de mettre en œuvre plus loin.


@Stacklad - Vous êtes très bienvenu! Content d'aider quand je peux ... [ Grin ]