SCCM Powershell 脚本中的 $ENV:USERNAME

$ENV:USERNAME in SCCM Powershell script

好的,我在这里看到了关于这个相同问题的答案,但我不理解它以及下一步是什么。 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

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

如果这是来自 package/program 模型的程序,您必须在程序的属性中更改它,然后转到 "Environment" select "program can run: Only when a user is logged on"和 "Run with user's rights" 也可能去 "Advanced" 和 select "When this program is assigned to a computer: Run once for every user who logs on"

如果它是应用程序类型,您必须转到部署类型的属性和 "User Experience",然后将 "Installation Behavior" 更改为 "Install for User"。

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

另一种方法(如果只对所有计算机执行一次)将保留管理员权限,而不是使用环境变量让所有用户使用 "gci C:\users" 之类的东西(减去 public 个人资料),然后与管理员一起立即替换所有用户文件。

我正在尝试回答您最初提出的问题:您可以创建自己的变量来替换 $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