2010-06-24 3 views
1

Я пытаюсь вызвать метод Rename в классе Win32_ComputerSytem с использованием метода Invoke-WMI. Используя этот синтаксис работает отличноКак я могу использовать Invoke-WmiMethod для переименования компьютера

(gwmi win32_ComputerSystem).Rename("NEWNAME") 

Это также отлично работает для демонстрационных целей

Invoke-WmiMethod -path win32_process -Name create -ArgumentList notepad 

Однако, когда я пытаюсь следующее, я получаю ошибку

11 > Invoke-WmiMethod -path win32_computersystem -Name Rename -ArgumentList IwasRenamed 
Invoke-WmiMethod : Invalid method Parameter(s) 
At line:1 char:17 
+ Invoke-WmiMethod <<<< -path win32_computersystem -Name Rename -ArgumentList IwasRenamed 
    + CategoryInfo   : InvalidOperation: (:) [Invoke-WmiMethod], ManagementExcepti 
    on 
    + FullyQualifiedErrorId : InvokeWMIManagementException,Microsoft.PowerShell.Commands. 
    InvokeWmiMethod 

Что я упускаю?

+0

Оказывается, для неопытного глаза, что в первом вызове вы переименовываете экземпляр класса. Во втором вызове (Invoke-WMIMethod) нет объекта. «Win32_ComputerSystem» - это тип, а не объект. Нет? – xcud

+0

Верно, но я подумал, что Командлет создаст экземпляр и вызовет метод «под обложками». Использование этого метода для создания процесса (notepad.exe) отлично работает. –

+0

Я подтвердил свое подозрение и представил ответ с рабочим примером синтаксиса. – xcud

ответ

3

Вы должны указать экземпляр класса Win32_ComputerSystem с помощью параметра Path:

PS C:\Users\ben> $path = "Win32_ComputerSystem.Name='OLDNAME'" 
PS C:\Users\ben> Invoke-WmiMethod -Name Rename -Path $path -ArgumentList "NEWNAME" 

__GENUS   : 2 
__CLASS   : __PARAMETERS 
__SUPERCLASS  : 
__DYNASTY  : __PARAMETERS 
__RELPATH  : 
__PROPERTY_COUNT : 1 
__DERIVATION  : {} 
__SERVER   : 
__NAMESPACE  : 
__PATH   : 
ReturnValue  : 0 

который функционально эквивалентен синтаксису Gwmi Rename, что вы упомянули. Этот синтаксис неявно возвращает экземпляр класса Win32_ComputerSystem вызвать метод на:

PS C:\Users\ben> (gwmi win32_computersystem).rename("NEWNAME") 

__GENUS   : 2 
__CLASS   : __PARAMETERS 
__SUPERCLASS  : 
__DYNASTY  : __PARAMETERS 
__RELPATH  : 
__PROPERTY_COUNT : 1 
__DERIVATION  : {} 
__SERVER   : 
__NAMESPACE  : 
__PATH   : 
ReturnValue  : 0 

Вот еще один крутой синтаксис:

PS C:\Users\ben> ([wmi]"Win32_ComputerSystem.Name='OLDNAME'").Rename("NEWNAME") 

__GENUS   : 2 
__CLASS   : __PARAMETERS 
__SUPERCLASS  : 
__DYNASTY  : __PARAMETERS 
__RELPATH  : 
__PROPERTY_COUNT : 1 
__DERIVATION  : {} 
__SERVER   : 
__NAMESPACE  : 
__PATH   : 
ReturnValue  : 0 
0

Метод Rename принимает три параметра. Я предполагаю, что Invoke-WmiMethod использует отражение для вызова метода, поэтому вам нужно указать все три параметра. Попробуйте это:

[String]$newName = "IWasRenamed" 
[String]$password = $null 
[String]$username = $null 

Invoke-WmiMethod -Path Win32_ComputerSystem -Name Rename -ArgumentList $newName, $password, $username 
+0

Я все еще получаю ошибку, используя все 3 аргумента –

Смежные вопросы