我能够使用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。
答案 0 :(得分:0)
在这种情况下,CIM cmdlet不会返回活动对象。 该对象没有附加.Rename()
方法。
但是,WMI cmdlet 做使用.Rename()
方法返回活动对象。因此...使用Get-WmiObject -Class Win32_UserAccount
代替Get-CimInstance -ClassName Win32_UserAccount
。 [咧嘴]
答案 1 :(得分:0)
$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
}
}