远程获取默认打印机

 大豆子 发布于 2023-02-09 19:01

Windows 7的:

cscript C:\Windows\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs -g

Windows XP:

cscript C:\windows\system32\prnmngr.vbs -g

这些将获得当前系统的默认打印机.我想知道是否有办法在我的计算机上运行它以通过计算机名称获取远程计算机的默认打印机?

我试过跑:

psexec \\c78572 -i -d cscript C:\Windows\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs -g

它似乎运行..但我只在远程计算机上的快速弹出cmd行窗口中看到结果而不是我的.我所看到的就是:

cscript started with process ID 568.

在powershell gwmi win32_printer -computername c78572工作..但我不知道如何排序它以显示默认打印机.

编辑12/20/13我试图将它与显示所有打印机和默认设置相结合,但我无法让它工作:

while (1) {
$tag1 = Read-Host 'Enter tag # or Q to quit'
if ($tag1 -eq "Q") {
    break;
}

cls

sc.exe \\$tag1 start RemoteRegistry;

cls

start-sleep -seconds 2

cls

$OSInfo = get-wmiobject -class win32_operatingsystem -computername $tag1;
$OSInfo | Format-Table -Property @{Name="OS Name";Expression={$_.Caption}},@{Name="System Boot Time";Expression={$_.ConvertToDateTime($_.LastBootUpTime)}} -AutoSize;


gwmi win32_printer -computername $tag1 | ft -Property @{Name="Printer Name";Expression={$_.Name}} -AutoSize;

$Computer = $tag1
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('currentuser', $Computer)
$RegKey= $Reg.OpenSubKey('Software\Microsoft\Windows NT\CurrentVersion\Windows')
$DefaultPrinter = $RegKey.GetValue("Device")
$DefaultPrinter | ConvertFrom-Csv -Header Name, Provider, Order| Select Name

# Alt method: Get-WmiObject win32_printer -computername c60311

}

1 个回答
  • 您可以使用wmi32_printer获取默认值.这是代码:

    $AllPrinters = gwmi win32_printer -computername c78572
    $DefaultPrinter = $AllPrinters | where {$_.Default -eq $true}
    

    这将返回所有本地连接的打印机.如果你想获得一个网络连接打印机列表(如下面Aaron所述),你会遇到一些问题.上述脚本不起作用,因为WMI在本地计算机上运行,​​而不是在用户级别上运行.经过大量研究,获取此信息的一种方法是运行一个登录脚本,因为基本上没有其他方法可以远程使用WMI来获取登录用户的信息.

    如果我们不能使用WMI,如何真正做到这一点?使用后门.所有相关信息都存储在注册表中.输出可能不是很漂亮,但它会为您提供我们需要的所有信息.我们只关注3个关键位置:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers
    

    这包含所有本地安装的打印机.忘记它,使用gwmi win32_printer命令获取此列表.

    HKEY_CURRENT_USER\Printers\Settings
    

    这包含所有当前登录的用户安装的打印机.它没有默认的打印机信息.

    HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device
    

    这是获取当前登录用户安装的默认打印机的位置.这就是Aaron特别想要的.

    因此,我们可以使用PowerShell连接到远程注册表,并使用以下脚本读取当前登录用户的默认打印机:

    $Computer = "c78572"
    $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('currentuser', $Computer)
    $RegKey= $Reg.OpenSubKey('Software\Microsoft\Windows NT\CurrentVersion\Windows')
    $DefaultPrinter = $RegKey.GetValue("Device")
    $DefaultPrinter | ConvertFrom-Csv -Header Name, Provider, Order| Select Name
    

    ----编辑 - 获取所有打印机列表----

    列出远程计算机上的所有打印机:

    $Computer = "c78572"
    
    #Get Local Printers:
    $Printers = @(Get-WmiObject win32_printer -computername $Computer | Select Name)
    
    #Get List of Network Printers:
    $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('currentuser', $Computer)
    $RegKey= $Reg.OpenSubKey('Printers\Settings')
    $Printers += @($RegKey.GetValueNames())
    
    #Output List of Printers
    Write-Output $Printers | ft -Property @{Name="Printer Name";Expression={$_.Name}} -AutoSize
    
    
    #Get Default Printer
    $Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('currentuser', $Computer)
    $RegKey= $Reg.OpenSubKey('Software\Microsoft\Windows NT\CurrentVersion\Windows')
    $DefaultPrinter = $RegKey.GetValue("Device")
    
    #Output the Default Printer
    Write-Output $DefaultPrinter | ConvertFrom-Csv -Header Name, Provider, Order| Select Name | ft -Property @{Name="Default Printer Name";Expression={$_.Name}} -AutoSize
    

    2023-02-09 19:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有