用Powershell 脚本如何修改用户配置文件
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,本文主要给大家简单讲讲用Powershell 脚本如何修改用户配置文件,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望用Powershell 脚本如何修
千家信息网最后更新 2025年01月23日用Powershell 脚本如何修改用户配置文件
本文主要给大家简单讲讲用Powershell 脚本如何修改用户配置文件,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望用Powershell 脚本如何修改用户配置文件这篇文章可以给大家带来一些实际帮助。
以其他管理员身份登录计算机;
确认该用户abc已经退出登录状态,可以通过任务管理器或者quser来操作
修改C:\users\abc 的文件名为新的用户名C:\users\abc1
修改注册表,这个里面有一堆根据SID命名的key,需要找到对应的,然后修改对应的profileImagePath
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
创建新的symboLink连接从 c:\users\abc <==> c:\users\abc1。windows下面有自带的mklink命令可以使用,比如 mklink /D c:\users \abc c:\users\abc1。PS5以后可以用New-item创建,但是早期的版本没有原生的PS命令,只能间接调用cmd,或者自己写一个方法
上面的操作都可以通过PS脚本来实现。
#创建SymLink的方法,这个网上发现有现成的,我就直接下载了function New-Symlink { <# .SYNOPSIS Creates a symbolic link. #> param ( [Parameter(Position=0, Mandatory=$true)] [string] $Link, [Parameter(Position=1, Mandatory=$true)] [string] $Target ) Invoke-MKLINK -Link $Link -Target $Target -Symlink}function New-Hardlink { <# .SYNOPSIS Creates a hard link. #> param ( [Parameter(Position=0, Mandatory=$true)] [string] $Link, [Parameter(Position=1, Mandatory=$true)] [string] $Target ) Invoke-MKLINK -Link $Link -Target $Target -HardLink}function New-Junction { <# .SYNOPSIS Creates a directory junction. #> param ( [Parameter(Position=0, Mandatory=$true)] [string] $Link, [Parameter(Position=1, Mandatory=$true)] [string] $Target ) Invoke-MKLINK -Link $Link -Target $Target -Junction}function Invoke-MKLINK { <# .SYNOPSIS Creates a symbolic link, hard link, or directory junction. #> [CmdletBinding(DefaultParameterSetName = "Symlink")] param ( [Parameter(Position=0, Mandatory=$true)] [string] $Link, [Parameter(Position=1, Mandatory=$true)] [string] $Target, [Parameter(ParameterSetName = "Symlink")] [switch] $Symlink = $true, [Parameter(ParameterSetName = "HardLink")] [switch] $HardLink, [Parameter(ParameterSetName = "Junction")] [switch] $Junction ) # Ensure target exists. if (-not(Test-Path $Target)) { throw "Target does not exist.`nTarget: $Target" } # Ensure link does not exist. if (Test-Path $Link) { throw "A file or directory already exists at the link path.`nLink: $Link" } $isDirectory = (Get-Item $Target).PSIsContainer $mklinkArg = "" if ($Symlink -and $isDirectory) { $mkLinkArg = "/D" } if ($Junction) { # Ensure we are linking a directory. (Junctions don't work for files.) if (-not($isDirectory)) { throw "The target is a file. Junctions cannot be created for files.`nTarget: $Target" } $mklinkArg = "/J" } if ($HardLink) { # Ensure we are linking a file. (Hard links don't work for directories.) if ($isDirectory) { throw "The target is a directory. Hard links cannot be created for directories.`nTarget: $Target" } $mkLinkArg = "/H" } # Capture the MKLINK output so we can return it properly. # Includes a redirect of STDERR to STDOUT so we can capture it as well. $output = cmd /c mklink $mkLinkArg `"$Link`" `"$Target`" 2>&1 if ($lastExitCode -ne 0) { throw "MKLINK failed. Exit code: $lastExitCode`n$output" } else { Write-Output $output }} #定义一个Flag跳出循环$flag=$truewhile($flag){ $oldName=read-host "Please input the old user name" write-host 'Searching user profile..' -ForegroundColor Cyan #测试该用户是否已经登录,这里有个小技巧把quser的字符串结果转换为对象,具体解释参考博客 http://beanxyz.blog.51cto.com/5570417/1906162 if (Test-Path "c:\users\$oldName"){ write-host "User Profile c:\users\$oldName found." -ForegroundColor Cyan #Check if the user is currently logged In $quser = (quser) -replace '\s{2,17}', ',' | ConvertFrom-Csv $sessionId = $quser | Where-Object { $_.Username -eq $newName } | select -ExpandProperty id #如果已经登录,那么强行退出这个用户 foreach($id in $sessionId){ if($id -ne $null){ write-host "Detected User $newName still login" -ForegroundColor red Write-Host "Force logoff the user" -ForegroundColor red logoff $id } } $newName=read-host "Please input the new name" $oldpath="c:\users\$oldName" $newpath="c:\users\$newName" #重命名文件夹 rename-item $oldpath $newpath -Confirm -ErrorAction Stop write-host "Searching Registry Information " -ForegroundColor Cyan #查询对应的注册表Key Get-ChildItem "hklm:\software\microsoft\windows nt\currentversion\profilelist" | foreach{ #Get the username from SID $sid=$_.Name.Split('\')[-1]; #根据SID来匹配用户,如果用户匹配成功,那么修改对应的ProfileList try{ $objSID = New-Object System.Security.Principal.SecurityIdentifier ($sid) $objUser = $objSID.Translate( [System.Security.Principal.NTAccount]) $username=$objUser.Value } catch{} #change registry keys if(($username -eq "omnicom\$oldName") -or ($username -eq "omnicom\$newName")){ write-host "Found Registry Information of user profile $newName" -ForegroundColor Cyan $keys=Get-ItemProperty "hklm:\software\microsoft\windows nt\currentversion\profilelist\$sid" $keys.ProfileImagePath=$newpath write-host "Registry key profile list is changed to $newpath" -ForegroundColor Cyan #调用上面的方法,创建Symbolink #Create new symbolink #New-Item -Path $oldpath -ItemType Junction -Value $newpath New-Symlink -Link $oldpath -Target $newpath break; } else{ write-host "$username Name not match...skip" -ForegroundColor Yellow } } $flag=$false } else { write-host "Profile is not found. Please try again" -ForegroundColor red }}
执行效果,我直接把这个文件扔到一个远程电脑的C盘下测试,然后以本地管理员身份登录,执行这个脚本,成功!
用Powershell 脚本如何修改用户配置文件就先给大家讲到这里,对于其它相关问题大家想要了解的可以持续关注我们的行业资讯。我们的板块内容每天都会捕捉一些行业新闻及专业知识分享给大家的。
用户
文件
脚本
登录
配置
方法
管理
成功
专业
可以通过
命令
注册表
管理员
行业
身份
面的
测试
专业知识
主题
书籍
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库防窜货系统批量定制
网络安全与信息化中心
网络安全非常重要
共享净化器小程序软件开发
批量更新为什么数据库死锁
济南飞鸿网络技术怎么样
12核服务器
access数据库生成表打不开
软件开发公司的目标
交通工程和网络安全与执法
软件开发危机成本难控制
当前常见的三种数据库模型是
查找某行某列位置数据库
最美设计软件开发
游戏工作室只能软件开发
装金蝶可以用那些数据库
最丰富的网络安全公众号
北京新知网络技术服务
加加软件服务器管理员密码
厦门网络安全宣传周 美亚 国科
计算机网络技术哪个专科院校好
常见的数据库技术
征途无法载入服务器列表
国家网络安全管理工作要点
软件开发需要写哪些文本
WIND数据库技术技巧
服务器主板可以用两个cpu吗
db2数据库授权
医保局网络安全应急预案
萌宠呈祥以前开的服务器进不去