如何使用Invoke-WmiMethod重命名计算机

时间:2010-06-24 18:44:45

标签: powershell powershell-v2.0

我试图使用Invoke-WMI方法在Win32_ComputerSytem类上调用Rename方法。使用此语法可以正常工作

(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 个答案:

答案 0 :(得分:3)

您需要使用Path参数指定Win32_ComputerSystem类的实例:

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

答案 1 :(得分:0)

Rename方法有三个参数。我猜Invoke-WmiMethod使用反射来调用方法,所以你必须指定所有三个参数。试试这个:

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

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