-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathNew-WEMPrinter.ps1
126 lines (99 loc) · 4.32 KB
/
New-WEMPrinter.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<#
.Synopsis
Create a new Printer Action object in the WEM Database.
.Description
Create a new Printer Action object in the WEM Database.
.Link
https://msfreaks.wordpress.com
.Parameter IdSite
..
.Parameter Name
..
.Parameter DisplayName
..
.Parameter Description
..
.Parameter State
..
.Parameter ActionType
..
.Parameter TargetPath
..
.Parameter UseExternalCredentials
..
.Parameter ExternalUsername
..
.Parameter ExternalPassword
..
.Parameter SelfHealingEnabled
..
.Parameter Connection
..
.Example
.Notes
Author: Arjan Mensch
#>
function New-WEMPrinter {
[CmdletBinding()]
param (
[Parameter(Mandatory=$True, ValueFromPipelineByPropertyName=$True, ValueFromPipeline=$True)]
[int]$IdSite,
[Parameter(Mandatory=$True)]
[string]$Name,
[Parameter(Mandatory=$False)]
[string]$DisplayName,
[Parameter(Mandatory=$False)]
[string]$Description = "",
[Parameter(Mandatory=$False)][ValidateSet("Enabled","Disabled")]
[string]$State = "Enabled",
[Parameter(Mandatory=$False)][ValidateSet("Map Network Printer","Use Device Mapping Printers File")]
[string]$ActionType = "Map Network Printer",
[Parameter(Mandatory=$True)]
[string]$TargetPath,
[Parameter(Mandatory=$False)]
[bool]$UseExternalCredentials = $False,
[Parameter(Mandatory=$False)]
[string]$ExternalUsername = $null,
[Parameter(Mandatory=$False)]
[string]$ExternalPassword = $null,
[Parameter(Mandatory=$False)]
[bool]$SelfHealingEnabled = $false,
[Parameter(Mandatory=$True)]
[System.Data.SqlClient.SqlConnection]$Connection
)
process {
### TO-DO
### $ExternalPassword Base64 encoding type before storing in database
Write-Verbose "Working with database version $($script:databaseVersion)"
# escape possible query breakers
$Name = ConvertTo-StringEscaped $Name
$DisplayName = ConvertTo-StringEscaped $DisplayName
$Description = ConvertTo-StringEscaped $Description
$TargetPath = ConvertTo-StringEscaped $TargetPath
$ExternalUsername = ConvertTo-StringEscaped $ExternalUsername
# name is unique if it's not yet used in the same Action Type in the site
$SQLQuery = "SELECT COUNT(*) AS ObjectCount FROM VUEMPrinters WHERE Name LIKE '$($Name)' AND IdSite = $($IdSite)"
$result = Invoke-SQL -Connection $Connection -Query $SQLQuery
if ($result.Tables.Rows.ObjectCount) {
# name must be unique
Write-Error "There's already a Printer object named '$($Name)' in the Configuration"
Break
}
Write-Verbose "Name is unique: Continue"
# apply Advanced Option values
[xml]$actionReserved = $defaultVUEMPrinterReserved
($actionReserved.ArrayOfVUEMActionAdvancedOption.VUEMActionAdvancedOption | Where-Object {$_.Name -like "SelfHealingEnabled"}).Value = [string][int]$SelfHealingEnabled
# build the query to update the action
$SQLQuery = "INSERT INTO VUEMPrinters (IdSite,Name,Description,DisplayName,State,ActionType,TargetPath,UseExtCredentials,ExtLogin,ExtPassword,RevisionId,Reserved01) VALUES ($($IdSite),'$($Name)','$($Description)','$($DisplayName)',$($tableVUEMState[$State]),$($tableVUEMPrinterActionType[$ActionType]),'$($TargetPath)',$([int]$UseExternalCredentials),'$($ExternalUsername)','$($ExternalPassword)',1,'$($actionReserved.OuterXml)')"
$null = Invoke-SQL -Connection $Connection -Query $SQLQuery
# grab the new action
$SQLQuery = "SELECT IdPrinter AS IdAction FROM VUEMPrinters WHERE IdSite = $($IdSite) AND Name = '$($Name)'"
$result = Invoke-SQL -Connection $Connection -Query $SQLQuery
# Updating the ChangeLog
$IdObject = $result.Tables.Rows.IdPrinter
New-ChangesLogEntry -Connection $Connection -IdSite $IdSite -IdElement $IdObject -ChangeType "Create" -ObjectName $Name -ObjectType "Actions\Printer" -NewValue "N/A" -ChangeDescription $null -Reserved01 $null
# Return the new object
return New-VUEMPrinterObject -DataRow $result.Tables.Rows
#Get-WEMPrinter -Connection $Connection -IdAction $IdObject
}
}