【问题标题】:Using VBScript to control an MMC object使用 VBScript 控制 MMC 对象
【发布时间】:2016-01-07 14:56:59
【问题描述】:

好的,所以,我正在编写一个在 MMC Snapin 中执行一些命令的脚本,我在编写这种脚本方面不是很有经验,但我已经取得了很大的进步......我遇到的问题是,如果我在每次脚本运行时创建一个新对象,它会在加载 snapin 及其中的所有内容时大大延迟我的整个脚本(这可能需要长达五分钟)。如果它可以加载一次管理单元内容,然后根据需要对其进行控制,并且仅在还没有打开的情况下创建一个新对象,那么当我运行脚本有时 100 次时,我将节省大量时间天。

问题是,我不完全确定如何实现这一目标。经过一番研究,我认为这将是 GetObject,但是当我这样做时

Dim objMMC
Set objMMC = GetObject("", "MMC20.Application")

它似乎创建了一个没有加载管理单元的新 mmc 窗口,而不是获取现有的加载了我想要的管理单元的窗口。

有什么建议吗?我是完全偏离了基地,使用了完全错误的命令,还是我可以做一些简单的改变来解决这个问题?

编辑: 是否有一些奇怪的解决方法可以实现这一点,比如将对象存储到临时文件中,这样我至少可以通过单个会话重用它。

我处于一种奇怪的情况,我试图向 powershell 脚本添加功能,但找不到直接在 powershell 中执行此操作的方法,所以我正在设置一个 vbscript 来完成其中的一部分并且从 powershell 调用 vbscript。我已经做了很多研究来弄清楚如何在 vbscript 中做到这一点(而且我仍然不确定所有这些)所以我想在我走得更远之前,我会试着弄清楚这是否是甚至可行(在 vbscript 或 c# 或 c++ 或任何其他人可以建议的语言中)...

总的来说,我想要做的是检查是否打开了包含 DHCP 管理单元的 MMC 窗口。如果是这样,请将其分配给变量。如果没有,请创建一个。 然后它将从 csv 或 txt 文件中读取,并使用这些值来确定在 snapin 中导航到哪个节点(DHCP>ServerName>IPv4>ScopeName>Scope Options)。(我主要在 vbscript 中解决了这部分,但是不知道如何在 C++ 或 C# 中执行此操作) 最后,我需要能够执行右键单击菜单项以“配置选项”,导航出现的弹出窗口的选项卡,输入一个值,然后应用更改/单击确定以关闭弹出窗口。最坏的情况,如果我不能通过实际向对象本身发送命令来“正常”地做到这一点,这部分我可以通过模仿击键来完成,但如果它是可以避免的,我不想这样做,因为它很草率。 然后,我基本上只需要以某种方式提醒 powershell 脚本我“已完成”,以便它可以继续,或者在出现错误时发出警报。

我不是要任何人来指导我完成这一切,我只是想知道这些步骤中的任何一个是否像我所描述的那样不可行,特别是如果我将不得不切换到 c++ 或c# 实现第一部分,因此重新学习所需的命令。

【问题讨论】:

    标签: vbscript mmc


    【解决方案1】:

    ...只有在还没有打开的时候才创建一个新对象...

    不,这在 VBS 中是不可能的,你需要这样做

    Dim objMMC
    Set objMMC = WScript.CreateObject("MMC20.Application")
    

    如果我每次运行脚本时都创建一个新对象,这将大大延迟我的整个脚本

    这种情况是VBS语言不对,需要使用C#或者C++可执行。

    【讨论】:

    • 如果真的是这样,GetObject 的初衷是什么?我看到的一切似乎都表明它是为了获取现有对象而不是创建新对象。我已经知道如何使用 createobject 创建对象。但是真的没有办法用 vbscript 控制以前创建的对象吗?我不希望一步命令自动确定一个是否打开,如果没有打开一个,我只想能够尝试获取现有的,然后编写一个 if 语句,如果找不到,它会打开一个新的。
    • GetObject 的目的是从文件中返回对自动化对象的引用。 :msdn.microsoft.com/en-us/library/…
    • GetObject(, "foo.application") 适用于某些对象(例如 MS Office 应用程序),但并非适用于所有对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多