使用带有Powershell

时间:2016-02-04 21:47:43

标签: powershell

我正在编写一个powershell脚本来使用csv文件管理我们的本地管理员帐户。

#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 我将在明天回到工作岗位时发布真实的信息。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

快速浏览......不需要使用这个吗?我认为您的$accName.name将使用机器名称。

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

答案 1 :(得分: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)