gpt4 book ai didi

powershell - 使用管理员权限在 Powershell 登录脚本中维护用户环境变量

转载 作者:行者123 更新时间:2023-12-04 00:06:28 24 4
gpt4 key购买 nike

我不小心从我的 AD 中删除了 180 个用户,他们无法恢复。我已经在 AD 中重新创建了帐户,什么没有。由于新的 SID,这会在他们登录时在他们的笔记本电脑上创建一个新的配置文件。我正在尝试编写一个脚本,授予他们访问旧配置文件文件夹的权限,并在他们的桌面上创建一个指向那里的快捷方式。

我的脚本可以很好地解决一个问题。使用的环境变量最终会引用运行脚本的管理员帐户。用户自己无权更改其旧文件夹的安全性。我需要尝试让环境变量引用用户但拥有管理员帐户的权限来重写权限。

这是到目前为止的脚本。我目前正在使用任务计划程序部署它,这是另一种蠕虫,因为我并不完全了解那里的凭证方面。我的意思是理想情况下,该任务将以域管理员身份运行,尽快执行脚本,并让脚本将环境变量解析为登录用户。

$permission = ":(OI)(CI)M"
$sam = $env:USERNAME
$folderName = "C:\Users\$($sam)"

Invoke-Expression -Command ( 'ICACLS $folderName /grant:r $sam$($permission) /t' )

$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$Home\Desktop\Profile Backup.lnk")
$Shortcut.TargetPath = $folderName
$Shortcut.Save()

它的 $env:USERNAME 和 $home 变量给我带来了麻烦..

或者我应该有另一种方法来解决这个问题吗?

最佳答案

您可以使用 query session命令获取当前登录用户的登录名。然后创建NTAccount基于该对象检索 SIDwin32_userprofile WMI 对象找出配置文件路径。像这样:

$m = query session | Select-String -Pattern "\>console\s*(\S*)\s"
$sam = $m.Matches[0].Groups[1].value

$acc = New-Object System.Security.Principal.NTAccount($sam)
$sid = $acc.Translate([System.Security.Principal.SecurityIdentifier]).Value

$profile = Get-CimInstance -ClassName win32_userprofile -Filter "SID='$sid'"
$folderName = $profile.LocalPath

关于powershell - 使用管理员权限在 Powershell 登录脚本中维护用户环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49525994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com