Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $ErrorActionPreference = "Stop"
- $global:SourceFile = Join-path ((Get-ItemProperty hklm:\software\whalecom\e-gap\configuration).InstallPath) "common\conf\UAG.egf" -ErrorAction SilentlyContinue
- $global:BackupDir = "c:\EGFBackups"
- $global:UagActivator = "C:\Scripts\UAGActivate.exe"
- function global:Set-UAGConfig(
- $SourceFile, $BackupDir, $UAGActivatorPath){
- if ($SourceFile){
- $global:SourceFile = $SourceFile
- }
- if ($BackupDir){
- $global:BackupDir = $BackupDir
- }
- if ($UAGActivatorPath){
- $global:UagActivator = $UAGActivatorPath
- }
- }
- function global:Backup-UAGConfig(){
- if (-not [System.IO.Directory]::Exists($global:BackupDir)){
- md $global:BackupDir
- }
- copy $global:SourceFile (Join-path $global:BackupDir ("UAG_" + [datetime]::Now.ToString("yyyyMMdd_HHmmss") + ".egf")) -Force
- }
- function global:Disable-UAGApp($AppName){
- $str = ([System.IO.File]::ReadAllText($SourceFile))
- #check if app exists
- if (-not [regex]::IsMatch($str, ("m_csAppPortalName_[0-9]+=" + $AppName.Replace(".","\.") + "\r\n"))){
- #<< raise error >>
- Write-Error "Ошибка: Приложения с таким именем не существует."
- return $false
- }
- #BackupConf -SourceFile $global:SourceFile -BackupDir $global:BackupDir
- $regex = New-Object system.Text.RegularExpressions.Regex(("m_csAppPortalName_([0-9]+)="+$AppName.Replace(".","\.")+"\r\n"),
- [System.Text.RegularExpressions.RegexOptions]::Multiline)
- $match = $regex.Match($str)
- $Appid = $match.Groups[1].Value
- $str = [regex]::Replace($str, "(m_bEnabled_" + $Appid + ")=[^\r\n]+", "`$1=0")
- $str = [regex]::Replace($str, "[\t]+m_nTotalAuthList_" + $Appid + "=[^\r\n]+\r\n", "")
- $str = [regex]::Replace($str, "[\t]+m_csAppAuthList_" + $Appid + "_[^=]=[^\r\n]+\r\n", "")
- $str = [regex]::Replace($str, "(m_csAppName_(" + $Appid + "))=[^\r\n]+", "`$1=Unused`$2")
- $str = [regex]::Replace($str, "(m_csAppPortalName_(" + $Appid + "))=[^\r\n]+", "`$1=Unused`$2")
- $str = [regex]::Replace($str, "(m_csAppShortDesc_(" + $Appid + "))=[^\r\n]*", "`$1=Unused`$2")
- $str = [regex]::Replace($str, "(m_csAppLongDesc_(" + $Appid + "))=[^\r\n]*", "`$1=Unused`$2")
- [System.IO.File]::WriteAllText($global:SourceFile, $str)
- }
- function global:Enable-UAGApp([int]$ProjectID, [guid]$AppGUID, $AppName, $IpAddr){
- $str = ([System.IO.File]::ReadAllText($global:SourceFile))
- #check if app exists
- if ([regex]::IsMatch($str, ("m_csAppPortalName_[0-9]+=" + $AppName.Replace(".","\.") + "\r\n"))){
- #<< raise error >>
- Write-Error "Ошибка: Приложение с таким именем уже опубликовано."
- return $false
- }
- #BackupConf -SourceFile $global:SourceFile -BackupDir $global:BackupDir
- $regex = New-Object System.Text.RegularExpressions.Regex("m_csAppPortalName_([0-9]+)=Unused[0-9]+\r\n",
- [System.Text.RegularExpressions.RegexOptions]::Multiline)
- $match = $regex.Match($str)
- if ($match.Captures.Count -ne 1){
- #<< raise error >>
- Write-Error "Ошибка: Не найдено свободных слотов для публикации приложения."
- return $false
- }
- $Appid = $match.Groups[1].Value
- $str = [regex]::Replace($str, "(m_bEnabled_" + $Appid + ")=[^\r\n]+", "`$1=1")
- # if ($AppName -notlike ("P" + $ProjectID.ToString() + ".*")){
- # $AppName = "P" + $ProjectID.ToString() + "." + $AppName
- # }
- $str = [regex]::Replace($str, "(m_csAppName_(" + $Appid + "))=[^\r\n]+", "`$1=P" + $ProjectID.ToString() + "." + $AppName)
- $str = [regex]::Replace($str, "(m_csAppLongDesc_(" + $Appid + "))=[^\r\n]*", "`$1=" + $AppGUID.ToString().ToUpper().Replace("-",""))
- $str = [regex]::Replace($str, "(m_csAppPortalName_(" + $Appid + "))=[^\r\n]+", "`$1=" + $AppName)
- $str = [regex]::Replace($str, "(m_csAppShortDesc_(" + $Appid + "))=[^\r\n]*", "`$1=Project" + $ProjectID.ToString() )
- $str = [regex]::Replace($str, "(m_csAppAdvancedSSListValue_(" + $Appid + ")_ID_0)=[^\r\n]+", "`$1=" + $AppName)
- $str = [regex]::Replace($str, "(m_csAppAdvancedSSListValue_(" + $Appid + ")_ID_2)=[^\r\n]+", "`$1=" + $AppName)
- $str = [regex]::Replace($str, "(m_csAppAdvancedSSListValue_(" + $Appid + ")_ID_6)=[^\r\n]+", "`$1=" + [system.Net.IPAddress]::Parse($IpAddr).ToString())
- $HexIPAddress = "0x" + [string]::Format("{0:X2}", [system.Convert]::ToByte($IpAddr.Split(".")[3])) +
- [string]::Format("{0:X2}", [system.Convert]::ToByte($IpAddr.Split(".")[2])) +
- [string]::Format("{0:X2}", [system.Convert]::ToByte($IpAddr.Split(".")[1])) +
- [string]::Format("{0:X2}", [system.Convert]::ToByte($IpAddr.Split(".")[0]))
- $str = [regex]::Replace($str, "(m_csAppAdvancedSSListValue_(" + $Appid + ")_ID_8)=[^\r\n]+", "`$1=" + $HexIPAddress)
- [System.IO.File]::WriteAllText($SourceFile, $str)
- }
- function global:Set-UAGApp($AppName, $NewAppName, [int]$ProjectID, [guid]$AppGUID, $IpAddr){
- $str = ([System.IO.File]::ReadAllText($global:SourceFile))
- #check if app exists
- if (-not [regex]::IsMatch($str, ("m_csAppPortalName_[0-9]+=" + $AppName.Replace(".","\.") + "\r\n"))){
- #<< raise error >>
- Write-Error "Ошибка: Приложения с таким именем не существует."
- return $false
- }
- #BackupConf -SourceFile $global:SourceFile -BackupDir $global:BackupDir
- $regex = New-Object System.Text.RegularExpressions.Regex(("m_csAppPortalName_([0-9]+)="+ $AppName.Replace(".","\.") +"\r\n"),
- [System.Text.RegularExpressions.RegexOptions]::Multiline)
- $match = $regex.Match($str)
- if ($match.Captures.Count -gt 1){
- #<< raise error >>
- Write-Error "Ошибка: Найдено более одного приложения"
- return $false
- }
- $Appid = $match.Groups[1].Value
- if ($NewAppName){
- $str = [regex]::Replace($str, "(m_csAppName_(" + $Appid + "))=[^\r\n]+", "`$1=P" + $ProjectID.ToString() + "." + $AppName)
- $str = [regex]::Replace($str, "(m_csAppPortalName_(" + $Appid + "))=[^\r\n]+", "`$1=" + $AppName)
- $str = [regex]::Replace($str, "(m_csAppAdvancedSSListValue_(" + $Appid + ")_ID_0)=[^\r\n]+", "`$1=" + $AppName)
- $str = [regex]::Replace($str, "(m_csAppAdvancedSSListValue_(" + $Appid + ")_ID_2)=[^\r\n]+", "`$1=" + $AppName)
- }
- if ($AppGUID){
- $str = [regex]::Replace($str, "(m_csAppLongDesc_(" + $Appid + "))=[^\r\n]*", "`$1=" + $AppGUID.ToString().ToUpper().Replace("-",""))
- }
- $str = [regex]::Replace($str, "(m_csAppShortDesc_(" + $Appid + "))=[^\r\n]*", "`$1=Project" + $ProjectID.ToString() )
- if ($IpAddr){
- $str = [regex]::Replace($str, "(m_csAppAdvancedSSListValue_(" + $Appid + ")_ID_6)=[^\r\n]+", "`$1=" + [system.Net.IPAddress]::Parse($IpAddr).ToString())
- $HexIPAddress = "0x" + [string]::Format("{0:X2}", [system.Convert]::ToByte($IpAddr.Split(".")[3])) +
- [string]::Format("{0:X2}", [system.Convert]::ToByte($IpAddr.Split(".")[2])) +
- [string]::Format("{0:X2}", [system.Convert]::ToByte($IpAddr.Split(".")[1])) +
- [string]::Format("{0:X2}", [system.Convert]::ToByte($IpAddr.Split(".")[0]))
- $str = [regex]::Replace($str, "(m_csAppAdvancedSSListValue_(" + $Appid + ")_ID_8)=[^\r\n]+", "`$1=" + $HexIPAddress)
- }
- [System.IO.File]::WriteAllText($global:SourceFile, $str)
- }
- #$UserArray - hashtable
- #m_csAppAuthList_X_ID as key
- #authObj as value
- #authObj = { [string] ID,
- # [string] IsUser,
- # [string] Repository,
- # [string] UserName,
- # [string] Allow
- # }
- function global:Set-UAGAuth([string]$AppName, [hashtable]$UserArray){
- $str = ([System.IO.File]::ReadAllText($SourceFile))
- #check if app exists
- if (-not [regex]::IsMatch($str, ("m_csAppPortalName_[0-9]+=" + $AppName.Replace(".","\.") + "\r\n"))){
- #<< raise error >>
- Write-Error "Ошибка: Приложения с таким именем не существует."
- return $false
- }
- #BackupConf -SourceFile $SourceFile -BackupDir $BackupDir
- #Get Application ID by Name
- $regex = New-Object system.Text.RegularExpressions.Regex(("m_csAppPortalName_([0-9]+)="+$AppName.Replace(".","\.")+"\r\n"), "Multiline")
- $match = $regex.Match($str)
- $Appid = $match.Groups[1].Value
- #Очищаем список AuthList
- while([regex]::IsMatch($str, "m_csAppAuthList_" + $Appid + "_(Allow|ID|IsUser|Repository|UserName)_[0-9]+=[^\r\n]+")){
- $str = [regex]::Replace($str, "[\t]+m_csAppAuthList_" + $Appid + "_(Allow|ID|IsUser|Repository|UserName)_[0-9]+=[^\r\n]+\r\n", "")
- }
- #Удаляем AuthList Count
- if ([regex]::IsMatch($str, "m_nTotalAuthList_" + $AppID + "=[^\r\n]+")){
- $str = [regex]::Replace($str, "[\t]+m_nTotalAuthList_" + $Appid + "=[^\r\n]+\r\n", "")
- }
- #Добавляем AuthList Count
- $str = [regex]::Replace($str, "(([\t]+)m_csAppPortalName_" + $AppID + "=[^\r\n]+\r\n)", "`$1`$2m_nTotalAuthList_"+ $AppID + "=" + $UserArray.Count.ToString() +"`r`n")
- #Добавляем список пользователей
- $i = 0
- foreach($UserAuth in $UserArray.Values){
- $str = [regex]::Replace($str, "(([\t]+)m_nTotalAuthList_"+$AppID+"=[^\r\n]+\r\n)", "`$1`$2m_csAppAuthList_" + $AppID + "_Allow_" + $i + "=" + $UserAuth.Allow + "`r`n")
- $str = [regex]::Replace($str, "(([\t]+)m_nTotalAuthList_"+$AppID+"=[^\r\n]+\r\n)", "`$1`$2m_csAppAuthList_" + $AppID + "_ID_" + $i + "=" + $UserAuth.ID + "`r`n")
- $str = [regex]::Replace($str, "(([\t]+)m_nTotalAuthList_"+$AppID+"=[^\r\n]+\r\n)", "`$1`$2m_csAppAuthList_" + $AppID + "_IsUser_" + $i + "=" + $UserAuth.IsUser + "`r`n")
- $str = [regex]::Replace($str, "(([\t]+)m_nTotalAuthList_"+$AppID+"=[^\r\n]+\r\n)", "`$1`$2m_csAppAuthList_" + $AppID + "_Repository_" + $i + "=" + $UserAuth.Repository + "`r`n")
- $str = [regex]::Replace($str, "(([\t]+)m_nTotalAuthList_"+$AppID+"=[^\r\n]+\r\n)", "`$1`$2m_csAppAuthList_" + $AppID + "_UserName_" + $i + "=" + $UserAuth.UserName + "`r`n")
- $i++
- }
- [System.IO.File]::WriteAllText($SourceFile, $str)
- }
- function global:Get-UAGAuth([string]$AppName){
- [hashtable]$AuthList = @{}
- $str = ([System.IO.File]::ReadAllText($SourceFile))
- #check if app exists
- if (-not [regex]::IsMatch($str, ("m_csAppPortalName_[0-9]+=" + $AppName.Replace(".","\.") + "\r\n"))){
- #<< raise error >>
- Write-Error "Ошибка: Приложения с таким именем не существует."
- return $null
- }
- #Get Application ID by Name
- $regex = New-Object system.Text.RegularExpressions.Regex(("m_csAppPortalName_([0-9]+)=" + $AppName.Replace(".","\.") +"\r\n"), "Multiline")
- $match = $regex.Match($str)
- $Appid = $match.Groups[1].Value
- #Get Auth List length
- $AuthListCount = 0
- $match = [regex]::Match($str, "m_nTotalAuthList_" + $AppID + "=([^\r\n])")
- if ($match.Captures.Count -ne 0){
- $AuthListCount = [system.Convert]::ToInt32($match.Groups[1].Value)
- }
- if ($AuthListCount -eq 0){
- return [hashtable]$AuthList
- }
- for($i = 0; $i -lt $AuthListCount; $i++){
- $authID = [regex]::Match($str, "m_csAppAuthList_" + $Appid + "_ID_" + $i + "=([^\r\n]+)").Groups[1].Value
- $authIsUser = [regex]::Match($str, "m_csAppAuthList_" + $Appid + "_IsUser_" + $i + "=([^\r\n]+)").Groups[1].Value
- $authRepository = [regex]::Match($str, "m_csAppAuthList_" + $Appid + "_Repository_" + $i + "=([^\r\n]+)").Groups[1].Value
- $authUserName = [regex]::Match($str, "m_csAppAuthList_" + $Appid + "_UserName_" + $i + "=([^\r\n]+)").Groups[1].Value
- $authAllow = [regex]::Match($str, "m_csAppAuthList_" + $Appid + "_Allow_" + $i + "=([^\r\n]+)").Groups[1].Value
- $objAuth = New-Object System.Object
- $objAuth | Add-Member -Name "ID" -MemberType NoteProperty -Value $authID
- $objAuth | Add-Member -Name "IsUser" -MemberType NoteProperty -Value $authIsUser
- $objAuth | Add-Member -Name "Repository" -MemberType NoteProperty -Value $authRepository
- $objAuth | Add-Member -Name "UserName" -MemberType NoteProperty -Value $authUserName
- $objAuth | Add-Member -Name "Allow" -MemberType NoteProperty -Value $authAllow
- #$objAuth.ID | Out-Host
- $AuthList[$objAuth.ID] = $objAuth
- }
- return [hashtable]$AuthList
- }
- function global:Get-UAGAppList([int]$ProjectID){
- [object[]]$appList = @()
- $str = ([System.IO.File]::ReadAllText($SourceFile))
- $regex = New-Object System.Text.RegularExpressions.Regex("m_csAppShortDesc_(\d+)=Project$ProjectID\r\n",
- [System.Text.RegularExpressions.RegexOptions]::Multiline)
- $matches = $regex.Matches($str)
- foreach($match in $matches){
- $obj = New-Object System.Object
- $obj | Add-Member -Name "AppPortalName" -MemberType NoteProperty -Value `
- ([regex]::Match($str, "m_csAppPortalName_" + $match.Groups[1].Value + "=([^\r\n]+)\r\n").Groups[1].Value)
- $obj | Add-Member -Name "AppName" -MemberType NoteProperty -Value `
- ([regex]::Match($str, "m_csAppName_" + $match.Groups[1].Value + "=([^\r\n]+)\r\n").Groups[1].Value)
- $obj | Add-Member -Name "VMID" -MemberType NoteProperty -Value `
- ([regex]::Match($str, "m_csAppLongDesc_" + $match.Groups[1].Value + "=([^\r\n]+)\r\n").Groups[1].Value)
- $obj | Add-Member -Name "Project" -MemberType NoteProperty -Value `
- ([regex]::Match($str, "m_csAppShortDesc_" + $match.Groups[1].Value + "=([^\r\n]+)\r\n").Groups[1].Value)
- $obj | Add-Member -Name "IPAddress" -MemberType NoteProperty -Value `
- ([regex]::Match($str, "m_csAppAdvancedSSListValue_" + $match.Groups[1].Value + "_ID_6=([^\r\n]+)\r\n").Groups[1].Value)
- $appList += $obj
- }
- return $appList
- }
- function global:Get-UAGApp([guid]$VMID, [string]$AppName){
- if ($VMID -and $AppName){
- Write-Error "Необходимо указать только один из параметров: VMID или AppName"
- return
- }
- if (-not $VMID -and -not $AppName){
- Write-Error "Необходимо указать хотя бы один из параметров: VMID или AppName"
- return
- }
- $str = ([System.IO.File]::ReadAllText($SourceFile))
- if ($AppName){
- $regex = New-Object System.Text.RegularExpressions.Regex(("m_csAppPortalName_(\d+)=" + $AppName.Replace(".","\.") + "\r\n"),
- [System.Text.RegularExpressions.RegexOptions]::Multiline)
- }
- else {
- $VMIDStr = $VMID.ToString().ToUpper().Replace("-","")
- $regex = New-Object System.Text.RegularExpressions.Regex("m_csAppLongDesc_(\d+)=$VMIDStr\r\n",
- [System.Text.RegularExpressions.RegexOptions]::Multiline)
- }
- $matches = $regex.Matches($str)
- [object[]]$appList = @()
- foreach($match in $matches){
- $obj = New-Object System.Object
- $obj | Add-Member -Name "AppPortalName" -MemberType NoteProperty -Value `
- ([regex]::Match($str, "m_csAppPortalName_" + $match.Groups[1].Value + "=([^\r\n]+)\r\n").Groups[1].Value)
- $obj | Add-Member -Name "AppName" -MemberType NoteProperty -Value `
- ([regex]::Match($str, "m_csAppName_" + $match.Groups[1].Value + "=([^\r\n]+)\r\n").Groups[1].Value)
- $obj | Add-Member -Name "VMID" -MemberType NoteProperty -Value `
- ([regex]::Match($str, "m_csAppLongDesc_" + $match.Groups[1].Value + "=([^\r\n]+)\r\n").Groups[1].Value)
- $obj | Add-Member -Name "Project" -MemberType NoteProperty -Value `
- ([regex]::Match($str, "m_csAppShortDesc_" + $match.Groups[1].Value + "=([^\r\n]+)\r\n").Groups[1].Value)
- $obj | Add-Member -Name "IPAddress" -MemberType NoteProperty -Value `
- ([regex]::Match($str, "m_csAppAdvancedSSListValue_" + $match.Groups[1].Value + "_ID_6=([^\r\n]+)\r\n").Groups[1].Value)
- $appList += $obj
- }
- return $appList
- }
- function global:Activate-UAGConfig(){
- $procObjs = Get-Process | where {$_.Name -eq "Configuration" }
- if ($procObjs){
- Write-Error "Ошибка. Обнаружена запущенная консоль UAG Management."
- return $false
- }
- $procObjs = Get-Process | where {$_.Name -eq "ConfigMgrUtil" }
- if ($procObjs){
- Write-Error "Ошибка. Процесс ConfigMgrUtil.exe уже запущен."
- return $false
- }
- $procObj = Start-Process $global:UagActivator -Wait -PassThru
- $procObj.Refresh()
- if ($procObj.ExitCode -ne 0){
- Write-Error "Ошибка. Процесс UAGActivate.exe завершился с кодом $($procObj.ExitCode)."
- return $false
- }
- $procObjs = Get-Process | where {$_.Name -eq "ConfigMgrUtil" }
- if (-not $procObjs){
- Write-Error "Ошибка. Не удается найти процесс ConfigMgrUtil.exe"
- return $false
- }
- elseif ($procObjs.Count -gt 1){
- Write-Error "Ошибка. Запущено более одного процесса ConfigMgrUtil.exe"
- return $false
- }
- else {
- $procObjs | Wait-Process -Timeout (25*60)
- $procObjs.Refresh()
- if ($procObjs.ExitCode -ne 0){
- Write-Error "Ошибка. Процесс ConfigMgrUtil.exe завершился с кодом $($procObjs.ExitCode)."
- return $false
- }
- else {
- return $true
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement