千家信息网

用Powershell 脚本如何修改用户配置文件

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文主要给大家简单讲讲用Powershell 脚本如何修改用户配置文件,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望用Powershell 脚本如何修
千家信息网最后更新 2026年11月01日用Powershell 脚本如何修改用户配置文件

本文主要给大家简单讲讲用Powershell 脚本如何修改用户配置文件,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望用Powershell 脚本如何修改用户配置文件这篇文章可以给大家带来一些实际帮助。

  1. 以其他管理员身份登录计算机;

  2. 确认该用户abc已经退出登录状态,可以通过任务管理器或者quser来操作

  3. 修改C:\users\abc 的文件名为新的用户名C:\users\abc1

  4. 修改注册表,这个里面有一堆根据SID命名的key,需要找到对应的,然后修改对应的profileImagePath

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

  5. 创建新的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安全错误 数据库的锁怎样保障安全 互联网络科技 深圳市人人互联网科技有限公司 湖南永感互联网科技有限公司 中关村互联网科技集团 没上市的科技互联网公司 科技与互联网发展 金融科技与互联网金融 北京互联网络科技有限公司 深圳齐家互联网科技 深圳天众互联网科技公司 互联网金融科技公司干啥的 佛山市拉法互联网科技有限公司 恒生互联网科技业指数调整周期 互联网科技包装股 科技互联网行业投资研究 互联网界的黑科技 广西泛欧互联网科技有限公司 深圳互联网科技园地址 互联网大会出现的黑科技 每日互联网科技新闻 百单网互联网科技有限公司 央行互联网金融科技公司 互联网为啥属于高科技 济南有互联网科技公司吗 伍佰万互联网科技怎么赚钱 全球科技与互联网公司市值变化 科技和互联网行业的特点 深圳互联网科技园地址 第三届互联网大会安防黑科技 青岛互联网科技园
0