$ENV:SCCM Powershell 脚本中的用户名

问题描述 投票:0回答:3

好吧,我在这里看到了关于这个问题的答案,但我不明白它以及下一步是什么。 原来的问题 如果我想让这条线工作,我该怎么做

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

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

([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
powershell environment-variables administrator sccm non-admin
3个回答
0
投票

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

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

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

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

另一种方法(如果只需对所有计算机执行一次)将保留管理员权限,而不是使用环境变量,让所有用户使用“gci C:\users”(减去公共配置文件)之类的内容,并且然后用管理员一次性替换所有用户文件。


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  

0
投票

使用通配符 * 代替任何用户名变量,以指示用户文件夹的所有内容。

© www.soinside.com 2019 - 2024. All rights reserved.