راهنمای جامع عیب‌یابی پرینتر برای تکنسین‌های هلپ دسک

راهنمای جامع عیب‌یابی پرینتر برای تکنسین‌های هلپ دسک — از مشکلات Print Spooler و درایورها تا پرینترهای شبکه، Group Policy، Microsoft Universal Print، امنیت PrintNightmare و مدیریت با PowerShell.

مقدمه: چرا پرینتر همیشه دردسرسازه؟

اگه توی تیم هلپ دسک کار می‌کنید، حتماً با این جمله آشنایید: «پرینترم کار نمی‌کنه!» — و به‌احتمال زیاد این جمله رو بیشتر از هر تیکت دیگه‌ای شنیدید. من خودم وقتی تازه وارد دنیای پشتیبانی شدم، فکر می‌کردم مشکلات پرینتر خیلی ساده‌ان. ولی صادقانه بگم، بعد از چندتا تیکت پشت‌سرهم که هر کدوم یه مشکل عجیب‌وغریب داشت، فهمیدم ماجرا خیلی پیچیده‌تر از چیزیه که فکر می‌کردم.

از یه کاغذ گیر کرده ساده تا مشکلات پیچیده Print Spooler و درایورهای ناسازگار — هر روز با اینا سر و کار داریم.

طبق آمار سال ۲۰۲۵، مشکلات مربوط به پرینتر هنوز حدود ۲۰ تا ۲۵ درصد از کل تیکت‌های هلپ دسک در سازمان‌ها رو تشکیل می‌دن. یه لحظه فکر کنید — یک‌چهارم تیکت‌ها! با گسترش مدل کار هیبریدی و دورکاری هم چالش‌های جدیدی اضافه شده. حالا باید از چاپ در محیط‌های ابری هم پشتیبانی کنیم و پرینترها رو برای کاربرانی مدیریت کنیم که مدام بین خونه و دفتر جابه‌جا می‌شن.

اگه مقالات قبلی ما درباره عیب‌یابی اکتیو دایرکتوری، مدیریت Microsoft 365 و عیب‌یابی VPN رو خوندید، این مقاله مکمل اون‌هاست. خیلی از مشکلات پرینتر ریشه در مسائل شبکه، AD و حتی تنظیمات Group Policy دارن — یعنی همون مباحثی که قبلاً پوشش دادیم.

خب، بریم عمیق‌تر توی این دنیای پرماجرای عیب‌یابی پرینتر.

درک معماری چاپ در ویندوز

قبل از اینکه دست به عیب‌یابی بزنیم، باید یه درک درست از معماری سیستم چاپ در ویندوز داشته باشیم. شاید وسوسه بشید که این بخش رو رد کنید، ولی باور کنید اگه بدونید داخل سیستم چاپ ویندوز چه خبره، خیلی سریع‌تر می‌تونید مشکلات رو پیدا و رفع کنید.

اجزای اصلی سیستم چاپ ویندوز

سیستم چاپ ویندوز از چندین جزء کلیدی تشکیل شده:

  • Print Spooler Service (spoolsv.exe): قلب تپنده سیستم چاپ ویندوز. این سرویس مسئول دریافت، ذخیره‌سازی موقت و ارسال کارهای چاپ به پرینتره. بدون این سرویس، اصلاً هیچ چاپی انجام نمی‌شه.
  • Print Queue: صف انتظاری که کارهای چاپ قبل از ارسال به پرینتر توش قرار می‌گیرن. هر پرینتر صف مخصوص خودش رو داره.
  • Print Driver: نرم‌افزاری که بین سیستم‌عامل و سخت‌افزار پرینتر ارتباط برقرار می‌کنه. درایور درست و به‌روز، کلید عملکرد صحیح پرینتره.
  • Print Processor: مسئول پردازش داده‌های چاپ و تبدیلشون به فرمت قابل فهم برای پرینتر.
  • Port Monitor: مدیریت ارتباط فیزیکی یا شبکه‌ای با پرینتر — چه USB باشه، چه TCP/IP، چه WSD یا پروتکل‌های دیگه.

دو نوع درایور: v3 در برابر v4

یه نکته‌ای هست که خیلی از تکنسین‌ها (حتی باتجربه‌ها) باهاش آشنا نیستن: تفاوت بین درایورهای نسل سوم و نسل چهارم. این تفاوت مهمه، پس حواستون باشه:

  • درایور v3 (Legacy): مدل قدیمی‌تر که هنوز توی خیلی از سازمان‌ها استفاده می‌شه. درایورهای v3 در حالت Kernel-mode اجرا می‌شن و نیاز به نصب جداگانه روی هر معماری (x86/x64) دارن. نکته مهم: آسیب‌پذیری‌هایی مثل PrintNightmare عمدتاً از همین مدل درایور سوءاستفاده کردن.
  • درایور v4 (Modern): مدل جدیدتر و امن‌تر. اینا در حالت User-mode اجرا می‌شن، از یک پکیج واحد برای تمام معماری‌ها استفاده می‌کنن و از XPS و OpenXPS پشتیبانی می‌کنن. توصیه جدی مایکروسافت اینه که سازمان‌ها به v4 مهاجرت کنن.

عیب‌یابی سرویس Print Spooler

سرویس Print Spooler رایج‌ترین نقطه خرابی در سیستم چاپ ویندوزه. وقتی این سرویس قاطی کنه، تمام عملیات چاپ متوقف می‌شه — و معمولاً کلی تیکت عصبانی هم باهاش میاد!

علائم مشکل Print Spooler

  • پیام خطای «Print Spooler service is not running»
  • گیر کردن کارهای چاپ در صف و عدم امکان حذفشون
  • کرش مکرر سرویس Spooler بعد از هر بار راه‌اندازی مجدد
  • ناپدید شدن پرینترها از لیست دستگاه‌ها
  • عدم امکان نصب پرینتر جدید

مراحل عیب‌یابی گام‌به‌گام

مرحله ۱: بررسی وضعیت سرویس

اول از همه، ببینید سرویس Print Spooler اصلاً در چه وضعیتیه:

# بررسی وضعیت سرویس Print Spooler
Get-Service -Name Spooler | Select-Object Name, Status, StartType

# راه‌اندازی مجدد سرویس
Restart-Service -Name Spooler -Force

# بررسی وابستگی‌های سرویس
Get-Service -Name Spooler -DependentServices
Get-Service -Name Spooler -RequiredServices

مرحله ۲: پاکسازی صف چاپ

اگه کارهای چاپ گیر کردن و به هیچ وجه حذف نمی‌شن، باید صف رو دستی خالی کنید. این یکی از اون کارهاییه که هر تکنسین هلپ دسکی باید بلد باشه:

# توقف سرویس Spooler
Stop-Service -Name Spooler -Force

# حذف فایل‌های گیر کرده در صف چاپ
Remove-Item -Path "C:\Windows\System32\spool\PRINTERS\*" -Force -ErrorAction SilentlyContinue

# راه‌اندازی مجدد سرویس
Start-Service -Name Spooler

# بررسی وضعیت
Get-Service -Name Spooler

مرحله ۳: بررسی Event Log

اگه Spooler مدام کرش می‌کنه و ریستارت کردن فایده نداره، وقتشه Event Log رو زیر و رو کنید:

# جستجوی خطاهای مرتبط با Print Spooler در Event Log
Get-WinEvent -FilterHashtable @{
    LogName = 'System'
    ProviderName = 'Service Control Manager'
    Level = 2  # Error
} -MaxEvents 20 | Where-Object {
    $_.Message -like "*Spooler*" -or $_.Message -like "*spoolsv*"
} | Format-List TimeCreated, Id, Message

# بررسی خطاهای PrintService
Get-WinEvent -LogName "Microsoft-Windows-PrintService/Operational" -MaxEvents 50 |
    Where-Object { $_.Level -eq 2 } |
    Format-Table TimeCreated, Id, Message -Wrap

مرحله ۴: شناسایی درایور مشکل‌دار

خیلی وقتا (خیلی بیشتر از اون چیزی که فکر می‌کنید) یه درایور خراب یا ناسازگار باعث کرش Spooler می‌شه:

# لیست تمام درایورهای پرینتر نصب شده
Get-PrinterDriver | Select-Object Name, Manufacturer, DriverVersion, PrinterEnvironment

# حذف درایور مشکوک
Remove-PrinterDriver -Name "نام درایور" -RemoveFromDriverStore

اگه مطمئن نیستید کدوم درایور مشکل‌ساز هست، می‌تونید Print Spooler رو در حالت ایزوله اجرا کنید. اینجوری هر درایور توی پروسه جداگانه‌ای اجرا می‌شه و اگه یکی‌شون خراب باشه، بقیه رو با خودش پایین نمیاره:

# فعال‌سازی Driver Isolation
Set-PrinterDriver -Name "نام درایور" -PrinterEnvironment "Windows x64" -IsolationMode "Sandbox"

عیب‌یابی پرینترهای شبکه

پرینترهای شبکه‌ای بخش بزرگی از تیکت‌های هلپ دسک رو تشکیل می‌دن. راستش رو بخواید، مشکلات شبکه‌ای معمولاً پیچیده‌تر از مشکلات پرینترهای محلی هستن — چون لایه‌های بیشتری درگیرن و باید چندتا چیز رو همزمان بررسی کنید.

تشخیص مشکلات اتصال شبکه

وقتی یه پرینتر شبکه‌ای کار نمی‌کنه، اول اتصال شبکه رو چک کنید — قبل از اینکه وارد مسائل پیچیده‌تر بشید:

# بررسی اتصال شبکه به پرینتر
Test-Connection -ComputerName "192.168.1.100" -Count 4

# بررسی پورت‌های پرینتر (معمولاً TCP 9100 برای RAW و TCP 631 برای IPP)
Test-NetConnection -ComputerName "192.168.1.100" -Port 9100
Test-NetConnection -ComputerName "192.168.1.100" -Port 631

# بررسی DNS resolution برای پرینترهایی که با hostname تعریف شدن
Resolve-DnsName "printer01.company.local"

# مشاهده پورت‌های پرینتر تعریف شده در سیستم
Get-PrinterPort | Select-Object Name, PrinterHostAddress, PortNumber

پرینت سرور در مقابل چاپ مستقیم

در محیط‌های سازمانی معمولاً یکی از این دو مدل استفاده می‌شه:

  • پرینت سرور (Print Server): یک سرور مرکزی که تمام پرینترها روش تعریف شدن و کلاینت‌ها از طریق اون به پرینترها می‌رسن. مزیتش مدیریت متمرکز و توزیع آسان درایوره، ولی یه مشکل بزرگ داره: نقطه شکست واحد (Single Point of Failure) ایجاد می‌کنه. یعنی اگه سرور بخوابه، هیچ‌کس نمی‌تونه چاپ کنه.
  • چاپ مستقیم (Direct IP Printing): هر کلاینت مستقیماً به پرینتر وصل می‌شه. وابستگی به سرور نداره، ولی مدیریت درایورها سخت‌تره.

در سال‌های اخیر، خیلی از سازمان‌ها (به‌خصوص بعد از ماجرای PrintNightmare) دارن جایگزین‌هایی مثل Microsoft Universal Print رو بررسی می‌کنن. جلوتر بیشتر درباره‌ش صحبت می‌کنیم.

عیب‌یابی پرینت سرور

# بررسی وضعیت تمام پرینترهای روی پرینت سرور
Get-Printer -ComputerName "PrintServer01" |
    Select-Object Name, PrinterStatus, JobCount, PortName |
    Format-Table -AutoSize

# بررسی کارهای چاپ معلق
Get-PrintJob -ComputerName "PrintServer01" -PrinterName "HP-LaserJet-Floor2" |
    Where-Object { $_.JobStatus -ne "Normal" } |
    Select-Object Id, UserName, DocumentName, JobStatus, SubmittedTime

# حذف تمام کارهای چاپ گیر کرده از یک پرینتر خاص
Get-PrintJob -ComputerName "PrintServer01" -PrinterName "HP-LaserJet-Floor2" |
    Remove-PrintJob

# بررسی سلامت اشتراک‌گذاری پرینتر
Get-Printer -ComputerName "PrintServer01" |
    Where-Object { $_.Shared -eq $true } |
    Select-Object Name, ShareName, Published

مدیریت پرینتر از طریق Group Policy

Group Policy یکی از قدرتمندترین ابزارها برای مدیریت متمرکز پرینترها در محیط Active Directory هست. با GPO می‌تونید پرینترها رو به‌صورت خودکار و بدون دخالت کاربر نصب کنید — و این واقعاً کار رو راحت‌تر می‌کنه.

استقرار پرینتر از طریق GPO

دو روش اصلی وجود داره:

  • Computer Configuration: پرینتر برای تمام کاربرانی که روی اون کامپیوتر لاگین می‌کنن نصب می‌شه. مسیر: Computer Configuration → Policies → Windows Settings → Deployed Printers
  • User Configuration: پرینتر فقط برای یه کاربر خاص نصب می‌شه، فرقی نمی‌کنه روی کدوم کامپیوتر لاگین کنه. مسیر: User Configuration → Policies → Windows Settings → Deployed Printers

تنظیمات مهم GPO برای پرینتر

چندتا تنظیم کلیدی هست که حتماً باید بشناسیدشون:

  • Point and Print Restrictions: بعد از آسیب‌پذیری PrintNightmare، این تنظیم اهمیت فوق‌العاده‌ای پیدا کرده. جدی می‌گم، حتماً محدودیت‌های مناسب رو اعمال کنید. مسیر: Computer Configuration → Administrative Templates → Printers → Point and Print Restrictions
  • Package Point and Print - Approved Servers: فقط سرورهای مورد اعتماد رو برای دانلود درایور مجاز کنید.
  • Allow Print Spooler to accept client connections: در سرورهایی که نیازی به سرویس چاپ ندارن، حتماً این رو غیرفعال کنید.
# بررسی تنظیمات GPO مرتبط با پرینتر روی یک کامپیوتر
gpresult /r /scope:computer | findstr -i "print"

# بروزرسانی اجباری Group Policy
gpupdate /force

# بررسی پرینترهای استقرار یافته از طریق GPO
Get-Printer | Where-Object { $_.Type -eq "Connection" } |
    Select-Object Name, ComputerName

امنیت چاپ: درس‌هایی از PrintNightmare

آسیب‌پذیری PrintNightmare (CVE-2021-34527 و CVE-2021-1675) یکی از مهم‌ترین رویدادهای امنیتی در حوزه چاپ بود. تأثیرش اونقدر عمیق بود که حتی الان، توی سال ۲۰۲۶، هنوز عواقبش رو حس می‌کنیم و نحوه مدیریت پرینترها در سازمان‌ها رو تغییر داده.

PrintNightmare چی بود؟

به زبان ساده، PrintNightmare مجموعه‌ای از آسیب‌پذیری‌ها در سرویس Windows Print Spooler بود که به مهاجمان اجازه می‌داد:

  • اجرای کد از راه دور (RCE): یعنی یک کاربر دامنه با دسترسی محدود می‌تونست کد مخرب رو با سطح دسترسی SYSTEM اجرا کنه. خیلی ترسناکه، نه؟
  • افزایش سطح دسترسی (Privilege Escalation): ارتقای سطح دسترسی از یک کاربر معمولی به مدیر سیستم.

اقدامات امنیتی ضروری

حتی اگه تمام پچ‌های مایکروسافت رو نصب کردید (که باید هم نصب کرده باشید!)، این اقدامات امنیتی اضافی رو هم حتماً انجام بدید:

# ۱. غیرفعال کردن Print Spooler روی Domain Controller‌ها
# DC نیازی به سرویس چاپ نداره!
Stop-Service -Name Spooler
Set-Service -Name Spooler -StartupType Disabled

# ۲. بررسی وضعیت Print Spooler روی تمام DC‌ها
$DCs = Get-ADDomainController -Filter *
foreach ($DC in $DCs) {
    $service = Get-Service -Name Spooler -ComputerName $DC.HostName
    Write-Output "$($DC.HostName): $($service.Status) - $($service.StartType)"
}

# ۳. بررسی تنظیمات Point and Print فعلی
$regPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Printers\PointAndPrint"
if (Test-Path $regPath) {
    Get-ItemProperty -Path $regPath
} else {
    Write-Output "Point and Print policy not configured!"
}

بهترین شیوه‌های امنیتی برای محیط چاپ:

  • سرویس Print Spooler رو روی تمام سرورهایی که نیازی به چاپ ندارن (به‌خصوص Domain Controllers) غیرفعال کنید — این یکی واقعاً غیرقابل مذاکره‌ست
  • فقط از درایورهای v4 (User-mode) استفاده کنید و درایورهای v3 قدیمی رو حذف کنید
  • تنظیمات Point and Print Restrictions رو فعال و فقط سرورهای مورد اعتماد رو مجاز کنید
  • از رویکرد Zero Trust برای محیط چاپ استفاده کنید
  • به‌روزرسانی‌های امنیتی ویندوز رو به‌موقع نصب کنید — مایکروسافت مرتب پچ‌های امنیتی برای سرویس چاپ منتشر می‌کنه

Microsoft Universal Print: آینده چاپ سازمانی

Microsoft Universal Print یک سرویس چاپ مبتنی بر ابر هست که روی Azure اجرا می‌شه. ایده اصلیش اینه که دیگه نیازی به پرینت سرور سنتی نداشته باشید. این سرویس در اشتراک‌های Microsoft 365 Business Premium، Enterprise E3/E5 و Education A3/A5 موجوده.

من شخصاً فکر می‌کنم این سرویس آینده‌دار هست، هرچند هنوز جای رشد داره.

مزایای Universal Print

  • حذف پرینت سرور: دیگه نیازی به نگهداری سرور فیزیکی ندارید (و این یعنی یه سردرد کمتر!)
  • مدیریت ابری: تمام پرینترها از طریق Azure Portal قابل مدیریت هستن
  • بدون نیاز به درایور روی کلاینت: کلاینت‌های Windows 10/11 از درایور عمومی Microsoft IPP Class Driver استفاده می‌کنن
  • یکپارچگی با Intune: می‌تونید پرینترها رو از طریق Intune استقرار بدید
  • امنیت بالاتر: ارتباطات HTTPS رمزنگاری شده و کنترل دسترسی مبتنی بر Entra ID

راه‌اندازی Universal Print

برای شروع، به این پیش‌نیازها نیاز دارید:

  • اشتراک Microsoft 365 با لایسنس Universal Print
  • حساب کاربری با نقش Global Administrator یا Printer Administrator
  • یک کامپیوتر برای نصب Universal Print Connector (برای پرینترهایی که مستقیماً از Universal Print پشتیبانی نمی‌کنن — که فعلاً بیشتر پرینترها اینجوری‌ان)

نصب و پیکربندی Connector

همون‌طور که گفتم، بیشتر پرینترهای بازار هنوز مستقیماً از Universal Print پشتیبانی نمی‌کنن. پس برای اینا باید Universal Print Connector نصب کنید:

  1. از پورتال Azure وارد بخش Universal Print → Connectors بشید
  2. روی Add a connector کلیک کنید
  3. نرم‌افزار Connector رو روی یک کامپیوتر ویندوزی که ۲۴ ساعته روشنه و به شبکه پرینترها دسترسی داره نصب کنید
  4. با حساب Global Admin یا Printer Admin وارد بشید و Connector رو ثبت کنید
  5. پرینترهای موردنظر رو انتخاب و Register کنید

عیب‌یابی مشکلات رایج Universal Print

مشکل ۱: خطای عدم دسترسی هنگام ثبت Connector

اگه پیام «You don't have access to perform this operation» دریافت کردید، نگران نباشید — فقط مطمئن بشید از حسابی با نقش Global Administrator یا Printer Administrator استفاده می‌کنید.

مشکل ۲: پرینتر در لیست کاربران ظاهر نمی‌شه

این یکی خیلی رایجه. بررسی کنید که:

  • کاربر لایسنس Universal Print داشته باشه
  • Usage Location در پروفایل کاربر تنظیم شده باشه
  • پرینتر به کاربر یا گروه مربوطه Share شده باشه

مشکل ۳: Connector آفلاین می‌شه

Connector باید ۲۴ ساعته آنلاین باشه. اگه آفلاین شد:

  • کامپیوتر Connector روشن و آنلاین باشه
  • فایروال ارتباط HTTPS با Azure رو مسدود نکرده باشه
  • سرویس Universal Print Connector در حال اجرا باشه

عیب‌یابی پرینتر در macOS

اگه سازمان شما از مک هم استفاده می‌کنه (که این‌روزها خیلی از سازمان‌ها محیط ترکیبی دارن)، باید با سیستم چاپ macOS هم آشنا باشید. macOS از CUPS یا همون Common Unix Printing System به‌عنوان زیرساخت چاپ استفاده می‌کنه.

ریست کردن سیستم چاپ macOS

وقتی مشکلات چاپ در macOS دست از سرتون برنمی‌داره، ریست کامل سیستم چاپ معمولاً مؤثرترین راه‌حله. البته توجه کنید که این کار همه تنظیمات رو پاک می‌کنه:

  1. به System Settings → Printers & Scanners برید
  2. روی لیست پرینترها Control-click کنید
  3. گزینه Reset printing system رو انتخاب کنید
  4. تأیید کنید — یادتون باشه تمام پرینترها و تنظیمات حذف می‌شن
  5. پرینترها رو دوباره اضافه کنید

استفاده از رابط وب CUPS

CUPS یه رابط وب خیلی کاربردی داره که برای عیب‌یابی پیشرفته حسابی به درد می‌خوره:

# فعال‌سازی رابط وب CUPS
cupsctl WebInterface=yes

# حالا از مرورگر به آدرس زیر برید:
# http://localhost:631

# فعال‌سازی لاگ‌گذاری دقیق برای عیب‌یابی
cupsctl --debug-logging

# غیرفعال‌سازی لاگ دقیق بعد از اتمام عیب‌یابی
cupsctl --no-debug-logging

# مشاهده لاگ‌های CUPS
# cat /var/log/cups/error_log

ریست کامل سیستم چاپ از ترمینال

اگه رابط گرافیکی هم کار نمی‌کنه (بله، بعضی وقتا این اتفاق هم میفته)، ترمینال نجات‌بخشه:

# توقف سرویس CUPS
sudo launchctl stop org.cups.cupsd

# بازنشانی فایل‌های پیکربندی
sudo rm /etc/cups/cupsd.conf
sudo cp /etc/cups/cupsd.conf.default /etc/cups/cupsd.conf
sudo rm /etc/cups/printers.conf

# راه‌اندازی مجدد سرویس
sudo launchctl start org.cups.cupsd

Windows Printer Troubleshooter: ابزار خودکار عیب‌یابی

ویندوز ۱۱ یه ابزار عیب‌یابی خودکار داره که — شاید باورتون نشه — خیلی وقتا واقعاً مشکلات ساده رو حل می‌کنه. قبل از اینکه دستی وارد کار بشید، ارزشش رو داره یه شانس بهش بدید:

  1. به Settings → System → Troubleshoot → Other troubleshooters برید
  2. کنار Printer روی Run کلیک کنید
  3. صبر کنید تا ابزار مشکلات رو شناسایی و رفع کنه

این ابزار می‌تونه مشکلاتی مثل تنظیمات خراب رجیستری، وابستگی‌های معیوب Spooler و تنظیمات نادرست پورت رو شناسایی و اصلاح کنه.

از خط فرمان هم می‌شه اجراش کرد:

# اجرای Printer Troubleshooter از خط فرمان
msdt.exe /id PrinterDiagnostic

مدیریت پرینتر با PowerShell: راهنمای کاربردی

اگه هنوز PowerShell رو بلد نیستید، الان بهترین وقته که شروع کنید. ماژول PrintManagement مجموعه کاملی از cmdlet‌ها برای مدیریت پرینترها داره و سرعت کارتون رو واقعاً چند برابر می‌کنه.

cmdlet‌های ضروری

# لیست تمام پرینترهای نصب شده
Get-Printer | Format-Table Name, DriverName, PortName, PrinterStatus -AutoSize

# لیست درایورهای پرینتر
Get-PrinterDriver | Select-Object Name, Manufacturer, MajorVersion

# اضافه کردن پرینتر TCP/IP جدید
Add-PrinterPort -Name "TCP_192.168.1.100" -PrinterHostAddress "192.168.1.100"
Add-Printer -Name "HP-LaserJet-Floor3" -DriverName "HP Universal Printing PCL6" -PortName "TCP_192.168.1.100"

# اشتراک‌گذاری پرینتر
Set-Printer -Name "HP-LaserJet-Floor3" -Shared $true -ShareName "HP-Floor3" -Published $true

# تنظیم پرینتر پیش‌فرض
Set-Printer -Name "HP-LaserJet-Floor3" -DefaultPrinter

# بررسی وضعیت تمام کارهای چاپ در حال انتظار
Get-Printer | ForEach-Object {
    $jobs = Get-PrintJob -PrinterName $_.Name -ErrorAction SilentlyContinue
    if ($jobs) {
        Write-Output "Printer: $($_.Name)"
        $jobs | Format-Table Id, UserName, DocumentName, JobStatus, Size
    }
}

# اسکریپت گزارش‌گیری از وضعیت پرینترها
$report = Get-Printer | Select-Object @{
    N='PrinterName'; E={$_.Name}
}, @{
    N='Status'; E={$_.PrinterStatus}
}, @{
    N='Driver'; E={$_.DriverName}
}, @{
    N='Port'; E={$_.PortName}
}, @{
    N='Shared'; E={$_.Shared}
}, @{
    N='JobCount'; E={(Get-PrintJob -PrinterName $_.Name -ErrorAction SilentlyContinue | Measure-Object).Count}
}
$report | Export-Csv -Path "C:\Reports\PrinterStatus.csv" -NoTypeInformation -Encoding UTF8

مشکلات رایج و راه‌حل‌های سریع

خب، بیاید یه مرور سریع روی رایج‌ترین مشکلات پرینتر داشته باشیم. این بخش رو می‌تونید به‌عنوان یه cheat sheet برای تیم هلپ دسکتون استفاده کنید.

۱. پیام «Printer Offline»

شاید رایج‌ترین مشکلی باشه که باهاش برخورد می‌کنید. علل احتمالی:

  • پرینتر واقعاً خاموشه یا مشکل شبکه داره: اول اتصال فیزیکی و شبکه‌ای رو بررسی کنید — بله، گاهی وقتا فقط کابل در اومده!
  • حالت «Use Printer Offline» فعال شده: در صف چاپ، منوی Printer رو باز کنید و مطمئن بشید تیک «Use Printer Offline» برداشته شده
  • پورت SNMP نادرست: اگه SNMP Status Enabled هست و اطلاعاتش درست نیست، غیرفعالش کنید
# تنظیم غیرفعال‌سازی SNMP Status روی پورت پرینتر
$port = Get-PrinterPort -Name "TCP_192.168.1.100"
Set-PrinterPort -Name "TCP_192.168.1.100" -SNMP 0

۲. چاپ کند یا با تأخیر

این مشکل هم خیلی آزاردهنده‌ست. چندتا علت رایج داره:

  • فایل بزرگ در حال پردازش: تنظیمات Spooling رو بهینه کنید — «Start printing after last page is spooled» رو فعال کنید
  • تراکم شبکه: اگه پرینتر روی Wi-Fi هست، اتصال Ethernet رو امتحان کنید
  • درایور قدیمی: درایور رو آپدیت کنید
  • کیفیت چاپ بالا: اگه کیفیت بالا لازم نیست، کیفیت رو به Draft تغییر بدید

۳. خطای «Access Denied» هنگام چاپ

این خطا معمولاً مربوط به مجوزهای دسترسیه. بررسی کنید:

  • مجوزهای اشتراک‌گذاری پرینتر
  • عضویت کاربر در گروه‌های AD
  • اگه از پرینت سرور استفاده می‌کنید، مجوزهای سطح سرور رو هم چک کنید

۴. چاپ کاراکترهای نامفهوم (Garbled Output)

وقتی به‌جای متن، یه‌سری کاراکتر عجیب‌وغریب چاپ می‌شه:

  • درایور نادرست: مطمئن بشید درایور مناسب همون مدل پرینتر نصب شده
  • زبان چاپ نادرست: بررسی کنید زبان چاپ (PCL/PostScript) با قابلیت‌های پرینتر سازگار باشه
  • فایل خراب: یه سند ساده دیگه چاپ کنید تا مشکل رو ایزوله کنید

۵. کاغذ گیر کردن مکرر (Paper Jam)

مشکلات سخت‌افزاری رو فراموش نکنید:

  • کاغذها رو قبل از قرار دادن در سینی، بادبزنی کنید (fan the paper)
  • از کاغذ مناسب استفاده کنید — کاغذ مرطوب یا چین‌خورده مشکل‌ساز می‌شه
  • رولرهای کاغذ‌کش رو تمیز کنید
  • اگه مشکل تکراری شده، احتمالاً سرویس سخت‌افزاری لازمه

ایجاد اسکریپت مانیتورینگ پرینتر

می‌خواید یه قدم جلوتر از بقیه باشید؟ با PowerShell می‌تونید مانیتورینگ خودکار راه بندازید. این اسکریپت وضعیت پرینترهای شبکه رو بررسی می‌کنه و اگه مشکلی باشه، هشدار می‌ده:

# اسکریپت مانیتورینگ پرینتر
$printers = @(
    @{Name="HP-Floor1"; IP="192.168.1.101"},
    @{Name="HP-Floor2"; IP="192.168.1.102"},
    @{Name="Canon-Floor3"; IP="192.168.1.103"}
)

$results = foreach ($printer in $printers) {
    $ping = Test-Connection -ComputerName $printer.IP -Count 2 -Quiet
    $portCheck = Test-NetConnection -ComputerName $printer.IP -Port 9100 -WarningAction SilentlyContinue

    [PSCustomObject]@{
        PrinterName  = $printer.Name
        IPAddress    = $printer.IP
        PingStatus   = if ($ping) { "Online" } else { "Offline" }
        PrintPort    = if ($portCheck.TcpTestSucceeded) { "Open" } else { "Closed" }
        CheckTime    = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    }
}

# نمایش نتایج
$results | Format-Table -AutoSize

# ارسال هشدار برای پرینترهای آفلاین
$offlinePrinters = $results | Where-Object { $_.PingStatus -eq "Offline" }
if ($offlinePrinters) {
    $body = "The following printers are offline:`n"
    $body += ($offlinePrinters | Out-String)

    # ارسال ایمیل هشدار (نیاز به تنظیم SMTP)
    # Send-MailMessage -To "[email protected]" -From "[email protected]" `
    #     -Subject "Printer Alert: Offline Printers Detected" -Body $body `
    #     -SmtpServer "mail.company.com"
}

بهترین شیوه‌ها برای مدیریت پرینتر در سازمان

در پایان، بیاید یه جمع‌بندی از بهترین شیوه‌ها داشته باشیم. اگه فقط یه بخش از این مقاله رو بخوایید بوکمارک کنید، همین بخش رو انتخاب کنید!

استانداردسازی

  • مدل‌های پرینتر رو محدود کنید: استفاده از چند مدل استاندارد به‌جای ده‌ها مدل مختلف، مدیریت درایورها رو خیلی ساده‌تر می‌کنه
  • نام‌گذاری استاندارد: از یک الگوی ثابت استفاده کنید — مثلاً: PRN-[مکان]-[طبقه]-[شماره] مانند PRN-HQ-F2-01
  • درایور یکسان: تا حد امکان از HP Universal Print Driver یا درایورهای عمومی مشابه استفاده کنید

مستندسازی

  • نقشه فیزیکی مکان پرینترها رو آماده کنید
  • اطلاعات IP، مدل، شماره سریال و مکان هر پرینتر رو در CMDB ثبت کنید
  • فرآیندهای عیب‌یابی رو به‌صورت Knowledge Base مستند کنید

نگهداری پیشگیرانه

  • برنامه منظم تمیزکاری و سرویس سخت‌افزاری داشته باشید
  • Firmware پرینترها رو به‌روز نگه دارید
  • مصرف تونر و کارتریج رو مانیتور کنید و قبل از اتمام، جایگزین سفارش بدید
  • از ابزارهای مانیتورینگ مثل SNMP برای نظارت استفاده کنید

آموزش کاربران

  • به کاربران آموزش بدید قبل از ارسال تیکت، مراحل ساده مثل بررسی کاغذ، تونر و کابل رو انجام بدن
  • راهنمای سریع (Quick Reference Card) در کنار هر پرینتر قرار بدید — باور کنید خیلی کمک می‌کنه
  • پورتال سلف‌سرویس برای رفع مشکلات ساده ایجاد کنید

جمع‌بندی

مشکلات پرینتر شاید ساده به نظر برسن، ولی واقعیت اینه که عیب‌یابی حرفه‌ای‌شون نیاز به درک عمیق از معماری چاپ، شبکه، Active Directory و امنیت داره. از سرویس Print Spooler و درایورها گرفته تا Group Policy، Universal Print و امنیت PrintNightmare — هر کدوم لایه‌ای از پیچیدگی رو اضافه می‌کنن.

خلاصه نکات کلیدی:

  • همیشه عیب‌یابی رو از ساده‌ترین احتمال شروع کنید و به سمت پیچیده‌تر حرکت کنید
  • PowerShell رو جدی بگیرید — واقعاً سرعت کارتون رو چندین برابر می‌کنه
  • امنیت رو فراموش نکنید — Print Spooler رو روی سرورهای غیرضروری غیرفعال کنید
  • Microsoft Universal Print رو به‌عنوان جایگزین آینده پرینت سرورهای سنتی زیر نظر داشته باشید
  • مانیتورینگ پیشگیرانه همیشه بهتر از واکنش به مشکلاته

امیدوارم این راهنما کمکتون کنه تیکت‌های پرینتری رو سریع‌تر و حرفه‌ای‌تر حل کنید. اگه سؤالی داشتید یا تجربه خاصی توی عیب‌یابی پرینتر دارید، خوشحال می‌شیم بشنویم!

درباره نویسنده Editorial Team

Our team of expert writers and editors.