Windows命令行上是否有添加本地打印机端口的命令?

时间:2019-04-09 12:28:44

标签: powershell cmd command-line

使用PowerShell,我使用:

Add-PrinterPort -Name "NameYourLocalPort:"

添加本地打印机端口。

Windows命令行中的哪个命令?

我已经阅读了此答案以及其他一些答案,但是它们不能解决我的问题。

Create a local port for a printer

2 个答案:

答案 0 :(得分:0)

您可以使用Printing_Admin_Scripts添加打印机端口

cd c:\windows\system32\printing_admin_scripts\en-us\

cscript prnmngr.vbs -a -p "PrinterName" -m "PrinterDriver" -r "lpt1:"

答案 1 :(得分:0)

public static class Winspool
    {
        [StructLayout(LayoutKind.Sequential)]
        private class PRINTER_DEFAULTS
        {
            public string pDatatype;
            public IntPtr pDevMode;
            public int DesiredAccess;
        }

        [DllImport("winspool.drv", EntryPoint = "XcvDataW", SetLastError = true)]
        private static extern bool XcvData(
            IntPtr hXcv,
            [MarshalAs(UnmanagedType.LPWStr)] string pszDataName,
            IntPtr pInputData,
            uint cbInputData,
            IntPtr pOutputData,
            uint cbOutputData,
            out uint pcbOutputNeeded,
            out uint pwdStatus);

        [DllImport("winspool.drv", EntryPoint = "OpenPrinterA", SetLastError = true)]
        private static extern int OpenPrinter(
            string pPrinterName,
            ref IntPtr phPrinter,
            PRINTER_DEFAULTS pDefault);

        [DllImport("winspool.drv", EntryPoint = "ClosePrinter")]
        private static extern int ClosePrinter(IntPtr hPrinter);

        public static int AddLocalPort(string portName)
        {
            PRINTER_DEFAULTS def = new PRINTER_DEFAULTS();

            def.pDatatype = null;
            def.pDevMode = IntPtr.Zero;
            def.DesiredAccess = 1; //Server Access Administer

            IntPtr hPrinter = IntPtr.Zero;

            int n = OpenPrinter(",XcvMonitor Local Port", ref hPrinter, def);
            if (n == 0)
                return Marshal.GetLastWin32Error();

            if (!portName.EndsWith("\0"))
                portName += "\0"; // Must be a null terminated string

            // Must get the size in bytes. Rememeber .NET strings are formed by 2-byte characters
            uint size = (uint)(portName.Length * 2);

            // Alloc memory in HGlobal to set the portName
            IntPtr portPtr = Marshal.AllocHGlobal((int)size);
            Marshal.Copy(portName.ToCharArray(), 0, portPtr, portName.Length);

            uint needed; // Not that needed in fact...
            uint xcvResult; // Will receive de result here

            XcvData(hPrinter, "AddPort", portPtr, size, IntPtr.Zero, 0, out needed, out xcvResult);

            ClosePrinter(hPrinter);
            Marshal.FreeHGlobal(portPtr);

            return (int)xcvResult;
        }
    }

然后只需在您的代码上调用Winspool.AddLocalPort(@"C:\MyLocalPortName.txt");