$ ENV:SCNAME Powershell脚本中的USERNAME

时间:2017-01-19 12:30:43

标签: powershell environment-variables administrator sccm non-admin

好的,我在这里看到了一个关于这个问题的答案,但我不理解它,下一步是什么。 The original question 如果我希望这条线工作,我该怎么办

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

因为$ env:username在通过SCCM部署时解析为我的计算机名称。我应该如何以及在哪里进入:

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

希望你理解我

编辑**我找到了我能用到的东西,感谢bluuf和Syberdoor指出了我正确的方向

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

2 个答案:

答案 0 :(得分:0)

默认情况下,SCCM程序使用当前计算机的SYSTEM帐户执行。

如果这是程序包/程序模型中的一个程序,你要做的就是更改这个程序的属性,请转到“环境”选择“程序可以运行:仅当用户登录时”和“使用用户权限运行“也可能转到”高级“并选择”将此程序分配给计算机时:为每个登录用户运行一次“

如果是应用程序类型,则必须转到“部署类型”和“用户体验”的属性,并将“安装行为”更改为“为用户安装”。

这将是SCCM内部方法来做你想要的。它当然也意味着您丢失所有管理员权限和访问权限,因为上下文现在是登录用户的。访问userprofile应该没问题(更好的环境变量是$ env:appdata顺便说一句)但你也需要为每个用户读取$ dirFiles的访问权限。

一种不同的方法(如果只需要对所有计算机执行一次)将保留管理员权限而不是使用环境变量使所有用户获得类似“gci C:\ users”的内容(减去公共个人资料) )然后与管理员一次替换所有用户文件。

答案 1 :(得分:0)

我正在尝试回答您提出的原始问题:您可以创建自己的变量来替换$ env:username。例如下面我使用$ 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