forked from microsoft/navcontainerhelper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
HelperFunctions.ps1
122 lines (108 loc) · 3.92 KB
/
HelperFunctions.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
function Log([string]$line, [string]$color = "Gray") {
Write-Host -ForegroundColor $color $line
}
function Get-DefaultCredential {
Param(
[string]$Message,
[string]$DefaultUserName
)
if (Test-Path "$hostHelperFolder\settings.ps1") {
. "$hostHelperFolder\settings.ps1"
if (Test-Path "$hostHelperFolder\aes.key") {
$key = Get-Content -Path "$hostHelperFolder\aes.key"
New-Object System.Management.Automation.PSCredential ($DefaultUserName, (ConvertTo-SecureString -String $adminPassword -Key $key))
} else {
New-Object System.Management.Automation.PSCredential ($DefaultUserName, (ConvertTo-SecureString -String $adminPassword))
}
} else {
Get-Credential -username $DefaultUserName -Message $Message
}
}
function Get-DefaultSqlCredential {
Param(
[Parameter(Mandatory=$true)]
[string]$containerName,
[System.Management.Automation.PSCredential]$sqlCredential = $null
)
if (($sqlCredential -eq $null) -or ($sqlCredential -eq [System.Management.Automation.PSCredential]::Empty)) {
$containerAuth = Get-NavContainerAuth -containerName $containerName
if ($containerAuth -ne "Windows") {
$sqlCredential = Get-DefaultCredential -DefaultUserName "sa" -Message "Please enter the SQL Server System Admin credentials for container $containerName"
}
}
$sqlCredential
}
function DockerDo {
Param(
[Parameter(Mandatory=$true)]
[string]$imageName,
[ValidateSet('run','start')]
[string]$command = "run",
[switch]$accept_eula,
[switch]$accept_outdated,
[switch]$wait,
[string[]]$parameters
)
if ($accept_eula) {
$parameters += "--env accept_eula=Y"
}
if ($accept_outdated) {
$parameters += "--env accept_outdated=Y"
}
if (!$wait) {
$parameters += "--detach"
}
$arguments = ("$command "+[string]::Join(" ", $parameters)+" $imageName")
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "docker.exe"
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = $arguments
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$p.WaitForExit()
$output = $p.StandardOutput.ReadToEnd()
$output += $p.StandardError.ReadToEnd()
if ($p.ExitCode -eq 0) {
return $true
} else {
Write-Host -ForegroundColor red $output
Write-Host -ForegroundColor red "Commandline: docker $arguments"
return $false
}
}
function Get-NavContainerAuth {
Param
(
[string]$containerName
)
$session = Get-NavContainerSession -containerName $containerName -silent
Invoke-Command -Session $session -ScriptBlock {
$customConfigFile = Join-Path (Get-Item "C:\Program Files\Microsoft Dynamics NAV\*\Service").FullName "CustomSettings.config"
[xml]$customConfig = [System.IO.File]::ReadAllText($customConfigFile)
$customConfig.SelectSingleNode("//appSettings/add[@key='ClientServicesCredentialType']").Value
}
}
function Check-NavContainerName {
Param
(
[string]$containerName = ""
)
if ($containerName -eq "") {
throw "Container name cannot be empty"
}
if ($containerName.Length -gt 15) {
throw "Container name should not exceed 15 characters"
}
$first = $containerName.ToLowerInvariant()[0]
if ($first -lt "a" -or $first -gt "z") {
throw "Container name should start with a letter (a-z)"
}
$containerName.ToLowerInvariant().ToCharArray() | % {
if (($_ -lt "a" -or $_ -gt "z") -and ($_ -lt "0" -or $_ -gt "9") -and ($_ -ne "-")) {
throw "Container name contains invalid characters. Allowed characters are letters (a-z), numbers (0-9) and dashes (-)"
}
}
}