0

好的,我在这里看到了关于这个问题的答案,但我不明白,下一步是什么。 最初的问题 如果我想让这条线正常工作我应该怎么做

$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
4

2 回答 2

0

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

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

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

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

另一种方法(如果只对所有计算机执行一次)将保留管理员权限,而不是使用环境变量获取所有用户,例如“gci C:\users”(减去公共配置文件),然后与管理员一起替换所有用户文件。

于 2017-01-19T14:45:48.097 回答
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  
于 2017-01-20T09:31:05.430 回答