我想使用Powershell脚本在注销时删除所有本地存储的用户配置文件。我有以下脚本:
Set-ExecutionPolicyRemoteSigned[gc]::collect()
cmd /c start reg unload "HKCU"Remove-PSDrive HKCU import-module C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ManageUserProfiles\ManageUserProfiles.PSM1
get-userprofile |where{ $_.SID -ne ("S-1-5-21-3071724114-2656578308-4228372245-500")} | remove-userprofile
我是PowerShell的全新手。那么有人能告诉我这个脚本是否符合我的需求以及它是如何运行的?你能解释一下$_.SID -ne ("S-1-5-21-3071724114-2656578308-4228372245-500")
的含义吗?提前谢谢。
答案 0 :(得分:0)
我不熟悉您正在运行的模块,看起来应该是6行而不是3行(在[gc]
之前,Remove-PSDrive
之前和Import-Module
之前插入中断)。
接下来,在Set-ExecutionPolicy
和RemoteSigned
之间添加一个空格。
现在,该脚本似乎收集用户配置文件,通过Where
语句管理它们,该语句从配置文件列表中排除管理员帐户,然后删除所有剩余的配置文件。让我们一步一步......
Set-ExecutionPolicy RemoteSigned
这会设置您的执行策略。我将假设这是为了避免您在几步中加载的无符号模块出现问题。
[gc]::collect()
这会强制垃圾收集清理内存并删除未使用的资源。这条线可能会被跳过。
cmd /c start reg unload "HKCU"
这使用reg.exe命令行应用程序从当前注册表集中卸载HKEY_CURRENT_USER配置单元。这需要在删除配置文件之前完成,因为您无法删除正在使用的文件。
Remove-PSDrive HKCU
这几乎完全相同,但对于PowerShell的注册管理机构提供商而言。我猜这是因为你没有收到错误,或者它没有尝试重新加载HKCU蜂巢。
C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ManageUserProfiles\ManageUserProfiles.PSM1
这会加载管理用户个人资料'模块。我不熟悉该模块,但您需要确保在运行该模块的计算机上安装了该模块,因此如果您在所有计算机上运行此模块,则需要在所有计算机上安装该模块。你的电脑。
get-userprofile |where{ $_.SID -ne ("S-1-5-21-3071724114-2656578308-4228372245-500")} | remove-userprofile
这是您刚刚加载的模块的命令。我假设它将用户配置文件作为某种自定义对象,然后通过声明它只允许不包含的配置文件对象(Where
来管道排除管理员帐户的-ne
语句。是'不等于'运算符)具有等于" S-1-5-21-3071724114-2656578308-4228372245-500"的SID属性。因此,除了管理员帐户的配置文件之外的所有用户配置文件都会通过管道传送到Remove-UserProfile
命令,我们可以假设删除每个通过管道传送给它的配置文件。
希望这可以解释您的脚本正在做什么。