Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

Windows 10/Server 2016에서 PowerShell로 프린터 및 드라이버 관리하기

지난 글에서는 Windows XP부터 최신 버전까지 다양한 Windows 환경에서 프린터와 인쇄 작업을 관리할 때 활용할 수 있는 전통적인 VBS 스크립트 방식을 살펴보았습니다. 이번 글에서는 PowerShell을 이용해 프린터, 인쇄 포트, 드라이버, 인쇄 대기열을 설치·관리·삭제할 때 자주 사용되는 핵심 명령어를 소개합니다. 여기서 다루는 방법은 Windows 10 / 8.1 및 Windows Server 2019 / 2016 / 2012 R2 등 최신 운영체제에서 모두 사용할 수 있습니다.

PowerShell 모듈: PrintManagement

Windows 8.1과 Windows Server 2012 R2 출시와 함께 Microsoft는 PowerShell 4.0(Windows Management Framework 4.0의 일부)을 공개했고, 이를 통해 Windows 기반 인쇄 서버를 관리하는 cmdlet 목록이 크게 확장되었습니다. Windows 10(PowerShell v5) 환경에서 PrintManagement 모듈이 제공하는 프린터, 드라이버, 인쇄 대기열 관련 cmdlet 전체 목록은 다음 명령으로 확인할 수 있습니다.

Get-Command –Module PrintManagement

Windows 10/Server 2016에서 PowerShell로 프린터 및 드라이버 관리하기

PrintManagement 모듈에는 프린터, 드라이버, 인쇄 포트, 대기열을 관리하는 총 22개의 PowerShell cmdlet이 포함되어 있습니다.

  • Add-Printer – 새 프린터 추가(설치)
  • Add-PrinterDriver – 새 프린터 드라이버 설치
  • Add-PrinterPort – 로컬 인쇄 포트 생성
  • Get-PrintConfiguration – 프린터 구성 정보 표시
  • Get-Printer – 컴퓨터에 설치된 프린터 목록 표시
  • Get-PrinterDriver – 설치된 드라이버 목록 표시
  • Get-PrinterPort – 프린터 포트 목록 표시
  • Get-PrinterProperty – 프린터 속성 표시
  • Get-PrintJob – 프린터의 인쇄 작업 목록 조회
  • Read-PrinterNfcTag – NFC 태그에서 프린터 정보 가져오기
  • Remove-Printer – 프린터 제거
  • Remove-PrinterDriver – 프린터 드라이버 제거
  • Remove-PrinterPort – 프린터 포트 제거
  • Remove-PrintJob – 프린터의 인쇄 작업 삭제
  • Rename-Printer – 프린터 이름 변경
  • Restart-PrintJob – 인쇄 작업 다시 시작
  • Resume-PrintJob – 일시 중지된 인쇄 작업 재개
  • Set-PrintConfiguration – 프린터 구성 설정
  • Set-Printer – 프린터 구성 업데이트
  • Set-PrinterProperty – 프린터 속성 변경
  • Suspend-PrintJob – 인쇄 작업 일시 중지
  • Write-PrinterNfcTag – NFC 태그에 정보 기록

각 cmdlet의 자세한 구문이 궁금하다면 다음 명령을 사용하세요.

Get-Help <cmdlet_name> -Detailed

실제 사용 예제는 다음과 같이 확인할 수 있습니다.

Get-Help <cmdlet_name> -Examples

이제 Windows 10 환경에서 PowerShell로 프린터를 관리하는 대표적인 예제를 하나씩 살펴보겠습니다.

DriverStore에 프린터 드라이버 추가하기

Windows DriverStore에 설치된 인쇄 드라이버 목록을 확인하려면 다음 명령을 실행합니다.

Get-PrinterDriver

Windows 10/Server 2016에서 PowerShell로 프린터 및 드라이버 관리하기

그다음 새 프린터 드라이버를 시스템에 설치합니다. 예를 들어 널리 사용되는 "HP Universal Printing PCL 6" 드라이버를 설치한다고 가정해 보겠습니다. 문서에 따르면 드라이버를 추가하는 PowerShell 명령은 다음과 같습니다.

Add-PrinterDriver -Name "HP Universal Printing PCL 6" -InfPath "C:\Distr\HP-pcl6-x64\hpcu118u.inf"

하지만 실제로 이 방법으로 드라이버를 설치하려고 하면 다음과 같은 오류 메시지가 나타납니다.

Add-PrinterDriver : One or more specified parameters for this operation has an invalid value. + CategoryInfo : InvalidArgument: (MSFT_PrinterDriver) [Add-PrinterDriver], CimException + FullyQualifiedErrorId : HRESULT 0x80070057,Add-PrinterDriver

Windows 10/Server 2016에서 PowerShell로 프린터 및 드라이버 관리하기

원인은 간단합니다. INF 파일로부터 드라이버를 설치하려면 해당 드라이버가 이미 DriverStore에 존재해야 합니다. 즉, Add-PrinterDriver 명령만으로는 Driver Store에 없는 드라이버를 설치할 수 없습니다. DriverStore에 드라이버를 추가하려면 다음 방법 중 하나를 사용하세요.

  • 이전 글에서 소개한 VBS 스크립트
  • pnputil.exe 유틸리티 — pnputil.exe -i -a C:\Distr\HP-pcl6-x64\hpcu118u.inf(특정 프린터 드라이버 설치) 또는 pnputil.exe -i -a C:\Distr\HP-pcl6-x64\*.inf(지정한 디렉터리 내 INF 파일에 있는 모든 드라이버 설치) 형태로 실행합니다.Windows 10/Server 2016에서 PowerShell로 프린터 및 드라이버 관리하기
  • Add-WindowsDriver cmdlet — 오프라인 Windows 이미지에 드라이버를 통합할 때 사용합니다.

드라이버 저장소에 프린터 드라이버를 추가했다면, 이후 인쇄 서버에 설치해야 합니다.

Add-PrinterDriver -Name "HP Universal Printing PCL 6"

Windows 10/Server 2016에서 PowerShell로 프린터 및 드라이버 관리하기

. PowerShell로 드라이버를 설치할 때 드라이버 이름 필드에는 무엇을 입력해야 할까요? 지정하는 드라이버 이름은 내부 시스템 이름과 정확히 일치해야 하며, 그렇지 않으면 설치 과정에서 오류가 발생합니다. 올바른 드라이버 이름은 해당 드라이버가 이미 설치된 컴퓨터에서 get-printerdriver 명령을 실행하거나, 드라이버의 .inf 파일을 직접 열어 확인할 수 있습니다.Windows 10/Server 2016에서 PowerShell로 프린터 및 드라이버 관리하기

PowerShell로 프린터 설치하기

먼저 네트워크 프린터용 IP 포트를 생성합니다. 네트워크 프린터의 IP 주소 또는 원격 인쇄 서버의 이름을 지정할 수 있습니다.

Add-PrinterPort -Name "IP_192.168.10.26" -PrinterHostAddress "192.168.10.26"

새 IP 인쇄 포트를 추가하기 전에 해당 포트가 이미 존재하는지 확인하는 것이 안전합니다.

$portName = "IP_192.168.10.26"
$checkPortExists = Get-Printerport -Name $portname -ErrorAction SilentlyContinue
if (-not $checkPortExists) {
Add-PrinterPort -name $portName -PrinterHostAddress "192.168.10.26"
}

다음 명령 하나로 새 프린터를 설치하고 공유 설정까지 한 번에 완료할 수 있습니다.

Add-Printer -Name hp3027_Office1_Buh -DriverName "HP LaserJet M3027 MFP PCL6 Class Driver" -PortName IP_192.168.10.26 -Shared -ShareName "hp3027_1_BUh" –Published

Windows 10/Server 2016에서 PowerShell로 프린터 및 드라이버 관리하기

참고: 동일한 작업(프린터 설치 및 공유)을 VBS 스크립트(Printing Admin 스크립트)로 수행하려면 서로 다른 두 개의 명령을 실행해야 합니다. 반면 PowerShell에서는 단일 명령으로 처리할 수 있어 편리합니다.

위 명령을 실행하면 "hp3027_Office1"이라는 이름의 새 공유 프린터가 시스템에 추가됩니다.

Windows 10/Server 2016에서 PowerShell로 프린터 및 드라이버 관리하기

프린터 이름을 변경해야 한다면 다음 명령만 실행하면 됩니다.

Rename-Printer -Name "hp3027_1_Buh" -NewName "hp3027_F1_Salary"

인쇄 서버에 설치된 프린터 목록 확인

컴퓨터에 설치된 전체 프린터 목록을 출력해 보겠습니다.

Get-Printer

이 명령은 프린터 이름, 유형(로컬 또는 네트워크), 드라이버, 인쇄 포트, 공유 여부, Active Directory 게시 여부 등의 정보를 보여줍니다.

Windows 10/Server 2016에서 PowerShell로 프린터 및 드라이버 관리하기

대부분의 PrintManagement cmdlet은 원격 컴퓨터(인쇄 서버)의 프린터, 드라이버, 인쇄 대기열 상태를 조회하고 관리하는 데에도 활용할 수 있습니다. 원격 컴퓨터나 서버의 이름은 –ComputerName 매개변수의 값으로 지정합니다.

원격 컴퓨터에 설치된 프린터 정보는 다음 PowerShell 명령으로 확인할 수 있습니다.

Get-Printer -ComputerName rome-prnt1 | Format-List Name,DriverName

공유 프린터만 표시하고 싶다면 다음 명령을 사용하세요.

Get-Printer -ComputerName rome-prnt1 | where Shared -eq $true | fl Name

PowerShell로 네트워크 공유 프린터에 연결하기

인쇄 서버의 공유 프린터에 연결하려면 다음 명령을 사용합니다.

Add-Printer -ConnectionName \\rome-prnt1\HP3027

Windows 10은 기본적으로 마지막에 인쇄에 사용한 프린터를 기본 프린터로 설정합니다. 특정 프린터를 고정된 기본 프린터로 사용하려면 다음 명령을 실행하세요.

Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" -Name "LegacyDefaultPrinterMode" -Value 1 –Force

기본 프린터를 직접 지정하려면 다음 명령을 사용할 수도 있습니다.

$wsnObj = New-Object -COM WScript.Network
$wsnObj.SetDefaultPrinter(%PrinterName%)

PowerShell로 프린터 제거하기

프린터를 제거하려면 다음 PowerShell 명령을 실행합니다.

Remove-Printer -Name "hp3027_L1_O1"

특정 프린터 드라이버는 Remove-PrinterDriver cmdlet으로 제거할 수 있습니다.

Remove-PrinterDriver -Name "HP Universal Printing PCL 6"