如何使用Win32_UserAccount重命名方法?

时间:2019-03-21 18:43:29

标签: powershell

我能够使用Get-CimInstance Win32_UserAccount列出远程计算机上的用户。获得用户后,我想重命名管理员帐户。下面是代码,但它不起作用。进行这项工作的任何提示吗?

$hostname = "SERVER1"
$newname  = "Server_Admin"
$administrator = Get-CimInstance Win32_UserAccount -ComputerName $hostname |
                 where SID -like 'S-1-5-*-500' -ErrorAction SilentlyContinue
$oldname = $administrator.Name

$oldname.Rename($newname)

以上命令失败,并显示错误

  

方法调用失败,因为[System.String]不包含名为'rename'的方法。

使用Set-CimInstance

Set-CimInstance -InputObject $administrator -Property @{name=$newname} -PassThru

出现错误

  

无法修改对象“ Win32_UserAccount”的只读属性“名称”

使用的PowerShell版本是5.1。

2 个答案:

答案 0 :(得分:0)

在这种情况下,CIM cmdlet不会返回活动对象。 该对象没有附加.Rename()方法

但是,WMI cmdlet 使用.Rename()方法返回活动对象。因此...使用Get-WmiObject -Class Win32_UserAccount代替Get-CimInstance -ClassName Win32_UserAccount。 [咧嘴]

答案 1 :(得分:0)

使用PowerShell版本5.1

使用Invoke-CIMMethod,我可以重命名该帐户。

$serverlist = Get-Content C:\Temp\servers.txt
$newname = "Server_Admin"

foreach ($hostname in $serverlist)
{
#Check if server is online.
    if (Test-Connection -ComputerName $hostname -Count 1 -Delay 2 -BufferSize 1452 -Quiet)
    {
#Get the Administrator user from the remote computer
        $administrator = get-ciminstance win32_useraccount -ComputerName $hostname  | Where-Object SID -Like 'S-1-5-*-500' -ErrorAction SilentlyContinue 
#Display retrieved account
        write-host $administrator
#Rename the administrator account
        Invoke-CimMethod -InputObject $administrator -ComputerName $hostname -MethodName "Rename" -Arguments @{name = $newname }
#Get and display account details for the renamed account
        get-ciminstance win32_useraccount -ComputerName $hostname | Where-Object SID -Like 'S-1-5-*-500' | Select-Object Name,FullName,Status,Disabled,Lockout,Domain,LocalAccount,SID,SIDType,AccountType | sort Status | format-table -groupby Status 
    }
}