现在的位置: 首页 > 综合 > 正文

在 PowerShell 中使用 WMI 远程调用

2013年08月10日 ⁄ 综合 ⁄ 共 2246字 ⁄ 字号 评论关闭

PowerShell 代码如下:

 

#---------------------------------------------------------------------

# 参数定义

#---------------------------------------------------------------------

param(

[string]$computerName, 

[string]$cmdLine, 

[string]$usr, 

[string]$pwd

)


#---------------------------------------------------------------------

# 执行 WMI 远程调用

#---------------------------------------------------------------------

[System.Management.ConnectionOptions] $connOps = New-Object -TypeName System.Management.ConnectionOptions;

$connOps.Username = $usr;  

$connOps.Password = $pwd;  

[System.Management.ManagementScope] $scope = New-Object -TypeName System.Management.ManagementScope "//$computerName/root/cimv2", $connOps;

[System.Management.ManagementPath] $path = New-Object -TypeName System.Management.ManagementPath "Win32_Process";

[System.Management.ManagementClass] $mgmtClass = New-Object -TypeName System.Management.ManagementClass $scope, $path, $null;


[System.Management.ManagementBaseObject] $inParams = $mgmtClass.GetMethodParameters("Create");

$inParams["CommandLine"] = "cmd.exe /c $cmdLine";

[System.Management.ManagementBaseObject] $ret = $mgmtClass.InvokeMethod("Create", $inParams, $null);


#---------------------------------------------------------------------

# 判断远程执行是否成功并退出

#---------------------------------------------------------------------

$errCode = [System.Convert]::ToUInt32($ret["ReturnValue"]);

if($errCode -ne 0)

{

    throw "Execute [RemoteExecute-Command.ps1] failed. Error code: $errCode.";

}


exit


将该代码保存为文件 “WMIRemoteInvoke.ps1”,则调用方式为:
./WMIRemoteInvoke.ps1 <远程机名称> <命令> <用户名> <密码>

例如:
./WMIRemoteInvoke.ps1 Machine1 "shutdown" "user" "MyPassword"
该 PowerShell 脚本所对应的 C# 代码形式如下:
 

抱歉!评论已关闭.