gpt4 book ai didi

c# - 无法使用 prnmngr.vbs 在远程计算机上设置默认打印机

转载 作者:可可西里 更新时间:2023-11-01 10:48:22 24 4
gpt4 key购买 nike

我正在使用 WMI 作为域管理员连接到我的实验室机器。然后我运行此命令行来创建打印机:

cscript C:\Windows\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs -a -p Test002 -m "Canon Inkjet iP100 series" -r FAKE002

这很好用。

然后我运行此命令行将打印机设置为默认打印机:

cscript C:\Windows\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs -t -p Test002

那根本行不通。

一些相关的细节:

  • 两个命令行的执行方式相同
  • 如果我在本地范围内通过 WMI 运行第二个命令行,它就可以正常工作
  • 我运行脚本的用户在机器上拥有管理员权限,可以手动设置默认打印机
  • 我用来创建远程作用域的用户参数属于域管理员。
  • 当我远程运行时,脚本报告成功。没有发现任何错误。

我完全不明白为什么在使用远程 WMI 调用时具有不同参数的相同脚本不起作用。我花了几个小时搜索,但没有找到合适的答案。

这是我用来创建连接到远程机器的范围的方法:

public static ManagementScope CreateScope() {
string nameSpace = @"\\" + Parameters.FQDN + @"\root\cimv2";

ManagementPath path = new ManagementPath(nameSpace);
ConnectionOptions Connection = new ConnectionOptions();
Connection.Username = Parameters.User; // Username value includes the domain
Connection.Password = Parameters.Password;
Connection.Impersonation = ImpersonationLevel.Impersonate;

return new ManagementScope(path, Connection);

}

谁能告诉我为什么第二个命令行没有将远程机器上的打印机设置为默认打印机?

最佳答案

希望对您有所帮助。我建议您在运行时使用您的两个命令创建一个批处理文件,并以这种方式创建一个进程。但是现在测试你遇到问题的最终命令是这样的:-

string Command = @"cscript C:\Windows\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs -t -p Test002";

ManagemenConnectionOptions connOptions = new ConnectionOptions();
connOptions.Impersonation = ImpersonationLevel.Impersonate;
connOptions.EnablePrivileges = true;
tScope manScope = new ManagementScope
(String.Format(@"\\{0}\ROOT\CIMV2", Parameters.FQDN), connOptions);
manScope.Connect();

ObjectGetOptions objectGetOptions = new ObjectGetOptions();
ManagementPath managementPath = new ManagementPath("Win32_Process");
ManagementClass processClass = new ManagementClass
(manScope, managementPath, objectGetOptions);
ManagementBaseObject inParams = processClass.GetMethodParameters("Create");
inParams["CommandLine"] = Command;

ManagementBaseObject outParams = processClass.InvokeMethod("Create", inParams, null);
Console.WriteLine("Creation of the process returned: " + outParams["returnValue"]);
Console.WriteLine("Process ID: " + outParams["processId"]);

关于c# - 无法使用 prnmngr.vbs 在远程计算机上设置默认打印机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14693209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com