2016-02-04 65 views
0

我正在寫一個powershell腳本來管理我們的本地管理員帳戶,使用csv文件。使用delete()方法刪除本地管理員帳戶帶有Powershell的ADSI

#variable to store the data in data.csv 
$userobjects = Import-CSV C:-data.csv 
function main-list{ 
    Write-Host "--------------------------------------" 
    Write-Host "Windows Powershell Account Manager" 
    Write-Host "--------------------------------------" 
    Write-Host "1 - Change Name" 
    Write-Host "2 - Disabled Account" 
    Write-Host "3 - Delete User" 
    Write-Host "4 - Exit" 



    [int]$action = Read-Host "Enter the menu number from above" 
    if ($action -eq 1){change-name} 
    if ($action -eq 2){disable-account} 
    if ($action -eq 3){delete-user} 
    if ($action -eq 4){cls; break} 

} 



function change-name 
{ 
     foreach ($user in $userobjects) 
    { 
     #Assign the content to variables 
     $FileHostname = $user.Host 
     $FileAccount = $user.Account 
     $FileNewname = $user.Rename 
     $FileDisable = $user.Disable 
     $FileDelete = $user.Delete 

      # Rename 
      if (($user.Account -ne $user.Rename) -and ($user.Rename -ne '')) 
      { 
       #Write-Host "old name :"$FileHostname"/"$FileAccount "-> new name :"$FileHostname"/"$FileNewname 
       $connection = $FileHostname+"/"+$FileAccount 
       $accName = [ADSI]("WinNT://$connection") 
       if ($accName.path -eq "WinNT://"+$connection+"") 
       { 
        $accName.psbase.Rename($FileNewname) 
        Write-Host "Account(s) renamed" 
        $user.Account = $user.Rename 
       } 
       else 
        { 

         Write-Host "Account name :"$connection "can't be found on the host" 
        } 
      $user.Account = $user.Rename 
      $userobjects | export-csv C:-data.csv -notype 

      } 
    } 
    Write-Host "--------------------------------------" 
    main-list 
    } 


function disable-account 
{ 
    foreach ($user in $userobjects) 
    { 
     #Assign the content to variables 
     $FileHostname = $user.Host 
     $FileAccount = $user.Account 
     $FileNewname = $user.Rename 
     $FileDisable = $user.Disable 
     $FileDelete = $user.Delete 

     if ($user.Disable -eq 'yes') 
     { 
      $connection = $FileHostname+"/"+$FileAccount 
      $accName = [ADSI]("WinNT://"+$connection+"") 

      if ($accName.UserFlags -eq '515') 
      { 
       Write-Host "Account :"$connection "is already disabled" 
      } 
      else 
      { 
       $accName.description = "Account disabled" 
       $accName.UserFlags = 2 
       $accName.setinfo() 
       Write-Host "Account(s) disabled"$connection 
      } 
     } 

    } 
    Write-Host "--------------------------------------" 
    main-list 
} 

function delete-user 
{ 
foreach ($user in $userobjects) 
    { 
     #Assign the content to variables 
     $FileHostname = $user.Host 
     $FileAccount = $user.Account 
     $FileNewname = $user.Rename 
     $FileDisable = $user.Disable 
     $FileDelete = $user.Delete 


      #Delete 
      if ($user.Delete -eq 'yes') 
      { 
       $connection = $FileHostname+"/"+$FileAccount 
       $accName = [ADSI]("WinNT://"+$connection+"") 
       $accName.delete("user",$accName.name) 




        #Write-Host $connection deleted 

       } 
       else 
        { 

         Write-Host "Account name :"$connection "can't be found on the host" 
        } 
      } 

    } 

} 


$userobjects | export-csv C:-\data.csv -notype 
main-list 

我真的不知道爲什麼我有,當我嘗試使用刪除功能此消息:「未知的名稱」,這就像沒有找到本地帳戶刪除它,但我不確定。但是,當我想重新命名或禁用帳戶時,它完美地工作。

我的數據文件看起來像這樣 http://www.noelshack.com/2016-05-1454622367-capture.png 當我將回到工作時間時,我會發布真正的消息。

謝謝你的幫助。

回答

0

快速瀏覽...不需要使用這個嗎?我認爲你的$accName.name將使用機器名稱。

$accName.delete("user",$user.account) 
+0

有一個在$用戶相同的值。帳戶和$ accName.name是不是? – Starcom

0

delete()用戶電腦,這樣你[adsi]對象應綁定到計算機,並在該改爲調用Delete()

# Just the machine name, nothing more: 
$Machine = [ADSI]"WinNT://$FileHostname" 

# Now delete the user account from the machine 
$Machine.Delete('user',$FileAccount) 
相關問題