0

我正在研究 vCenter 6.5,社区示例对我有很大帮助,但在这种特殊情况下,我不知道发生了什么。剧本:

from __future__ import with_statement
import atexit
from tools import cli
from pyVim import connect
from pyVmomi import vim, vmodl


def get_args():
    *Boring args parsing works*
    return args

def main():
    args = get_args()
    try:
        service_instance = connect.SmartConnectNoSSL(host=args.host,
                                                user=args.user,
                                                pwd=args.password,
                                                port=int(args.port))

        atexit.register(connect.Disconnect, service_instance)
        content = service_instance.RetrieveContent()

        vm = content.searchIndex.FindByUuid(None, args.vm_uuid, True)

        creds = vim.vm.guest.NamePasswordAuthentication(
            username=args.vm_user, password=args.vm_pwd
        )

        try:
            pm = content.guestOperationsManager.processManager
            ps = vim.vm.guest.ProcessManager.ProgramSpec(
                programPath=args.path_to_program,
                arguments=args.program_arguments
            )
            res = pm.StartProgramInGuest(vm, creds, ps)
            if res > 0:
                print "Program executed, PID is %d" % res

        except IOError, e:
            print e
    except vmodl.MethodFault as error:
        print "Caught vmodl fault : " + error.msg
        return -1

    return 0

# Start program
if __name__ == "__main__":
    main()

当我在控制台中执行它时,它成功连接到目标虚拟机并打印

Program executed, PID is 2036

在任务管理器中,我看到带有提到的 PID 的进程,它是由正确的用户创建的,但是没有进程的 GUI(calc.exe)。人民币点击不允许“展开”进程。我想,这个过程是用特殊参数创建的,可能是在不同的会话中。另外,我尝试运行批处理文件来检查它是否真的执行,但答案是否定的,批处理文件没有执行。

任何帮助、建议、线索都会很棒。

PS我尝试了其他脚本并成功将文件传输到VM。

PPS 对不起我的英语。

更新:所有此类进程都从会话 0 开始。

4

1 回答 1

0

您是否尝试过 interactiveSession ?

https://github.com/vmware/pyvmomi/blob/master/docs/vim/vm/guest/GuestAuthentication.rst

此布尔参数传递给 NamePasswordAuthentication 并表示以下含义:

如果客户端想要来宾中的交互式会话,则将其设置为 true。

于 2017-08-09T23:22:58.810 回答