2013-12-17 129 views
2

的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工作..但我不知道如何對它進行排序,以顯示我的默認打印機。

編輯13年12月20日,我試圖把它與一個顯示所有打印機和默認的結合,但我不能得到它的工作:

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 

}

回答

8

您可以使用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 
+0

貌似正確的命令,但唯一的問題是,他們是網絡打印機,所以它並沒有將它們列爲默認WH實際上,當你去看時,它們被設置爲一個。 – Aaron

+0

您說得對,使用WMI無法獲得用戶的網絡打印機。請參閱上述編輯。我已經添加了一種方法來訪問當前登錄用戶的網絡打印機。它可以很容易地被修改,以從盒子上的所有其他未登錄用戶那裏獲得信息。 – HAL9256

+0

我正在嘗試將打印機列表與打印機列表相結合,然後在其下面使用默認列表...但它不起作用。我用我的代碼編輯了我的OP。 – Aaron