Как использовать метод переименования Win32_UserAccount? - PullRequest
0 голосов
/ 21 марта 2019

Я могу использовать 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

выдает ошибку

Не удалось изменить только для чтения свойство 'name' объекта 'Win32_UserAccount "

Используемая версия PowerShell - 5.1.

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Использование 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 
    }
}
0 голосов
/ 21 марта 2019

в этом случае командлет CIM НЕ возвращает живой объект. к этому объекту не прикреплен метод NO .Rename() .

однако командлет WMI DOES возвращает живой объект методом .Rename(). так что ... используйте Get-WmiObject -Class Win32_UserAccount вместо Get-CimInstance -ClassName Win32_UserAccount. [ ухмылка ]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...