代码之家  ›  专栏  ›  技术社区  ›  Andy Schneider

如何使用invoke wmiethod重命名计算机

  •  1
  • Andy Schneider  · 技术社区  · 14 年前

    我正在尝试使用invoke wmi方法对win32_computersitem类调用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 回复  |  直到 14 年前
        1
  •  3
  •   xcud    14 年前

    您需要使用路径参数指定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重命名语法。此语法隐式检索要对其调用方法的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
    
        2
  •  0
  •   George Howarth    14 年前

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

    [String]$newName = "IWasRenamed"
    [String]$password = $null
    [String]$username = $null
    
    Invoke-WmiMethod -Path Win32_ComputerSystem -Name Rename -ArgumentList $newName, $password, $username