Print Server Windows yang toleran


Admin sungguhan dapat tidur nyenyak hanya ketika semuanya dicadangkan, dipantau, dan digandakan. Atau ketika dia bekerja di tim yang baik, di mana Anda selalu bisa menyalahkan orang lain.
Kebetulan saya terutama menggunakan produk Microsoft dalam pekerjaan saya dan saya dapat mengatakan bahwa perusahaan ini serius untuk membuat cadangan layanannya: Active Directory, Exchange DAG, SQL Always On, DFSR, dll. Seperti di tempat lain, ada implementasi yang sangat elegan dan sukses, serta yang jelas tidak nyaman dan sulit. Ada juga solusi untuk layanan cetak, tetapi membutuhkan pengelompokan berbasis Hyper-V. Dan saya menginginkan solusi sederhana "out of the box", yang tidak memerlukan dana tambahan. Windows 2012 R2 diambil sebagai dasar, tetapi kemungkinan besar skema yang sama akan bekerja tanpa masalah pada versi server apa pun dimulai dengan Windows 2008, dan bahkan sistem operasi klien dari Vista dan lebih tinggi (halo untuk penggemar menghemat anggaran!). Siapa yang peduli - saya minta kucing.

Penafian
Untuk menghormati karya orang India , karena pemirsa Habr terutama berbahasa Rusia dan untuk memudahkan administrator pemula, contoh-contohnya menggunakan antarmuka Windows versi Rusia. Tautan, jika memungkinkan, juga mengarah ke sumber daya berbahasa Rusia.


Sedikit teori


Siapa pun yang tidak suka teori dan ingin mengklik lebih cepat dengan mouse dan keyboard dapat langsung ke bagian selanjutnya.
Seperti disebutkan di atas, rekomendasi resmi hari ini adalah solusi menggunakan pengelompokan dan virtualisasi Hyper-V. Juga, tidak ada yang mencegah toleransi kesalahan layanan cetak pada tingkat sistem virtualisasi, dan tidak harus Hyper-V, tetapi solusi semacam itu membutuhkan biaya.
Saya benar-benar menginginkan sesuatu yang mirip dengan DHCP Failover , tetapi untuk peran server cetak.
Tidak ada yang cocok ditemukan di Internet secara umum dan pada Habr pada khususnya - dan saya harus menciptakannya sendiri.

Esensi gagasan dalam satu paragraf
Solusi yang dijelaskan di bawah ini didasarkan pada utilitas BrintBrm, yang merupakan bagian dari distribusi Windows standar dan telah datang untuk menggantikan printmig .
Server siaga bekerja dalam mode siaga dan menyinkronkan pengaturan dengan server utama dengan frekuensi yang ditentukan menggunakan utilitas ini. Untuk klien, CNAME dengan TTL kecil dibuat dalam DNS, merujuk server utama. Jika terjadi kegagalan pada server utama, administrator memperbaiki CNAME dengan mengalihkan klien ke server cadangan. Faktanya, itu saja.
Jika topiknya menarik dan saya ingin berkenalan dengan benjolan-benjolan yang sudah diisi dengan saya dan cara-cara untuk memotong penggaruk, silakan ikuti berikutnya.

Sebelum Anda mulai, atau apa yang perlu Anda ketahui tentang PrintBrm


Jadi, apa itu, utilitas PrintBrm ini, yang tujuan utamanya adalah melayani server cetak?
  • Terawat dengan baik. Ini memiliki implementasi GUI yang disebut Print Migration dan dapat diluncurkan dari snap-in Print Management . Versi GUI kurang fungsional dan memiliki masalah dengan port porting.
  • Penuh perhatian Secara default, ini menangani ACL printer dari server cetak. Dengan kata lain, jika Anda mengizinkan pencetakan ke printer \\ printserver \ printer1 hanya untuk karyawan yang merupakan anggota grup AD Akuntansi , maka pembatasan ini akan diperhitungkan untuk impor / ekspor. Atau tidak, jika Anda memasukkan kunci -NOACL . Namun, ACL dari server cetak itu sendiri tidak diproses terlepas dari tombol apa.
  • Moody. Pada saat mengimpor parameter dari file, server target harus memiliki setidaknya satu printer yang dipakai bersama, jika tidak, Anda akan mendapatkan kesalahan.
  • Lembut. Kehilangan ruang melihat di jalur file. Saat melihat tanda kutip membingkai jalan seperti itu, dia kesal dan memberikan kesalahan 0x8007007b.
  • Sederhana Jika file yang ditentukan sudah ada saat mencoba untuk mengekspor pengaturan, itu tidak dapat menimpanya, ia malu untuk bertanya dan juga diakhiri dengan kesalahan.
  • Misterius. Selalu mengembalikan kode keluar 0 . Ternyata, program yang sempurna.
  • Apt untuk berpikir. Dapat membeku pada tahap 100% menit selama 5, dan kadang-kadang lebih. Tapi kemudian dia berpikir dan menyelesaikan pekerjaannya (kecuali, tentu saja, Anda memiliki kesabaran untuk tidak menekan Ctrl + C).
  • Tiba-tiba dan saling bertentangan. Dapat mengatur kejutan seperti itu .
  • Pintar Dapat menugaskan kembali driver sumber ke orang lain. Misalnya, menggunakan file XML, Anda dapat menentukan bahwa semua driver HP Universal Printing PCL 5 dalam file yang disimpan di server tujuan harus dipindahkan ke HP Universal Printing PCL 6. Saya belum menggunakannya dalam praktiknya, tetapi ini dapat berguna bagi seseorang.
  • Tidak patuh. Saya tidak bisa menggunakannya untuk mentransfer pengaturan antara domain tanpa kepercayaan, bahkan dengan saklar -NOACL. Entah dia tidak bisa melakukannya secara prinsip, atau sihirku tidak cukup kuat.
  • Anda bisa mengenal lebih baik di sini dan di sini , tetapi bagi mereka yang berani yang tidak ragu untuk bertanya langsung, ada kunci /?


Saya akui bahwa beberapa fitur yang tidak saya abaikan. Mungkin di Windows 10/2016 dia mulai berperilaku berbeda. Jika ada informasi, silakan bagikan.

Persiapan lingkungan


Diasumsikan bahwa Anda telah menggunakan Active Directory dan Anda tahu setidaknya 3 cara untuk menonaktifkannya dan setidaknya 2 dari mereka telah diuji dalam praktik.

Beberapa lirik
Berangkat dari topik artikel, saya perhatikan bahwa saya suka pesanannya, dan saya yakin bahwa setiap printer jaringan dan MFP memiliki stiker yang sesuai dengan nama jaringannya. Ini menyederhanakan pekerjaan karyawan TI ketika mereka mencoba mencari tahu dari pengguna yang laporan analitik penting printer foto kucing dicetak dalam nada asam toksik daripada yang pistachio halus. Lebih baik menempelkan stiker semacam itu di bagian bawah printer, sehingga semua orang akan lebih tertarik dan lebih menyenangkan.
Saya juga suka ketika setiap printer jaringan terdaftar di zona DNS internal. Server DHCP berbasis Windows dapat dengan mudah melakukan ini.
Misalnya, nama printer bisa dalam format msk-prn001 atau sale-printer023, dan nama port untuk printer ini di server cetak dinamai sama persis. Tapi ini preferensi pribadi saya, saya siap mendengar keberatan dalam komentar.

Kami akan menganggap bahwa semua printer berjaringan dan tersedia untuk dicetak dari server cetak utama dan cadangan. Biarkan server ini disebut masing - masing prn-srv01 dan prn-srv02 .
Server domain pada Windows Server tidak lebih rendah dari 2008 cocok sebagai server cetak. Pada prinsipnya, OS klien yang dimulai dengan Vista juga cocok, jika Anda benar-benar ingin menghemat uang. Contohnya menggunakan Windows 2012 R2. Sangat disarankan untuk menginstal semua pembaruan yang diperlukan dari sistem operasi sebelum menyiapkan server dan mesin klien.

Anda sendiri, tentu saja, mengerti, tetapi batasannya masih membutuhkan perhatian: jika server cetak virtual, maka mereka harus didistribusikan ke server fisik yang berbeda, jika tidak, failover kita akan berubah menjadi gagal.

Pada prn-srv01 dan prn-srv02 , peran server cetak harus ditambahkan. Lebih nyaman bagi saya untuk menggunakan cmdlet PowerShell:
Install-WindowsFeature Print-Services

Juga, tweak registri harus diterapkan pada server cetak, yang memperbaiki kesalahan 0 Γ— 00000709 ketika mesin klien mengakses server cetak melalui CNAME. Anda dapat melakukan ini dengan perintah dari artikel di tautan di atas:
reg add HKLM\SYSTEM\CurrentControlSet\Control\Print /v DnsOnWire /t REG_DWORD /d 1
Setelah menerapkan perintah, Anda harus memulai kembali layanan Print Manager .
Saya sarankan Anda mengalokasikan OU terpisah untuk server cetak dan mendistribusikan pengaturan ini menggunakan GPP .

Kami memulai snap-in DNS pada pengontrol domain dan mengaktifkan tampilan yang diperluas:
klik


Pemetaan lanjutan diperlukan untuk dapat mengatur TTL untuk catatan yang dibuat.
Di DNS, buat catatan cetak CNAME yang merujuk prn-srv01 dengan nilai TTL 5 menit:
klik


klik


Nama ini harus digunakan oleh mesin klien untuk terhubung ke server cetak. Yaitu klien akan terhubung ke alamat \\ print \ printer01, \\ print \ printer02, dll.
Semakin rendah nilai TTL, semakin sering klien memperbarui catatan dan semakin cepat β€œmemahami” bahwa mereka perlu beralih ke server cetak lain. 5 menit sudah cukup untukku.
Dengan menetapkan nilai terlalu rendah, Anda menghasilkan lalu lintas DNS di jaringan Anda, dan dengan menentukan satu atau dua jam, Anda menekankan toleransi stres dan saraf yang kuat .
Cara alternatif untuk menambahkan catatan CNAME menggunakan PowerShell:
Import-Module DnsServer
Add-DnsServerResourceRecordCName -Name "print" -HostNameAlias "prn-srv01.lab.net" -ZoneName "lab.net" -TimeToLive 00:05:00

(Tentu saja, kami mengubah lab.net ke contoso.local Anda atau apa pun itu)

Perlu diingat bahwa jika Anda memiliki beberapa situs AD, memperbarui catatan DNS di semua lokasi akan memakan waktu lebih lama karena replikasi lintas-situs. Anda dapat memaksa proses dengan perintah repadmin / syncall .

Menggunakan Kebijakan Grup, kami mengizinkan pengguna biasa untuk menginstal driver dari server cetak. Cara melakukan ini dijelaskan secara rinci di sini .

Buat akun layanan dalam AD (Saya menamakannya svc-printsync) dengan kedaluwarsa kata sandi tak terbatas:
klik


Menurut persyaratan PrintBrm, akun ini harus memiliki hak penuh pada server cetak, jadi kami menambahkannya ke domain admin sehingga semuanya berfungsi dengan pasti dan kami menulis kata sandi di bidang deskripsi agar tidak melupakan grup Administrator lokal di prn-srv01 dan prn-srv02 ( misalnya, menggunakan snap- in Manajemen Komputer ).

Konfigurasikan server pertama


Jika semua printer yang diperlukan pada printer utama telah ditambahkan, maka Anda dapat langsung melanjutkan ke bagian mengkonfigurasi server kedua.

Menggunakan snap-in Print Management , kami menambahkan driver untuk printer yang diperlukan ke server:
klik


Wisaya instalasi driver diluncurkan. Ini intuitif, Anda bisa mengetahuinya sendiri. Saya hanya akan memperhatikan momen dengan kedalaman sedikit.
Karena Karena Windows 2012R2 hanya tersedia dalam versi x64, drivernya juga harus x64. Jika klien dengan versi Windows x86 akan terhubung ke server cetak, jangan lupa untuk mencentang kotak yang sesuai:
klik


Beberapa kit driver berisi inf-file umum untuk sistem x86 dan x64, sementara yang lain memiliki pemisahan.

Beberapa lirik lagi
Banyak driver datang dalam bentuk installer, tetapi mengingat bahwa installer ini menempatkan banyak sampah bersama dengan driver, saya mencoba mengikuti prinsip "perlu dan cukup" dan menambahkan driver secara manual, seperti dijelaskan di atas.
Juga, demi konsistensi, saya berusaha keras untuk menggunakan driver versi Universal secara maksimal (hampir semua vendor normal memilikinya). Namun terkadang itu bisa menjadi masalah. Jadi, begitu saya bertemu bug di salah satu versi HP Universal Printing PCL 6, di mana dokumen PDF melalui EasyPrint dalam sesi RDP dicetak mirror-to-left dari kanan ke kanan.
Anda juga dapat melihat ke driver v4 .


Ketika semua driver yang diperlukan ditambahkan, kami akan berurusan dengan port dan printer. Anda bisa menambahkannya secara manual dari snap-in yang sama, tetapi saya sarankan membuat file CSV di Excel dan mengumpankannya ke skrip PowerShell. Tentu saja, tidak ada yang mencegah Excel menggunakan editor spreadsheet atau notepad lainnya secara umum. Hal utama adalah bahwa pemisah dan pengkodean yang ditentukan dalam skrip sesuai dengan pemisah dan pengkodean dalam file CSV.
Perhatikan juga bahwa nama driver dalam file CSV harus persis sama dengan yang ditentukan dalam snap-in Manajemen Cetak.
Salin-tempel ke penyelamatan



Contoh file CSV



Meskipun saya menulis di atas bahwa saya suka ketika semua printer memiliki nama jaringan yang disatukan, contoh (bidang alamat printer ) menggunakan vinaigrette alamat IP dan nama jika Anda tidak memiliki pesanan di jaringan Anda beberapa saat kemudian.

Simpan tabel ini dalam format CSV:
klik

Catatan Terlepas dari kenyataan bahwa koma diindikasikan sebagai pemisah di bidang "Jenis file", Excel telah membuat tanda titik koma sebagai pemisah. Mungkin menjadi lebih menarik dan lebih menyenangkan.

Dan ini skripnya sendiri:
BuatPrintersFromCsv.ps1
 #    $InputFile = 'C:\Scripts\Printers.csv' #      CSV- $Printers = (Import-Csv $InputFile -Delimiter ";" -Encoding Default) #          ForEach ($Printer in $Printers) { #       $PrinterName = $Printer.' ' $ShareName = $Printer.'  ' $DriverName = $Printer.' ' $PrinterAddr = $Printer.' ' $Comment = $Printer.'' $Location = $Printer.'' #  Add-PrinterPort -Name $PrinterAddr -PrinterHostAddress $PrinterAddr -SNMP 1 -SNMPCommunity 'public' #  Add-Printer -Name $PrinterName -DriverName $DriverName -PortName $PrinterAddr -Comment $Comment -Location $Location #   Set-Printer -Name $PrinterName -Shared $True -Published $False -ShareName $ShareName } 


Jika karakter tab digunakan sebagai pembatas di CSV Anda, maka dalam skrip Anda perlu mengatur -Delimiter "` t "

Harap dicatat bahwa jika printer tidak tersedia dari server saat skrip berjalan, menambahkannya ke server cetak akan lebih lama (2-3 menit, bukan beberapa detik)

Hasil skrip:
klik



Untuk memastikan bahwa semuanya berfungsi pada tahap ini, tambahkan printer bersama ke salah satu mesin klien dari server cetak utama menggunakan CNAME yang dibuat sebelumnya (misalnya, \\ print \ printer01), dan cobalah untuk mencetak sesuatu di atasnya. Untuk tujuan ini, frasa "Preved, I am a secarik kertas", diketik dalam huruf tebal Arial dengan ukuran ke-200, paling cocok untuk tujuan ini.

Konfigurasikan server kedua


Un artista copia, un gran artista roba (Pablo Picasso)

Prn-srv02 kami belum mencapai level gran artista, jadi kami akan membatasi diri untuk menyalin. Meskipun ... itu mungkin dengan gerakan pergelangan tangan ...

Kami membuat dan membagikan setidaknya satu printer, jika tidak PrintBrm akan memberikan kesalahan. Anda dapat membuat palsu, tetapi penting untuk tidak memilih driver atau port yang salah. Misalnya, printer dengan driver Microsoft XPS Document Writer atau port FILE tidak dapat dibagikan.

Kami membuat skrip sinkronisasi sederhana. Saya lebih suka PowerShell, tetapi tidak ada yang melarang membuat file batch tabung hangat.

PrintSync.ps1
 #   PrintBrm $ProgramPath = 'C:\Windows\System32\Spool\Tools\PrintBrm.exe' #    $SourceServer = 'prn-srv01' $DestServer = 'prn-srv02' #,   .     , ..  PrintBrm       $ConfigFilePath = 'C:\Scripts\prn-config.printerExport' #    $Arguments = "-s $SourceServer -f $ConfigFilePath -b" Start-process $ProgramPath -ArgumentList $Arguments -Wait -PassThru #    $Arguments = "-s $DestServer -f $ConfigFilePath -r -o force" Start-process $ProgramPath -ArgumentList $Arguments -Wait -PassThru #   Del $ConfigFilePath 



Kami menempatkan skrip di tempat terpencil (dalam contoh skrip adalah C: \ Script ) dan membuat tugas di Penjadwal.
Kami akan lari dari akun svc-printsync yang sebelumnya dibuat dengan izin tertinggi:
klik


Tentukan frekuensi eksekusi untuk Anda sendiri. Cukup untuk saya sekali sehari:
klik


Pada tab Tindakan, buat tindakan peluncuran PowerShell baru:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Sebagai argumen, kami menetapkan jalur ke skrip dengan parameter berikut:
C:\Scripts\PrintSync.ps1 -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass
klik


Kami membiarkan parameter tugas lainnya pada tab Kondisi dan Parameter secara default.
Saat menyimpan tugas, kata sandi akan diminta untuk akun svc-printsync . Anda tidak melupakannya? Jika Anda sudah lupa (artikelnya panjang), maka semuanya dilakukan dengan sia-sia dan hidup tidak berhasil.Reset ulang menggunakan ADUC snap-in atau dengan cara lain yang mudah dan tentukan itu sudah di bidang deskripsi untuk membuatnya lebih tenang .

Catatan
Pekerjaan tidak harus dijalankan pada server cetak cadangan. Jika Anda memiliki server terpisah untuk menjalankan rutinitas, Anda dapat membuat tugas di atasnya. Dalam hal ini, akun svc-printsync harus memiliki hak untuk masuk sebagai pekerjaan batch di server ini. Secara default, grup Operator Cadangan lokal memiliki hak ini, dan jika ini tidak diubah di lingkungan Anda, maka cukup sertakan akun layanan dalam grup operator arsip server di mana tugas akan dijalankan.


Untuk pertama kalinya, kami memulai tugas secara manual dan menunggu penyelesaiannya.
Untuk kebun binatang saya, di mana ada sekitar 50 printer dari berbagai jenis, baik yang terancam punah maupun yang baru saja dibesarkan, prosedur sinkronisasi membutuhkan waktu sekitar 10 menit. File pada saat yang sama memiliki berat hampir 1GB.
Untuk mempercepat proses impor / ekspor, Anda dapat menggunakan sakelar -NOBIN , yang bertanggung jawab untuk menyalin driver. Masuk akal ketika armada printer terdiri dari model yang sama dan driver yang diperlukan diinstal pada semua server.

Setelah selesai, jalankan snap- in Peraga Peristiwa , buka bagian Aplikasi dan Log Layanan , buka log Microsoft \ Microsoft \ PrintBRM \ Administrator dan analisis untuk kesalahan dan peringatan. Dan jika jumlahnya terlalu banyak, maka kita cenderung membersihkan majalah agar mata kita tidak kalus.

Saya menemukan kode 20, 22, 80 dan 81. Misalnya,
seperti itu


Seperti yang jelas dari teks, ada masalah dalam mentransfer driver tertentu. Melihat melalui log, kami membuat daftar driver yang bermasalah dan meletakkannya di server cadangan dengan tangan kami, atau menggantinya dengan yang lain yang tidak suka bepergian. Saya hanya memiliki masalah dengan HP, Kyocera dan Konica Minolta, tidak ada kesalahan yang terdeteksi untuk driver dari produsen lain (mungkin karena mereka lebih baik, atau mungkin karena kami tidak memilikinya).
Akibatnya, Anda harus mencapai daftar printer yang sama di server utama dan cadangan dan tidak ada kesalahan dan peringatan di log.

Beralih ke cadangan


Di bawah ketukan kapak dan gerinda garpu, kami membarikade pintu kantor kami dan mematikan telepon. Jalankan snap-in DNS dan edit data CNAME sehingga mengarah ke server cadangan:
klik


Setelah beberapa saat (apa yang Anda masukkan ke TTL di sana?), Teriakan mengancam akan mereda, mesin klien akan beralih ke prn-srv02 dan pintu dengan telepon dapat dibuka .

Kembali


Jika selama pemulihan server utama pada cadangan ada perubahan konfigurasi yang perlu disimpan, kami mulai sinkronisasi ke arah yang berlawanan. Untuk melakukan ini, dalam skrip PrintSync.ps1 di atas , kita menukar nilai variabel $ SourceServer dan $ DestServer . Setelah mentransfer perubahan, jangan lupa untuk mengembalikan nilai-nilai ini kembali, jika tidak semua perubahan dalam konfigurasi printer pada prn-srv01 tanpa ampun akan disapu setiap malam oleh kehendak jahat nasib.
Dalam snap-in DNS, atur cetak ke catatan CNAME dengan nilai node akhir prn-srv01 - dan semuanya kembali ke titik awal.

Apa hasilnya?


Tepuk tangan meriah dari pimpinan, melemparkan admin di lengannya, menaikkan gaji (ke penulis artikel - jujur ​​10% dari kenaikan) ...
Nah, beberapa pemikiran ke arah bimbingan kecantikan lebih lanjut.

Sayangnya, tidak ada cukup mukjizat untuk semua orang, dan solusi ini bukan kegagalan total. Jika pada saat runtuhnya server cetak utama ada antrian cetak tidak kosong di atasnya, maka isinya kemungkinan besar akan menghilang ke udara dan seseorang harus mengulangi mengirimnya untuk dicetak.

Tetapi akan sangat nyaman bagi pengguna untuk melakukan pemeliharaan rutin server cetak secara transparan.
Anda mengikuti rekomendasi Microsoft?



Penggemar otomasi dapat melangkah lebih jauh dan membuat skrip yang menerima nama server dengan interval sinkronisasi pada input dan melakukan sisa pengaturan itu sendiri: membuat akun layanan jika perlu, tugas dalam penjadwal, dll.

Pemantauan guru akan menambah pemantauan tugas sinkronisasi dan kesalahan dalam log.

Pecinta menggali lebih dalam dapat memikirkan sinkronisasi dua arah dalam semangat replikasi AD dengan perubahan pelacakan waktu untuk setiap printer. PrintBrm tidak akan membantu di sini, tetapi tidak ada yang membatalkan PowerShell!

Ceri pada kue akan menjadi instalasi otomatis printer pada mesin klien menggunakan GPP, menargetkan grup AD. Tambahkan pengguna ke grup - dan printer yang diinginkan terbang kepadanya. Benar, ini adalah kisah lain yang melampaui ruang lingkup artikel.

Saya berharap bagi seseorang publikasi saya akan bermanfaat. Saya berharap semua orang tidak mengalami gangguan dan menantikan pertanyaan dan saran di komentar.

Source: https://habr.com/ru/post/id414369/


All Articles