好吧,我在这里看到了关于这个问题的答案,但我不明白它以及下一步是什么。 原来的问题 如果我想让这条线工作,我该怎么做
$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
默认情况下,SCCM 程序使用当前计算机的 SYSTEM 帐户执行。
如果这是来自包/程序模型的程序,您需要在程序的属性中进行更改,转到“环境”,选择“程序可以运行:仅当用户登录时”和“运行方式”用户的权限”也可能转到“高级”并选择“当将此程序分配给计算机时:为每个登录的用户运行一次”
如果是应用程序类型,您必须转到部署类型的属性和“用户体验”,然后将“安装行为”更改为“为用户安装”。
这将是 SCCM 内部方法来执行您想要的操作。当然,这也意味着您失去所有管理权限和访问权限,因为上下文现在是登录用户的。访问用户配置文件应该没有问题(更好的环境变量是 $env:appdata 顺便说一句),但您还需要每个用户对 $dirFiles 进行读取访问。
另一种方法(如果只需对所有计算机执行一次)将保留管理员权限,而不是使用环境变量,让所有用户使用“gci C:\users”(减去公共配置文件)之类的内容,并且然后用管理员一次性替换所有用户文件。
我正在尝试回答您提出的原始问题:您可以创建自己的变量来替换 $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
使用通配符 * 代替任何用户名变量,以指示用户文件夹的所有内容。