删除本地用户主页Dir powershell

时间:2018-01-22 14:46:53

标签: powershell windows-server-2008

function deleteUsers($hash) {
   foreach ($h in $hash.GetEnumerator()) {
    Try
    {
        Remove-LocalUser -Name $($h.Name)
    }
    Catch{
        "Can't Delete User {0}" -f $($h.Name)
    }
   }
}

function createUsers($hash) {
   foreach ($h in $hash.GetEnumerator()) {

    $Password = ConvertTo-SecureString $($h.Value) –AsPlainText –Force
    New-LocalUser -Name $($h.Name) -Password $Password -AccountNeverExpires -FullName $($h.Name) -PasswordNeverExpires -UserMayNotChangePassword
    Add-LocalGroupMember -Group "Users" -Member $($h.Name)
   }
}


$users = @{"User blabla" = "pass"; 
           "User blabla2" = "pass2"
        }

createUsers($users)
deleteUsers($users)

这个基本的PowerShell工作正常但只是不删除用户主目录,我应该添加到deleteUsers函数来解决这个问题?我找不到一个简单的方法来实现Get-LocalUser。我只看到Get-ADUser的解决方案:/

我希望得到与以下相同类型的解决方案

$homeDir = Get-LocalUser -Name $($h.Name) -Properties HomeDirectory | Select -ExpandProperty HomeDirectory

    If (Test-Path $homeDir) 
    {
        Remove-Item -Path $homeDir -Force
    }

非常感谢

2 个答案:

答案 0 :(得分:2)

我不建议将配置文件路径构建为"C:\\Users\\{0}" -f $h.Name,然后按该路径过滤Win32_UserProfile。我们无法保证用户的个人资料始终位于C:\Users\<username>。通常,更好的方法是:

  1. 确定用户的SID:

    $name = 'someuser'
    $fltr = "name='${name}' and domain='${env:computername}'"
    $sid  = Get-WmiObject Win32_UserAccount -Filter $fltr |
            Select-Object -Expand SID
    

    $name = 'someuser'
    $acct = New-Object Security.Principal.NTAccount($name)
    $sid  = $acct.Translate([Security.Principal.SecurityIdentifier]).Value
    
  2. 使用SID查找和删除个人资料:

    Get-WmiObject Win32_UserProfile -Filter "sid='${sid}'" | ForEach-Object {
        $_.Delete()
    }
    
  3. 删除帐户:

    Remove-LocalUser -Name $name
    

    或(如果你正在运行Windows的旧版本)

    ([adsi]'WinNT://.').Delete('user', $name)
    
  4. 按顺序。

    如果您已删除帐户并需要删除孤立的个人资料,则可以对引用次数为零的个人资料过滤Win32_UserProfile

    Get-WmiObject Win32_UserProfile -Filter 'refcount=0' | ForEach-Object {
        $_.Delete()
    }
    

    另请注意,$profileautomatic variable,其中包含PowerShell profile的路径,因此您不应将该变量用于其他内容。

答案 1 :(得分:0)

感谢TheIncorrigible1,我终于完成了这个

function deleteUsers($hash) {
   foreach ($h in $hash.GetEnumerator()) {
    Try
    {
        Remove-LocalUser -Name $($h.Name)
        $pathUser = "C:\\Users\\{0}" -f "$($h.Name)" 
        $profile = GWMI -class Win32_UserProfile -Filter "LocalPath='$pathUser'"
        $profile.Delete()
        "[ OK ]User {0} deleted" -f $($h.Name)
    }
    Catch{
        "Can't Delete User {0}" -f $($h.Name)
    }
   }
}