575 lines
23 KiB
PowerShell
575 lines
23 KiB
PowerShell
|
# todo: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
|
|||
|
Add-Type -AssemblyName "PresentationFramework"
|
|||
|
Add-Type -AssemblyName "System.Windows.Forms"
|
|||
|
Add-Type -AssemblyName "System.Drawing"
|
|||
|
|
|||
|
<#
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CreoLaunching.LicenseUserRestrict($user).
|
|||
|
# <20><><EFBFBD>:
|
|||
|
#
|
|||
|
# $tableLicenseName - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
# $tableLicenseBase - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
# $tableLicenseServ - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
# $tableLicenseLink - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
#
|
|||
|
# <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CreoLaunching.LicenseUserRestrict($user)
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
#>
|
|||
|
$Global:tableLicenseName = New-Object HashtableMods -ArgumentList '.\CreoLauncher.txt', 'tableLicenseName'
|
|||
|
$Global:tableLicenseLink = New-Object HashtableMods -ArgumentList '.\CreoLauncher.txt', 'tableLicenseLink'
|
|||
|
$Global:tableLicenseBase = New-Object HashtableMods -ArgumentList '.\CreoLauncher.txt', 'tableLicenseBase'
|
|||
|
$Global:tableLicenseServ = New-Object HashtableMods -ArgumentList '.\CreoLauncher.txt', 'tableLicenseServ'
|
|||
|
<#
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
#>
|
|||
|
$creoPackageSpecs = New-Object CreoParamSpec @{
|
|||
|
'CreoDir' = "$env:ProgramFiles\PTC\Creo*\Parametric\bin"
|
|||
|
'CreoVer' = "0.0.0.0"
|
|||
|
'CreoExe' = "parametric.exe"
|
|||
|
'CreoPsf' = "\Parametric\bin\parametric.psf"
|
|||
|
'CreoLnk' = "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\PTC"
|
|||
|
'CreoIco' = "\Parametric\install\nt\creologo.ico"
|
|||
|
'LicExe' = "\Common Files\x86e_win64\obj\plpf_status.exe"
|
|||
|
'LicRes' = "\Common Files\text\licensing\license.res"
|
|||
|
'RegExpCreoVer' = "\d.\d.\d.\d"
|
|||
|
'RegExpLicense' = "^\s+(?<License>\S+)\s+(?<InUse>\d+)\s+(?<Free>\d+)"
|
|||
|
'EnvLicense' = "PTC_D_LICENSE_FILE"
|
|||
|
'EnvLicsRes' = "PRO_LICENSE_RES"
|
|||
|
'EnvFeature' = "CREOPMA_FEATURE_NAME"
|
|||
|
'EnvDescPsf' = "DESC"
|
|||
|
}
|
|||
|
$tableMessageENUS = New-Object HashtableMods @{
|
|||
|
'MsgSelectInvite' = 'Select the required modules'
|
|||
|
'MsgSelectAvaile' = 'Available'
|
|||
|
'MsgWinHeadError' = 'ERROR!'
|
|||
|
'MsgErrCreoParam' = 'Not found Creo Parametric or its components on this computer'
|
|||
|
'MsgRunCreoParam' = 'Start Creo Parametric'
|
|||
|
'MsgRunPTCStatus' = 'Show license status'
|
|||
|
}
|
|||
|
$tableMessageRURU = New-Object HashtableMods @{
|
|||
|
'MsgSelectInvite' = '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
|||
|
'MsgSelectAvaile' = '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
|||
|
'MsgWinHeadError' = '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!'
|
|||
|
'MsgErrCreoParam' = '<27><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Creo Parametric <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
|||
|
'MsgRunCreoParam' = '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Creo Parametric'
|
|||
|
'MsgRunPTCStatus' = '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
class ExecuteObject {
|
|||
|
|
|||
|
[System.Object] hidden $info
|
|||
|
[System.Object] hidden $proc
|
|||
|
|
|||
|
|
|||
|
ExecuteObject([System.String]$execPath, [System.String]$execArgs){
|
|||
|
$this.info = New-Object System.Diagnostics.ProcessStartInfo
|
|||
|
$this.info.FileName = $execPath
|
|||
|
$this.info.Arguments = $execArgs
|
|||
|
$this.info.RedirectStandardError = $true
|
|||
|
$this.info.RedirectStandardOutput = $true
|
|||
|
$this.info.UseShellExecute = $false
|
|||
|
$this.info.WindowStyle = 'Hidden'
|
|||
|
$this.info.CreateNoWindow = $true
|
|||
|
}
|
|||
|
|
|||
|
[PSCustomObject] Start(){
|
|||
|
$this.proc = New-Object System.Diagnostics.Process
|
|||
|
Try{
|
|||
|
$this.proc.StartInfo = $this.info
|
|||
|
$this.proc.Start() | Out-Null
|
|||
|
Return [PSCustomObject]@{
|
|||
|
stdout = $this.proc.StandardOutput.ReadToEnd()
|
|||
|
stderr = $this.proc.StandardError.ReadToEnd()
|
|||
|
ExitCode = $this.proc.ExitCode
|
|||
|
}
|
|||
|
}
|
|||
|
Catch {
|
|||
|
Exit
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
class HashtableMods {
|
|||
|
|
|||
|
[System.Collections.Hashtable] $hashtable
|
|||
|
|
|||
|
|
|||
|
HashtableMods ([System.Collections.Hashtable]$table){
|
|||
|
$this.hashtable = $table
|
|||
|
}
|
|||
|
|
|||
|
HashtableMods ([System.String]$path, [System.String]$block){
|
|||
|
$table = @{}
|
|||
|
$save = $false
|
|||
|
Foreach ($line in $(Get-Content -Path $path)){
|
|||
|
if (($line -match "\[") -and ($line -match "$block")){
|
|||
|
$save = $true
|
|||
|
}
|
|||
|
elseif ($line -match "\["){
|
|||
|
$save = $false
|
|||
|
}
|
|||
|
elseif ($save -and ($line -notmatch "^\s*#") -and ($line -match "=")){
|
|||
|
$key = $line.Split("=")[0].Trim()
|
|||
|
$val = $($line.Split(";")[0] -replace "$($key)\s*=\s*","").Trim()
|
|||
|
try {
|
|||
|
$table.Add($key, $val)
|
|||
|
}
|
|||
|
catch {
|
|||
|
$table.Remove($key)
|
|||
|
$table.Add($key, $val)
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
$this.hashtable = $table
|
|||
|
}
|
|||
|
|
|||
|
[System.String] ToString(){
|
|||
|
Return $this.ToString($false, $null)
|
|||
|
}
|
|||
|
|
|||
|
[System.String] ToString([System.Boolean]$fromKey){
|
|||
|
Return $this.ToString($fromKey, $null)
|
|||
|
}
|
|||
|
|
|||
|
[System.String] ToString([System.Boolean]$fromKey, [System.String]$separator){
|
|||
|
$string = ""
|
|||
|
Foreach ($key in $this.hashtable.Keys){
|
|||
|
if ($FromKey){
|
|||
|
$string += $key.ToString()
|
|||
|
}
|
|||
|
else {
|
|||
|
$string += $this.hashtable[$key].ToString()
|
|||
|
}
|
|||
|
$string += $separator
|
|||
|
}
|
|||
|
Return $string.TrimEnd($separator)
|
|||
|
}
|
|||
|
|
|||
|
[HashtableMods] Filtrate([System.Boolean]$fromKey, [System.String]$target){
|
|||
|
$filtrated = New-Object HashtableMods @{}
|
|||
|
if ($FromKey){
|
|||
|
Foreach ($element in $($this.hashtable.GetEnumerator() | Where-Object {$_.Key -eq $target})){
|
|||
|
$filtrated.hashtable.Add($element.Name,$this.hashtable[$element.Name])
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
Foreach ($element in $($this.hashtable.GetEnumerator() | Where-Object {$_.Value -eq $target})){
|
|||
|
$filtrated.hashtable.Add($element.Name,$this.hashtable[$element.Name])
|
|||
|
}
|
|||
|
}
|
|||
|
Return $filtrated
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
class UserInterface {
|
|||
|
|
|||
|
[System.Object] hidden $form
|
|||
|
[System.Object] hidden $wordsFont
|
|||
|
[System.Object] hidden $titleFont
|
|||
|
[System.Int32] hidden $wordsSize = 10
|
|||
|
[System.Int32] hidden $titleSize = $this.wordsSize * 1.5
|
|||
|
[System.Int32] hidden $linesStep = $this.titleSize * 1.5
|
|||
|
[System.Int32] hidden $linesNext = 0
|
|||
|
[System.Int32] hidden $colmnStep = 0
|
|||
|
[System.Int32] hidden $colmnNext = $this.titleSize * 1.5
|
|||
|
|
|||
|
|
|||
|
UserInterface ([System.String]$header){
|
|||
|
$this.wordsFont = New-Object System.Drawing.Font("Arial", $this.wordsSize <#, [System.Drawing.FontStyle]::Regular#>)
|
|||
|
$this.titleFont = New-Object System.Drawing.Font("Arial", $this.titleSize <#, [System.Drawing.FontStyle]::Bold#>)
|
|||
|
$this.form = New-Object System.Windows.Forms.Form
|
|||
|
$this.form.AutoScroll = $true
|
|||
|
$this.form.AutoSize = $true
|
|||
|
$this.form.Text = $header
|
|||
|
}
|
|||
|
|
|||
|
[System.Void] AddIcon ([System.String]$path){
|
|||
|
$this.form.Icon = New-Object System.Drawing.Icon $path
|
|||
|
}
|
|||
|
|
|||
|
[System.Void] AddSpaceVertical(){
|
|||
|
$this.linesNext += $this.linesStep * 1.5
|
|||
|
}
|
|||
|
|
|||
|
[PSCustomObject] AddTitle([System.String]$text){
|
|||
|
$title = New-Object System.Windows.Forms.Label
|
|||
|
$title.Location = New-Object System.Drawing.Size($this.colmnNext, $this.linesNext)
|
|||
|
$title.Font = $this.titleFont
|
|||
|
$title.Text = $text
|
|||
|
$title.AutoSize = $true
|
|||
|
$this.form.Controls.Add($title)
|
|||
|
Return [PSCustomObject]@{
|
|||
|
Width = $title.Width
|
|||
|
Height = $title.Height
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[PSCustomObject] AddText([System.String]$text){
|
|||
|
$txt = New-Object System.Windows.Forms.Label
|
|||
|
$txt.Location = New-Object System.Drawing.Size($this.colmnNext, $this.linesNext)
|
|||
|
$txt.Font = $this.wordsFont
|
|||
|
$txt.Text = $text
|
|||
|
$txt.AutoSize = $true
|
|||
|
$this.form.Controls.Add($txt)
|
|||
|
Return [PSCustomObject]@{
|
|||
|
Width = $txt.Width
|
|||
|
Height = $txt.Height
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[PSCustomObject] AddLink([System.String]$text, $function){
|
|||
|
$lnk = New-Object System.Windows.Forms.LinkLabel
|
|||
|
$lnk.Location = New-Object System.Drawing.Size($this.colmnNext, $this.linesNext)
|
|||
|
$lnk.add_Click($function)
|
|||
|
$lnk.Font = $this.wordsFont
|
|||
|
$lnk.LinkColor = "BLUE"
|
|||
|
$lnk.ActiveLinkColor = "BLACK"
|
|||
|
$lnk.Text = $text
|
|||
|
$lnk.AutoSize = $true
|
|||
|
$this.form.Controls.Add($lnk)
|
|||
|
Return [PSCustomObject]@{
|
|||
|
Width = $lnk.Width
|
|||
|
Height = $lnk.Height
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[PSCustomObject] AddCheckbox([System.String]$name, [System.String]$text, $function){
|
|||
|
$checkbox = New-Object System.Windows.Forms.CheckBox
|
|||
|
$checkbox.Location = New-Object System.Drawing.Size($this.colmnNext, $this.linesNext)
|
|||
|
$checkbox.Add_Click($function)
|
|||
|
$checkbox.Font = $this.wordsFont
|
|||
|
$checkbox.Text = $text
|
|||
|
$checkbox.Name = $name
|
|||
|
$checkbox.AutoSize = $true
|
|||
|
$this.form.Controls.Add($checkbox)
|
|||
|
Return [PSCustomObject]@{
|
|||
|
Width = $checkbox.Width
|
|||
|
Height = $checkbox.Height
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[PSCustomObject] AddButton([System.String]$text, $function){
|
|||
|
$button = New-Object System.Windows.Forms.Button
|
|||
|
$button.Location = New-Object System.Drawing.Size($this.colmnNext, $this.linesNext)
|
|||
|
$button.Add_Click($function)
|
|||
|
$button.Font = $this.wordsFont
|
|||
|
$button.Text = $text
|
|||
|
$button.AutoSize = $true
|
|||
|
$this.form.Controls.Add($button)
|
|||
|
Return [PSCustomObject]@{
|
|||
|
Width = $button.Width
|
|||
|
Height = $button.Height
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[System.Void] Show(){
|
|||
|
$this.form.ShowDialog()
|
|||
|
}
|
|||
|
|
|||
|
[HashtableMods] GetStateCheckbox(){
|
|||
|
$state = New-Object HashtableMods @{}
|
|||
|
Foreach ($checkbox in $this.form.Controls | Where-Object {$_.GetType() -like 'System.Windows.Forms.CheckBox'}){
|
|||
|
$state.hashtable.Add($checkbox.Name, $($checkbox.Checked))
|
|||
|
}
|
|||
|
Return $state
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
class CreoParamSpec {
|
|||
|
|
|||
|
[System.String] $CreoDir
|
|||
|
[System.String] $CreoVer
|
|||
|
[System.String] $CreoExe
|
|||
|
[System.String] $CreoPsf
|
|||
|
[System.String] $CreoLnk
|
|||
|
[System.String] $CreoIco
|
|||
|
[System.String] $LicExe
|
|||
|
[System.String] $LicRes
|
|||
|
[System.String] $RegExpCreoVer
|
|||
|
[System.String] $RegExpLicense
|
|||
|
[System.String] $EnvLicense
|
|||
|
[System.String] $EnvLicsRes
|
|||
|
[System.String] $EnvFeature
|
|||
|
[System.String] $EnvDescPsf
|
|||
|
|
|||
|
|
|||
|
CreoParamSpec ([HashtableMods]$creoSpec){
|
|||
|
Try{
|
|||
|
$this.SpecToProperty($creoSpec.hashtable)
|
|||
|
$this.AdjustProperty()
|
|||
|
}
|
|||
|
Catch{
|
|||
|
$this.CreoDir = $null
|
|||
|
$this.CreoVer = $null
|
|||
|
$this.CreoExe = $null
|
|||
|
$this.CreoPsf = $null
|
|||
|
$this.CreoLnk = $null
|
|||
|
$this.CreoIco = $null
|
|||
|
$this.LicExe = $null
|
|||
|
$this.LicRes = $null
|
|||
|
$this.RegExpCreoVer = $null
|
|||
|
$this.RegExpLicense = $null
|
|||
|
$this.EnvLicense = $null
|
|||
|
$this.EnvFeature = $null
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[System.Void] hidden SpecToProperty([System.Collections.Hashtable]$table){
|
|||
|
$properties = $this | Get-Member -MemberType Properties -Force | Where-Object {$_.Name -notcontains 'pstypenames'}
|
|||
|
Foreach ($property in $properties){
|
|||
|
if (!$table.ContainsKey($property.Name)){
|
|||
|
Write-Host 'SPEC'
|
|||
|
$this.RaiseException()
|
|||
|
}
|
|||
|
else{
|
|||
|
$this.$($property.Name) = $table[$property.Name]
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[System.Void] hidden AdjustProperty(){
|
|||
|
if (!(Test-Path -Path $this.CreoDir -ErrorAction SilentlyContinue)){
|
|||
|
$this.RaiseException("Not found CREO DIRECTORY")
|
|||
|
}
|
|||
|
else{
|
|||
|
$found = Get-ChildItem -Path $this.CreoDir -Filter $this.CreoExe -Recurse
|
|||
|
Foreach ($result in $found){
|
|||
|
if (($result.FullName.ToString() -match $this.RegExpCreoVer) -and ($matches[0] -gt $this.CreoVer)){
|
|||
|
$this.CreoVer = $matches[0]
|
|||
|
$this.CreoExe = $result.FullName
|
|||
|
$this.CreoDir = Split-Path -Path $result.FullName | Split-Path -Parent | Split-Path -Parent
|
|||
|
}
|
|||
|
}
|
|||
|
$this.CreoPsf = $this.CreoDir + $this.CreoPsf
|
|||
|
if (!(Test-Path -Path $this.CreoPsf -ErrorAction SilentlyContinue)){
|
|||
|
$this.RaiseException("Not found CREO START FILE")
|
|||
|
}
|
|||
|
$this.LicExe = $this.CreoDir + $this.LicExe
|
|||
|
if (!(Test-Path -Path $this.LicExe -ErrorAction SilentlyContinue)){
|
|||
|
$this.RaiseException("Not found LICENSE STATUS EXE")
|
|||
|
}
|
|||
|
$this.LicRes = $this.CreoDir + $this.LicRes
|
|||
|
if (!(Test-Path -Path $this.LicRes -ErrorAction SilentlyContinue)){
|
|||
|
$this.RaiseException("Not found LICENSE RESOURCES FILE")
|
|||
|
}
|
|||
|
$this.CreoIco = $this.CreoDir + $this.CreoIco
|
|||
|
if (!(Test-Path -Path $this.CreoIco -ErrorAction SilentlyContinue)){
|
|||
|
$this.RaiseException("Not found CREO ICON")
|
|||
|
}
|
|||
|
$WshShell = $(New-Object -comObject WScript.Shell)
|
|||
|
$this.CreoLnk = $WshShell.CreateShortcut($this.CreoLnk + "\Creo Parametric $($this.CreoVer).lnk").WorkingDirectory
|
|||
|
if (!(Test-Path -Path $this.CreoLnk -ErrorAction SilentlyContinue)){
|
|||
|
$this.RaiseException("Not found CREO LINK WITH WORKDIR")
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[System.Void] hidden RaiseException($message){
|
|||
|
throw $message
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
class CreoLaunching : UserInterface {
|
|||
|
|
|||
|
[System.String] hidden $user
|
|||
|
[CreoParamSpec] hidden $creo
|
|||
|
[HashtableMods] hidden $mesg
|
|||
|
[HashtableMods[]] hidden $licenseRestricts
|
|||
|
[HashtableMods] hidden $licenseAvailable
|
|||
|
|
|||
|
CreoLaunching([CreoParamSpec]$creoSpec, [System.String]$userName, [HashtableMods]$locale) : base("Creo $($creoSpec.CreoVer) Launcher"){
|
|||
|
$this.user = $username
|
|||
|
$this.creo = $creoSpec
|
|||
|
$this.mesg = $locale
|
|||
|
|
|||
|
$this.AddIcon($this.creo.CreoIco)
|
|||
|
$chboxPosX = $this.colmnNext
|
|||
|
$buttnPosX = $this.colmnNext
|
|||
|
$buttnPosY = $this.linesNext
|
|||
|
$element = $this.AddTitle($($this.mesg.hashtable['MsgSelectInvite']))
|
|||
|
$this.linesNext += $this.linesStep * 2
|
|||
|
if (($sizeX = $element.Width + $this.colmnNext) -gt $this.colmnStep){
|
|||
|
$this.colmnStep = $sizeX
|
|||
|
}
|
|||
|
$servrPosY = $this.linesNext
|
|||
|
$this.colmnStep = $chboxPosX
|
|||
|
$this.licenseRestricts = $this.LicenseUserRestrict($this.user)
|
|||
|
$this.licenseAvailable = $this.LicenseServerStatus($this.licenseRestricts[0], $this.licenseRestricts[1], $this.licenseRestricts[2])
|
|||
|
$licenseServ = $this.licenseRestricts[2].hashtable
|
|||
|
$licenseName = $this.licenseRestricts[0].hashtable
|
|||
|
|
|||
|
Foreach ($servKey in $licenseServ.Keys){
|
|||
|
$this.colmnNext = $this.colmnStep
|
|||
|
$this.linesNext = $servrPosY
|
|||
|
$element = $this.AddText($servKey)
|
|||
|
$this.linesNext += $element.Height
|
|||
|
if (($sizeX = $element.Width + $this.colmnNext) -gt $this.colmnStep){
|
|||
|
$this.colmnStep = $sizeX
|
|||
|
}
|
|||
|
$chboxPosY = $this.linesNext
|
|||
|
$linksPosX = $this.colmnNext
|
|||
|
|
|||
|
Foreach($licKey in $($this.licenseAvailable.hashtable.Keys | Where-Object {$_ -match $servKey})){
|
|||
|
$licName = $licKey.Split(':')[1]
|
|||
|
if ($licenseName.ContainsKey($licName)){
|
|||
|
$licName = $licenseName[$licName]
|
|||
|
}
|
|||
|
$checkboxText = "$($this.mesg.hashtable['MsgSelectAvaile']) $($this.licenseAvailable.hashtable[$licKey]):"
|
|||
|
$element = $this.AddCheckbox($licKey, $checkboxText, {$launcher.ExamCheckboxesState($this, $_)})
|
|||
|
$this.linesNext += $this.linesStep * 1.5
|
|||
|
if (($sizeX = $element.Width + $this.colmnNext) -gt $this.colmnStep){
|
|||
|
$this.colmnStep = $sizeX
|
|||
|
}
|
|||
|
if (($sizeX = $element.Width + $this.colmnNext) -gt $linksPosX){
|
|||
|
$linksPosX = $sizeX
|
|||
|
}
|
|||
|
}
|
|||
|
$this.colmnNext = $linksPosX
|
|||
|
$this.linesNext = $chboxPosY
|
|||
|
|
|||
|
Foreach($licKey in $($this.licenseAvailable.hashtable.Keys | Where-Object {$_ -match $servKey})){
|
|||
|
$licName = $licKey.Split(':')[1]
|
|||
|
if ($licenseName.ContainsKey($licName)){
|
|||
|
$licName = $licenseName[$licName]
|
|||
|
}
|
|||
|
if ($this.licenseRestricts[3].hashtable.ContainsKey($licName)){
|
|||
|
$element = $this.AddLink($licName, {$launcher.OpenLinkExternalApp($this)})
|
|||
|
}
|
|||
|
else {
|
|||
|
$element = $this.AddText($licName)
|
|||
|
}
|
|||
|
$this.linesNext += $this.linesStep * 1.5
|
|||
|
if (($sizeX = $element.Width + $this.colmnNext) -gt $this.colmnStep){
|
|||
|
$this.colmnStep = $sizeX
|
|||
|
}
|
|||
|
}
|
|||
|
if ($this.linesNext -gt $buttnPosY){
|
|||
|
$buttnPosY = $this.linesNext
|
|||
|
}
|
|||
|
}
|
|||
|
$this.colmnNext = $buttnPosX
|
|||
|
$this.linesNext = $buttnPosY
|
|||
|
$element = $this.AddButton($($this.mesg.hashtable['MsgRunCreoParam']), {$launcher.StartCreoParametric()})
|
|||
|
$this.linesNext += $this.linesStep * 1.5
|
|||
|
if (($sizeX = $element.Width + $this.colmnNext) -gt $this.colmnStep){
|
|||
|
$this.colmnStep = $sizeX
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[HashtableMods[]] hidden LicenseUserRestrict([System.String]$user){
|
|||
|
<#
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
# <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HashtableMods.
|
|||
|
# <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
|||
|
# [0] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>): <20><><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
# [1] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>): <20><><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
# [2] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>): <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
# [3] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>): <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
#>
|
|||
|
[HashtableMods[]] $restrict = $Global:tableLicenseName, $Global:tableLicenseBase, $Global:tableLicenseServ, $Global:tableLicenseLink
|
|||
|
Return $restrict
|
|||
|
}
|
|||
|
|
|||
|
[HashtableMods] hidden LicenseServerStatus([HashtableMods]$licenseName, [HashtableMods]$licenseBase, [HashtableMods]$licenseServ){
|
|||
|
$licAvailable = New-Object HashtableMods @{}
|
|||
|
$exeArguments = '-a'
|
|||
|
if (($licenseBase) -and ($licenseName)){
|
|||
|
$exeArguments = '-f ' + $licenseBase.ToString($true, ' ') + ' ' + $licenseName.ToString($true, ' ')
|
|||
|
}
|
|||
|
Foreach ($servKey in $licenseServ.hashtable.Keys){
|
|||
|
Remove-Item -Path Env:$($this.creo.EnvLicsRes) -ErrorAction SilentlyContinue
|
|||
|
Set-Item -Path Env:$($this.creo.EnvLicense) -Value $licenseServ.hashtable[$servKey]
|
|||
|
$response = $(New-Object ExecuteObject -ArgumentList $this.creo.LicExe, $exeArguments).Start()
|
|||
|
|
|||
|
Foreach ($line in $response.stdout.Split(@("`r`n", "`r", "`n"), [StringSplitOptions]::None)){
|
|||
|
if (($line -match $this.creo.RegExpLicense) -and ($line -notmatch "\(\S+\)")){
|
|||
|
$licKey = "$($servKey):$($matches['License'].Replace('*',''))"
|
|||
|
$licVal = $matches['Free']
|
|||
|
if (!$licAvailable.hashtable.ContainsKey($licKey)){
|
|||
|
if ($licVal -gt 0){
|
|||
|
$licAvailable.hashtable.Add($LicKey, $licVal)
|
|||
|
}
|
|||
|
}
|
|||
|
else {
|
|||
|
$licAvailable.hashtable[$licKey] = [System.String]([System.Int32]$licAvailable.hashtable[$licKey] + [System.Int32]$licVal)
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
Return $licAvailable
|
|||
|
}
|
|||
|
|
|||
|
[System.Void] hidden ExamCheckboxesState($element, $event){
|
|||
|
$servKey = $element.Name.Split(':')[0]
|
|||
|
$licBase = $this.licenseRestricts[1].ToString($true, '|')
|
|||
|
Foreach ($checkbox in $this.form.Controls | Where-Object {$_.GetType() -match 'System.Windows.Forms.CheckBox'}){
|
|||
|
if ($checkbox.Name -notmatch $servKey){
|
|||
|
$checkbox.Checked = $false
|
|||
|
}
|
|||
|
elseif ($checkbox.Name -match $servKey -and $checkbox.Name.Split(':')[1] -match "$licBase"){
|
|||
|
$checkbox.Checked = $true
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
[System.String[]] hidden GeneratingStartFile(){
|
|||
|
$selectedServer = ""
|
|||
|
$selectedBaseLic = ""
|
|||
|
$selectedFeature = ""
|
|||
|
$checkboxState = $this.GetStateCheckbox().Filtrate($false, 'True')
|
|||
|
if ($checkboxState.hashtable.Count -gt 0){
|
|||
|
$foreseenBaseLic = $this.licenseRestricts[1].ToString($true, '|')
|
|||
|
Foreach ($key in $checkboxState.hashtable.Keys){
|
|||
|
$selectedServer = $this.licenseRestricts[2].hashtable[$key.Split(':')[0]]
|
|||
|
$checkedFeature = $key.Split(':')[1]
|
|||
|
if ($checkedFeature -match $foreseenBaseLic){
|
|||
|
$selectedBaseLic += $checkedFeature + ' '
|
|||
|
}
|
|||
|
else {
|
|||
|
$selectedFeature += $checkedFeature + ' '
|
|||
|
}
|
|||
|
}
|
|||
|
$startFileData = Get-Content -Path $this.creo.CreoPsf | Select-String -NotMatch $this.creo.EnvFeature, $this.creo.EnvLicense, $this.creo.EnvDescPsf
|
|||
|
$startFileData += "DESC=Creo Parametric ($($this.user))"
|
|||
|
$startFileData += "ENV=$($this.creo.EnvLicense)-=$($selectedServer)"
|
|||
|
$startFileData += "ENV=$($this.creo.EnvFeature)=$($selectedBaseLic)($($selectedFeature.Trim()))"
|
|||
|
Return $startFileData
|
|||
|
}
|
|||
|
Return Get-Content -Path $this.creo.CreoPsf
|
|||
|
}
|
|||
|
|
|||
|
[System.Void] hidden StartCreoParametric(){
|
|||
|
$startFileBack = Get-Content -Path $this.creo.CreoPsf
|
|||
|
$startFileData = $this.GeneratingStartFile()
|
|||
|
Set-Content -Path $this.creo.CreoPsf -Value $startFileData -Force
|
|||
|
Start-Process -FilePath $this.creo.CreoExe -WorkingDirectory $this.creo.CreoLnk
|
|||
|
$this.form.Close()
|
|||
|
Sleep 60
|
|||
|
Set-Content -Path $this.creo.CreoPsf -Value $startFileBack -Force
|
|||
|
}
|
|||
|
|
|||
|
[System.Void] hidden OpenLinkExternalApp($element){
|
|||
|
[System.Diagnostics.Process]::Start($this.licenseRestricts[3].hashtable[$element.Text])
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
$locale = $tableMessageENUS
|
|||
|
if ((Get-Culture).Name -eq 'ru-RU'){
|
|||
|
$locale = $tableMessageRURU
|
|||
|
}
|
|||
|
if ($creoPackageSpecs.CreoExe -ne ''){
|
|||
|
$launcher = New-Object CreoLaunching -ArgumentList $creoPackageSpecs, "$env:USERNAME@$env:USERDNSDOMAIN", $locale
|
|||
|
$launcher.Show()
|
|||
|
}
|
|||
|
else {
|
|||
|
[System.Windows.MessageBox]::Show($locale.hashtable['MsgErrCreoParam'], $locale.hashtable['MsgWinHeadError'],'OK','Error')
|
|||
|
}
|