0

Мне была задана задача переписать старый сценарий в PowerShell из VBScript. Этот сценарий в основном просто читает строку текстового файла и устанавливает принтер, соответствующий этой строке, перед удалением его снова, так что только драйвер установлен.Альтернативы для добавления принтера, удаления-принтера и т. Д. Для Windows Server 2008 R2

Этот скрипт запускается каждый день на наших виртуальных терминальных серверах Citrix, таким образом мы можем обновлять драйверы независимо от текущего выпущенного изображения.

Вот что окончательный сценарий выглядит следующим образом:

# Variables 
Param([string]$FileName) 
$DriverList = Get-Content $FileName 
$ComputerName = hostname 
$LogFile = "C:\Windows\Logs\PrinterCreation.log" 
$SeperatorL = "═══════════════════════════════════════════════════════════════════════════════════════════════════════" 
$SeperatorS = "═══════════════════════════════════════════" 
$StartDate = Get-Date -Format "dd.MMM.yyyy HH:mm:ss" 

# Log Header 
"$SeperatorL" > $LogFile 
" ServerName: $ComputerName" >> $LogFile 
" DriverList: $FileName" >> $LogFile 
" StartTime: $StartDate" >> $LogFile 
"$SeperatorL" >> $LogFile 
"" >> $LogFile 
"Beginning driver instalation process:" >> $LogFile 

# Process the "$DriverList" by installing each printer on the list and deleting the connection afterwards 
foreach ($line in $DriverList) { 
    "$SeperatorL" >> $LogFile 
    " Print driver Installation: $line" >> $LogFile 

    # Installing the printer 
    try { 
     Add-Printer -ConnectionName $line -ErrorAction Stop 
     Start-Sleep -s 10 

     # Deleting the Printer 
     try { 
      Remove-Printer -Name $line -ErrorAction Stop 
      " Printer installation successfull." >> $LogFile 
     } catch { 
      " INSTALATION NOT COMPLETE:  Printer was installed but connection could not be removed!" >> $LogFile 
     } 
    } catch [Microsoft.Management.Infrastructure.CimException] { 
     " INSTALATION FAILED:   Printer driver cannot be found or does not exist!" >> $LogFile 
    } finally { 
     Start-Sleep -s 5 
    } 
} 

# Log Footnote 
$EndDate = Get-Date -Format "HH:mm:ss" 
"$SeperatorL" >> $LogFile 
"" >> $LogFile 
"Instalation process completed:" >> $LogFile 
"$SeperatorS" >> $LogFile 
" End Time: $EndDate" >> $LogFile 
"$SeperatorS" >> $LogFile 

Она вызывается так: .\scriptfilename.ps1 ".\Driverlist.txt"

Список водителя только состоит из линий, как это: "\\spbdn140\KM_Universal_PCL"

Проблемы в коротком

При написании этого сценария я не осознал что модуль управления принтером работает только с Win 8 и Server 2012. Наши серверы терминалов работают на сервере 2008.

Есть ли способ достичь того, что я пытаюсь сделать с доступной информацией (список драйверов) в PowerShell v3-4 на Server 2008?

Опять же, конечным результатом должно быть только то, что драйверы установлены на терминальных серверах, только используя предоставленную информацию.

ответ

0

Я не верю, что все командлеты принтера предназначены для Win8/Server2008R2 и более поздних версий. К сожалению, некоторые командлеты специфичны для ОС и обновление PowerShell не включает их.

Однако вы можете запустить скрипт PowerShell, который под названием cscript.exe с, что вам нужно сделать в prnmngr.vbs т.д.

Here is a list of the vbscripts that you could use in place of the print management cmdlets.