我试图使用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
我错过了什么?
答案 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