2015-06-24 5 views
0

Я написал сценарий для резервного копирования профиля пользователя на сетевой ресурс. Мой босс хочет, чтобы он также выполнял резервное копирование и восстановление сетевых принтеров. Этот скрипт включает в себя следующую строку PowerShell ...Установка сетевых принтеров из CSV

Get-WMIObject -class Win32_Printer -computer $env:computername | Select Name | Export-CSV -path '\\share\printer_export.csv' 

это экспортирует все принтеры в CSV. Значения выглядят так.

#TYPE Selected.System.Management.ManagementObject 
Name 
Snagit 10 
Microsoft XPS Document Writer 
\\\server\printer1 
\\\server\printer2 
\\\server\printer3 

Я написал еще один скрипт, чтобы скопировать профиль пользователей из резервной копии на текущий компьютер. Это включает в себя следующие полномочия.

$PrinterList=IMPORT-CSV \\share\printer_export.csv 
FOREACH ($Printer in $PrinterList) { 
    Invoke-Expression 'rundll32 printui.dll PrintUIEntry /in /q /n $Printer' 
} 

переменная $Printer должна возвращать значение \\\server\printer1 таким образом устанавливая принтеры из командной строки ... но ничего не происходит. Где я неправ?

ТАКЖЕ, как я могу заставить его игнорировать любую строку CSV, которая не начинается с «\»?

Ответ на этот вопрос устранен.

Вот полный сценарий. В настоящее время она поддерживает профиль пользователей, подпись, панель задач иконки, Outlook PST, хром закладку, Itunes мобильных резервные копии, расширенные настройки цвета Reg, обои для рабочего стола, экспортирует принтеры CSV

REM CLOSE OUTLOOK 
cscript "\\server\outlook.vbs" 

REM BACKUP USERS PROFILE 
xcopy "%userprofile%" "\\server\%username%\%username%" /e /y /i 

REM BACKUP SIGNATURES 
xcopy "%appdata%\microsoft\signatures" "\\server\%username%\Signatures" /e /y /i 

REM BACKUP PINNED TASKBAR ITEMS 
xcopy "%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar" "\\server\%username%\TaskBar" /e /y /i 

REM BACKUP OUTLOOK ARCHIVES PST OUTLOOK MUST BE CLOSED 
xcopy "C:\Users\%username%\AppData\Local\Microsoft\Outlook\*.pst" "\\server\%username%\Outlook" /y /i 

REM BACKUP CHROME BOOKMARKS 
xcopy "C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default" "\\server\%username%\Chrome" /e /y /i 

REM BACKUP iTUNES MOBILE BACKUPS 
xcopy "C:\Users\%username%\AppData\Roaming\Apple Computer\MobileSync" "\\server\%username%\MobileSync" /e /y /i 

REM BACKUP ADVANCED COLOR SETTINGS 
REG EXPORT "HKCU\Control Panel\Colors" "\\server\%username%\Wallpaper\Colors1.reg" /y 

REM BACKUP ADVANCED COLOR SETTINGS 
REG EXPORT "HKCU\Control Panel\Desktop\Colors" "\\server\%username%\Wallpaper\Colors2.reg" /y 

REM BACKUP DESKTOP BG SETTINGS 
REG EXPORT "HKCU\Control Panel\Desktop\WindowMetrics" "\\server\%username%\Wallpaper\WindowMetrics_Backup.reg" /y 

REM START WALLPAPER BACKUP SCRIPT 
Powershell.exe -executionpolicy remotesigned -File "wallpaper.ps1" 

REM ASSIGNES VALUE OF CURRENT WALLPAPER TO A VARIABLE 
$wallpaper = (Get-ItemProperty 'hkcu:\control panel\desktop\' -Name Wallpaper).Wallpaper 

REM COPIES THE VARIABLE TO THE USERS BACKUP 
xcopy $wallpaper "\\server\$env:username\Wallpaper\" 

REM EXPORTS ALL CURRENTLY INSTALLED PRINTERS TO CSV 
Get-WMIObject -class Win32_Printer -computer $env:computername | Select Name | Export-CSV -path '\\server\$env:username\printer_export.csv' 

Вот Сценарий восстановления. После того, как я создаю компьютер, я запускаю этот скрипт, чтобы вернуть все.

REM CLOSES OUTLOOK 
cscript "\\itmdtren\z$\backup scripts\outlook.vbs" 

REM RESTORE USERS PROFILE DATA 
xcopy "\\server\%username%\%username%" "%userprofile%" /e /y /i 

REM RESTORE SIGS 
xcopy "\\server\%username%\Signatures" "%appdata%\microsoft\signatures" /e /y /i 

REM RESTORE TASKBAR ICONS, THIS LINE NOT USED 
REM xcopy "\\server\%username%\TaskBar" "%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar" /e /y /i 

REM RETORE OUTLOOK ARCHIVES PST 
xcopy "\\server\%username%\Outlook\*.pst" "C:\Users\%username%\Documents\Outlook Files" /y /i 

REM RETORE CHROME BOOKMARKS AND USER DEFAULT DATA 
xcopy "\\server\%username%\Chrome" "C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default" /e /y /i 

REM RESTORE iTUNES BACKUPS 
xcopy "\\server\%username%\MobileSync" "C:\Users\%username%\AppData\Roaming\Apple Computer\MobileSync" /e /y /i 

REM RESTORE ADVANCED BACKGROUND COLOR SETTINGS 
REG import "\\itmdtren\z$\backup\%username%\Wallpaper\Colors1.reg" 
REG import "\\itmdtren\z$\backup\%username%\Wallpaper\Colors2.reg" 
REG import "\\itmdtren\z$\backup\%username%\Wallpaper\WindowMetrics_Backup.reg" 

REM RESTORE USERS WALLPAPER USING wallpaperchanger.exe found here http://sg20.com/techblog/2011/06/23/wallpaper-changer-command-line-utility/ 
REM launches exe from the server, points at the wallpaper folder, randomly selects image, converts to bmp and copies it to the users theme folder then sets as wallpaper 

"\\server\WallpaperChanger.exe" "\\server\%username%\Wallpaper" 2 "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Themes" 

Powershell.exe -executionpolicy Unrestricted -File "PRINT.ps1" 

# PRINT.ps1 looks like this 
$PrinterList=IMPORT-CSV \\server\$env:username\printer_export.csv 

FOREACH ($Printer in $PrinterList) { 
Invoke-Expression 'rundll32 printui.dll PrintUIEntry /in /q /n $($Printer.Name)' 

} 

REM REFRESH USER SYSTEM PARAMETERS 
RUNDLL32.EXE user32.dll,UpdatePerUserSystemParameters 

ответ

3

Оба вопроса довольно прост ... Где вы пошли не так, что при импорте CSV он создал массив объектов. Каждый объект имеет одно свойство, Name. Когда вы обращаетесь к этому объекту необходимо указать свойство, которое вы хотите использовать, так что вы Invoke-Expression линия должна быть:

Invoke-Expression 'rundll32 printui.dll PrintUIEntry /in /q /n $($Printer.Name)' 

Это расширит имя, и он должен работать, как ожидается, в этот момент. Что касается получения его пропустить записи, которые не начинаются с «\» вы можете сделать что-то вроде:

FOREACH ($Printer in ($PrinterList | Where{$_.Name -like "\*"})) { 

Это проходит только те записи, которые начинаются с «\» в петлю ForEach.

+0

OMG! который работал как шарм! это мой первый сценарий powershell, и я мог бы отказаться от него, если бы не этот пост! Спасибо большое!!! – Blake

+0

Если кто-то хочет использовать мои сценарии резервного копирования и восстановления, они размещаются выше. Мои фактические сценарии разбиты на отдельные файлы .bat и .ps1, но вы можете легко сделать это самостоятельно. измените содержание вашего сердца! – Blake

Смежные вопросы