Как я могу использовать Invoke-WmiMethod для переименования компьютера - PullRequest
1 голос
/ 24 июня 2010

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

(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

Чего мне не хватает?

Ответы [ 2 ]

3 голосов
/ 28 июня 2010

Вам необходимо указать экземпляр класса 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

, который функционально эквивалентен синтаксису Renew, указанному вами в gwmi.Этот синтаксис неявно извлекает экземпляр класса 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 голосов
/ 25 июня 2010

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

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

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