0

Ok, j'ai vu une réponse ici à propos de cette même question mais je ne la comprends pas et quelle est la prochaine étape. The original question Que dois-je faire si je veux cette ligne pour travailler

$from = "$dirFiles\config.xml" 
$to = "C:\Users\$env:USERNAME\AppData\Roaming\Folder\Folder\config.xml" 
Copy-Item $from $to -recurse 

depuis $ env: nom d'utilisateur résout en mon nom de l'ordinateur lorsqu'il est déployé si SCCM. Comment et où dois-je entrer:

([Security.Principal.WindowsIdentity]::GetCurrent()).Name.replace("$ENV:USERDOMAIN\","") 

espère que vous me comprenez

modifier ** J'ai trouvé ce que je pouvais utiliser grâce à bluuf et Syberdoor qui m'a orienté dans la bonne direction

**$CurrentUser = (Get-LoggedOnUser).UserName** 
$from = "$dirFiles\config.xml" 
$to = "C:\Users\$CurrentUser\AppData\Roaming\Folder\Folder\config.xml" 
Copy-Item $from $to -recurse 
+1

Je ne le fais certainement pas, qu'essayez-vous d'accomplir? – 4c74356b41

+0

J'essaie de faire en sorte que Powerhell et SCCM copient un fichier dans le dossier utilisateur Appdata sur l'ordinateur sur lequel l'installation s'exécute. Mais j'obtiens l'erreur que le dossier C: \ Users \ "Computername" \ n'existe pas. SCCM ou powershell résolvent donc la variable $ env: USERNAME dans le nom de l'ordinateur et non le nom d'utilisateur connecté. – jetmanus

+1

donc la question évidente est, comment voulez-vous que ce soit un nom d'utilisateur, si personne n'est connecté? Quel utilisateur espérez-vous obtenir? – 4c74356b41

Répondre

0

Par défaut, les programmes SCCM sont exécutés avec le compte SYSTEM de l'ordinateur actuel.

S'il s'agit d'un programme du modèle de package/programme que vous devez faire pour modifier cela dans les propriétés du programme, allez dans "Environnement", sélectionnez "programme peut s'exécuter: uniquement lorsqu'un utilisateur est connecté" et "Exécuter avec les droits de l'utilisateur" éventuellement aussi aller à "Avancé" et sélectionnez "Lorsque ce programme est affecté à un ordinateur: Exécuter une fois pour chaque utilisateur qui se connecte"

S'il s'agit d'un type d'application, vous devez aller aux propriétés pour le type de déploiement et pour "User Experience" et modifiez "Comportement d'installation" sur "Install for User".

Ce serait la méthode interne de SCCM pour faire ce que vous voulez. Bien sûr, cela signifie également que vous perdez tous les droits d'administrateur et les accès car le contexte est maintenant celui de l'utilisateur connecté. L'accès au userprofile ne devrait poser aucun problème (la meilleure variable d'environnement serait $ env: appdata btw) mais vous aurez également besoin de readaccess pour $ dirFiles pour chaque utilisateur. Une approche différente (si cela ne doit être fait qu'une seule fois pour tous les ordinateurs) consisterait à conserver les droits d'administration et au lieu d'utiliser la variable d'environnement obtenir tous les utilisateurs avec quelque chose comme "gci C: \ users" (moins public profil), puis avec l'administrateur remplacer tous les fichiers d'utilisateurs à la fois.

+0

Donc, fondamentalement, ce n'est pas possible à moins de donner des droits d'administration aux utilisateurs – jetmanus

+0

Je suppose que vous prenez une mauvaise approche faire face à ce problème. Il existe plusieurs façons d'obtenir le nom d'utilisateur connecté (wmi class win32_computersystem par exemple), même depuis le compte système. Itérer sur le dossier c: \ users et vérifier l'activité spécifique sur un fichier ou un dossier est également possible. Une route menant à une impasse ne signifie pas que quelque chose n'est pas possible: cela signifie simplement que vous devez prendre une autre route (soit un détour ou un raccourci). – bluuf

+0

Je ne pense pas que vous auriez besoin de droits d'administrateur pour remplacer un fichier dans le profil de l'utilisateur.Les utilisateurs possèdent ces fichiers, les droits devraient être suffisants. Ce dont vous avez besoin, c'est de droits d'accès à $ dirFiles et si ceux-ci ne sont pas donnés, vous pouvez probablement utiliser le point de distribution pour résoudre ce problème pour vous. Qu'est-ce que @bluuf (et moi-même dans le dernier paragraphe) a dit est également vrai, un administrateur peut accéder aux autres utilisateurs, mais cela dépend beaucoup de votre installation si cela a du sens. Enfin savez-vous que la copie (avec privilèges administrateur) par utilisateur d'un fichier se fait facilement avec les GPP? – Syberdoor

0

J'essaie de répondre à la question initiale que vous avez posée: Vous pouvez créer votre propre variable pour remplacer le $ env: nom d'utilisateur. Par exemple ci-dessous j'utilise $ uu:

$from = "$dirFiles\config.xml" 
$uu = (([Security.Principal.WindowsIdentity]::GetCurrent().Name) -split "\\")[1] 
$to = "C:\Users\$uu\AppData\Roaming\Folder\Folder\config.xml" 
Copy-Item $from $to -recurse 
+0

Votre réponse n'a pas de sens pour moi d'être honnête (pas de flamme prévue): l'affiche ne se plaint pas de l'username ne fonctionne pas; le problème est que le script s'exécute sous le compte système de sorte que le compte d'ordinateur AD - la variable nom d'utilisateur (et aussi la méthode GetCurrent()) contiendra le compte d'utilisateur AD puisqu'il s'agit du compte utilisateur qui exécute le script. – bluuf