设为首页 收藏本站
查看: 1119|回复: 0

Powershell 修改用户配置文件

[复制链接]

尚未签到

发表于 2018-9-1 13:02:55 | 显示全部楼层 |阅读模式
#创建SymLink的方法,这个网上发现有现成的,我就直接下载了  
function New-Symlink {
  
   
  
    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 {
  
   
  
    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 {
  
   
  
    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 {
  
   
  
    [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=$true
  
while($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
  
    }
  
}



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-561143-1-1.html 上篇帖子: 【NetApp】使用powershell mount和umount Volume-Acadia的技术小站 下篇帖子: Powershell变更AD用户的属性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表