# encoding: ascii
# api: powershell
# title: SDM GPAE
# description: Adding Group Policy Preferences printer with SDM GPAE (Group Policy Automation Engine) including Item-Level targeting
# version: 0.1
# type: script
# author: Bobsys
# license: CC0
# x-poshcode-id: 4571
# x-archived: 2013-11-04T00:45:53
# x-published: 2013-10-30T22:38:00
#
#
# The script is using a csv file in the following format
#
#	Domain,GPOName,PrinterName,PrinterPath,Order,GroupName
#	domain.local,TestGP,TestPrinter1,\\server1\printer1,1,group1
#	domain.local,TestGP,TestPrinter2,\\server1\printer2,2,group2
#	domain.local,TestGP,TestPrinter3,\\server1\printer3,3,group3
#
# Importing the SDM module into Powershell

Import-Module SDM-GroupPolicy

# Read the csv file

$PrinterList=Import-CSV C:\scripts\printers.csv

foreach ($entry in $PrinterList)
{

#Set the variables

$Domain=$entry.Domain
$GPOName=$entry.GPOName
$PrinterName=$entry.PrinterName
$PrinterPath=$entry.PrinterPath
$Order=$entry.Order
$GroupName=$entry.GroupName

# Opening the Group Policy object

$gpo = Get-SDMgpobject -gpoName "gpo://$Domain/$GPONAME" -openByName

# Open the Printer hive within the GP

$container = $gpo.GetObject("User Configuration/Preferences/Control Panel Settings/Printers/Shared Printer")

# Creating the printers

$printer = $container.Settings.AddNew("$PrinterName")

$printer.Put("Action",[GPOSDK.EAction]"Create")

$printer.Put("Share path","$PrinterPath")

# Setup the order of the printers

$printer.Put("Order",$Order)

# If you don't want to use item-level Targeting you use the following command
# $printer.Save()

# Ignore this part if you don't want item-level targeting
# Creating the Item-Level targeting

$iilt = $gpo.CreateILTargetingList()

$itm = $iilt.CreateIILTargeting([GPOSDK.Providers.ILTargetingType]"FilterGroup")

# Set the group for filtering, the printer setting will apply to this group

$itm.Put("Group","$GroupName")

$itm.Put("UserInGroup", $true)

$iilt.Add($itm)

# Saving the filter

$printer.put("Item-level targeting", $iilt)

# Save the GP

$printer.Save()
}
