Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $SYSTEM_SCRIPT_MODULES_CORE_MODULES_DIR_NAME = "Modules\Core\"
- $SYSTEM_FILE_EXTENSIONS_PSD1 = "psd1"
- $SYSTEM_FILE_EXTENSIONS_MASK_PSD1 = "*.$SYSTEM_FILE_EXTENSIONS_PSD1"
- $SYSTEM_SCRIPT_MODULES_CORE_SYSTEM_MODULE_NAME = "CM_System.psd1"
- #MV2
- <#
- .SYNOPSIS
- Загружает модуль ядра ADT по его имени.
- .Description
- Позволяет загрузить модуль ядра ADT по его имени с учетом всех зависимоестей: если загружаемому модулю требуются
- другие модули, они тоже будут рекурсивно загружены.
- .PARAMETER ModuleName
- Имя загружаемого модуля.
- .PARAMETER $ModulesDir
- Путь к папке с модулями ядра.
- .OUTPUTS
- $Null. Функция не возвращает значений.
- #>
- Function Import-CoreModuleByName([STRING]$ModuleName,[STRING]$ModulesDir)
- {
- #Запоминаем предыдущее значение системной переменной $env:psmodulepath, чтобы можно было его восстановить
- $PrevModulePath = $env:psmodulepath
- if (Test-Path $ModulesDir)
- {
- #Смотрим, есть ли наша папка с модулями в списке путей поиска модулей. Если нет - добавляем.
- If (-not ($env:psmodulepath.Contains($ModulesDir)))
- {
- $env:psmodulepath = $env:psmodulepath + ";$ModulesDir"
- }
- #Конструируем имя файла описания модуля для загрузки
- $DescFilePath = Join-Path $ModulesDir $ModuleName
- $DescFilePath = $DescFilePath + "." + $SYSTEM_FILE_EXTENSIONS_PSD1
- #Смотрим, существует ли файл описания с нужным именем
- if (Test-Path $DescFilePath)
- {
- #Получаем содержимое файла описания модуля в виде многострочной строки
- $DescriptionContents = Get-Content $DescFilePath
- Foreach ($Line in $DescriptionContents)
- {
- $ResultSB = $ResultSB + "`r`n" + $Line
- }
- #Выполняем строку, содержащую описания модуля. В итоге у нас получается хэш-таблица, содержащая, среди прочего
- #перечень модулей, требующихся для загрузки текущего модуля.
- $Hash = Invoke-Expression $ResultSB
- #Получаем список имен требуемых модулей
- $PreRequirements = $Hash.RequiredModules
- #Если для работы текущего модуля требуются другие модули, загружаем их по одному с помощью этой же функции
- If ($PreRequirements.Count -ne $null)
- {
- Foreach ($Module in $PreRequirements)
- {
- Import-CoreModuleByName -ModuleName $Module -ModulesDir $ModulesDir
- }
- }
- #Все требуемые модули (если они были) загружены, можно загружать текущий модуль
- #Сначала выгрузим модуль
- Remove-Module -Force "$ModuleName" -ErrorAction SilentlyContinue | Out-Null
- #Теперь загрузим его снова
- Import-Module "$DescFilePath" -ErrorAction Stop -Global | Out-Null
- Write-Log -CurrentLogLevel 1 -Message "Успешно [пере]загружен модуль ядра `"$ModuleName`"" | Out-Null
- }
- else #Ожидаемый файл описания для модуля не найден. Пробуем загрузить модуль просто по имени.
- {
- Write-Log -CurrentLogLevel 1 -Message "Не могу найти модуль `"$ModuleName`" в папке `"$ModulesDir`". Попробую загрузить его по имени."
- Import-Library $ModuleName | Out-Null
- }
- }
- else
- {
- Write-Log -CurrentLogLevel 1 -Message "Не могу найти папку `"$ModulesDir`". В ней должны были быть модули, но поскольку нет самой папки, их тоже нет"
- Throw "Err_connot_find_modules_dir"
- }
- #Восстанавливаем значение системной переменной $env:psmodulepath
- $env:psmodulepath = $PrevModulePath
- }
- <#
- .SYNOPSIS
- Загружает модули ядра ADT.
- .DESCRIPTION
- Просматривает файлы *.psd1 в папке \Modules\Core. Для каждого файла сначала загружаются модули, перечисленные
- в секции RequiredModules, затем выполняется загрузка самого файла.
- .OUTPUTS
- $null. Функция не возвращает значений.
- #>
- Function Initialize-ADTCore()
- {
- if (($Global:ScriptPS1File -ne $null) -and (Test-Path $Global:ScriptPS1File))
- {
- $ScriptDir = $PSScriptRoot
- $ScriptDir = Split-Path -Parent $ScriptDir
- $ScriptDir = Split-Path -Parent $ScriptDir
- }
- else
- {
- $ScriptDir = Get-ScriptDir
- }
- $CoreModuleDirPath = Join-Path $ScriptDir $SYSTEM_SCRIPT_MODULES_CORE_MODULES_DIR_NAME
- if (Test-Path $CoreModuleDirPath)
- {
- $CoreModuleFiles = Get-ChildItem -LiteralPath $CoreModuleDirPath -Filter $SYSTEM_FILE_EXTENSIONS_MASK_PSD1
- Foreach ($CoreModuleFile in $CoreModuleFiles)
- {
- $ModuleName = $CoreModuleFile.BaseName
- Import-CoreModuleByName -ModuleName $ModuleName -ModulesDir $CoreModuleDirPath
- }
- }
- else
- {
- Write-Log -CurrentLogLevel 1 -Message "Не могу найти папку `"$CoreModuleDirPath`", в которой должны быть модули ядра сценария."
- Throw "Err_cannot_find_core_modules_dir"
- }
- }
- <#
- .SYNOPSIS
- Демонстрирует сообщение пользователю.
- .Description
- В зависимости от параметров сценария (режима запуска, наличия лог-файла) и параметров вызова, - пишет в консоль,
- в статусную строку формы (для графического режима), в файл лога, если он задан.
- Имеет поддержку уровней логирования. Если заданный параметром CurrentLogLevel уровень сообщения больше, чем
- уровень логирования сценария, определяемы параметром $ScriptLogLevel, то сообщение не выводится.
- .PARAMETER CurrentLogLevel
- Определяет текущий уровень "важности" сообщения.
- .PARAMETER $ScriptLogLevel
- Определяет уровень логирования сценария. По умолчанию равен десяти.
- .PARAMETER Message
- Текст сообщения.
- .OUTPUTS
- Данная функция не возвращает значений.
- #>
- Function Write-Log ([Byte]$CurrentLogLevel,[String]$Message,[INT]$ScriptLogLevel=10)
- {
- If ($CurrentLogLevel -le $ScriptLogLevel )
- {
- if ($Message -ne " ")
- {
- [String]$DT = $(Get-Date)
- [String]$Str = $($DT + " " + $Message)
- }else
- {
- $Str = " "
- }
- if (($Script:RunMode -eq $SCRIPT_MAIN_SCRIPT_RUN_MODE_GUI) -and ($Script:RunMode -ne $Null))
- {
- $Len = $Message.Length
- #Если сообщене не влазит по длине, укорачиваем его
- if ($Len -gt $SYSTEM_MAX_STATUSBAR_LENGTH)
- {
- $OverSized = $Len - $SYSTEM_MAX_STATUSBAR_LENGTH
- $Middle = [Math]::Round($SYSTEM_MAX_STATUSBAR_LENGTH / 2)
- $HalfOver = [Math]::Round($OverSized / 2)
- $Pos1 = $Middle - 3
- $TempMessage1 = $Message.Substring(0,$Pos1)
- $Pos2 = $Len - $Middle + 3
- $TempMessage2 = $Message.Substring($Pos2)
- $Message = $TempMessage1 + "<....>" + $TempMessage2
- }
- $StatusBar.Text = $Message
- $MainForm.Refresh() | Out-Null
- }
- Write-Host $Str
- If (($Global:gLogFile -ne "") -and ($Global:gLogFile -ne $null))
- {
- # echo $Message + "`n" >> $Global:gLogFile -
- Write-Output $Str | Out-File -FilePath $Global:gLogFile -Append
- }
- }
- trap {
- Write-Host $_
- continue
- }
- }
- <#
- .SYNOPSIS
- Позволяет установить константу в области видимости сценария.
- .Description
- Функция создает неизменяемую переменную уровня сценария. Если переменная с заданным именем уже существеует, она не будет перезаписана.
- Функция написана для удобства обработки исключений и устранения конфликтов имен переменных.
- .PARAMETER Name
- Имя создаваемой константы
- .PARAMETER Value
- Значение создаваемой константы
- .PARAMETER Scope
- Область видимости создаваемой константы. По умолчанию - Script.
- .OUTPUTS
- Данная функция не возвращает значений.
- #>
- Function Set-Constant ([STRING]$Name,$Value,$Scope="Global")
- {
- if ( -not (Get-Variable $Name -ErrorAction SilentlyContinue -Scope Script))
- {
- Set-Variable -Name $Name -option Constant -Value $Value -Force -Scope $Scope -ErrorAction SilentlyContinue
- }
- }
- <#
- .SYNOPSIS
- Загружает модуль по имени.
- .Description
- Если модуль уже загружен, повторная загрузка не выполняется
- .PARAMETER Module
- Имя модуля, который нужно загрузить.
- .OUTPUTS
- $true в случае успешной загрузки модуля.
- #>
- Function Import-Library ([string]$Module)
- {
- #Проверяем, загружен ли модуль
- if (Get-Module -name $Module)
- {
- Return $True
- }
- else
- #Смотрим, доступен ли нужный модуль
- {
- if (Get-Module -ListAvailable | Where-Object { $_.name -eq $Module })
- {
- #Импортируем модуль, предварительно удалив его
- Remove-Module -Name $Module -Force -ErrorAction SilentlyContinue
- Import-Module -Name $Module -Global -Force -ErrorAction SilentlyContinue | Out-Null
- Write-Log -CurrentLogLevel 1 -Message "Успешно загружен модуль $Module"
- Return $true
- }
- else
- {
- Write-Log -CurrentLogLevel 1 -Message "Модуль $Module не может быть загружен"
- Throw "Err_cannot_load_module"
- }
- }
- }
- <#
- .SYNOPSIS
- Разворачивает внутренние переменные сценария.
- .Description
- Логикой работы сценария допускается использование переменных (например, $SYSTEM_SCRIPT_VARIABLE_LOCAL_CODE)
- в конфигурационных файлах и файлах заданий. Данная функция ищет в переданной строке эти переменные и заменяет
- их актуальными значениями.
- .PARAMETER Value
- Строка, содержащая (или не содержащая) переменные.
- .OUTPUTS
- System.String. Возвращает строку, в которой имена переменных заменены их фактическими значениями.
- #>
- Function Expand-InternalVariable([STRING]$Value)
- {
- $Val = $Value
- #---Значение LocalCode - переменная, используемая в путях OU в AD
- $SYSTEM_SCRIPT_VARIABLE_LOCAL_CODE = "[:LocalCode:]"
- #---Имя домена, в котором исполняется сценарий
- $SYSTEM_SCRIPT_VARIABLE_DOMAIN_FQDN = "[:DomainFQDN:]"
- #---Путь к папке с ADT
- $SYSTEM_SCRIPT_VARIABLE_ADT_FOLDER = "[:ADTRootDIR:]"
- #---Путь к общему локальному главному меню
- $SYSTEM_SCRIPT_VARIABLE_COMMON_START_MENU = "[:CommonStartMenu:]"
- #---Путь к общей паке "Администрирование"
- $SYSTEM_SCRIPT_VARIABLE_COMMON_ADMINISTRATIVE_TOOLS = "[:CommonAdministrativeTools:]"
- #---Путь к общей папке "Application Data"
- $SYSTEM_SCRIPT_VARIABLE_COMMON_APP_DATA = "[:CommonAppData:]"
- #---Путь к общему рабочему столу
- $SYSTEM_SCRIPT_VARIABLE_COMMON_DESKTOP = "[:CommonDesktop:]"
- #---Путь к общим документам
- $SYSTEM_SCRIPT_VARIABLE_COMMON_DOCUMENTS = "[:CommonDocuments:]"
- #---Путь к общей папке "избранное"
- $SYSTEM_SCRIPT_VARIABLE_COMMON_FAVORITES = "[:CommonFavorites:]"
- #---Путь к общей папке "Программы"
- $SYSTEM_SCRIPT_VARIABLE_COMMON_PROGRAMS = "[:CommonPrograms:]"
- #---Путь к общей папке автозагрузки
- $SYSTEM_SCRIPT_VARIABLE_COMMON_STARTUP = "[:CommonStartup:]"
- #---Путь к общей папке шаблонов
- $SYSTEM_SCRIPT_VARIABLE_COMMON_TEMPLATES = "[:CommonTemplates:]"
- #---Путь к общей папке "Моя музыка"
- $SYSTEM_SCRIPT_VARIABLE_COMMON_MUSIC = "[:CommonMusic:]"
- #---Путь к общей папке "Мои рисунки"
- $SYSTEM_SCRIPT_VARIABLE_COMMON_PICTIRES = "[:CommonPictures:]"
- #---Путь к общей папке "Видео"
- $SYSTEM_SCRIPT_VARIABLE_COMMON_VIDEO = "[:CommonVideo:]"
- #---Путь к общему профилю
- $SYSTEM_SCRIPT_VARIABLE_ALL_USERS_PROFILE = "[:AllUsersProfile:]"
- #---Путь к профилю пользователя по умолчанию
- $SYSTEM_SCRIPT_VARIABLE_DEFAULT_USER_PROFILE = "[:DefaultUserProfile:]"
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_LOCAL_CODE
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_LOCAL_CODE,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_DOMAIN_FQDN
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_DOMAIN_FQDN,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_START_MENU
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_START_MENU,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_ADMINISTRATIVE_TOOLS
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_ADMINISTRATIVE_TOOLS,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_APP_DATA
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_APP_DATA,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_DESKTOP
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_DESKTOP,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_DOCUMENTS
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_DOCUMENTS,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_FAVORITES
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_FAVORITES,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_PROGRAMS
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_PROGRAMS,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_STARTUP
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_STARTUP,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_TEMPLATES
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_TEMPLATES,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_MUSIC
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_MUSIC,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_PICTIRES
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_PICTIRES,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_VIDEO
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_VIDEO,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_ALL_USERS_PROFILE
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_ALL_USERS_PROFILE,$NV)
- $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_DEFAULT_USER_PROFILE
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_DEFAULT_USER_PROFILE,$NV)
- $LocalCode = Get-RegValue -RegPath $SYSTEM_SCRIPT_REG_STORE_PATH -Param $SYSTEM_SCRIPT_REG_PARAM_LOCAL_CODE
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_LOCAL_CODE,$CSM)
- [STRING]$DomainFQDN = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().Name
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_DOMAIN_FQDN,$DomainFQDN)
- if (($Global:ScriptPS1File -ne $null) -and (Test-Path $Global:ScriptPS1File))
- {
- $ScriptDir = $PSScriptRoot
- $ScriptDir = Split-Path -Parent $ScriptDir
- $ScriptDir = Split-Path -Parent $ScriptDir
- }
- else
- {
- $ScriptDir = Get-ScriptDir
- }
- $ADTDirPath = $ScriptDir
- $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_ADT_FOLDER,$ADTDirPath)
- Return $Val
- }
- <#
- .SYNOPSIS
- Позволяет получить значение переменной среды на удаленном компьютере.
- .Description
- Получает значение поддерживаемых переменных на указанном компьютере. Данные берет из реестра.
- Поддерживает ряд собственных переменных, не имеющих аналогов в стандартынх переменных среды (например, %CommonStartMenu%)
- .PARAMETER $Variable
- Переменная, значение которой нужно получить.
- .PARAMETER $Comp
- Имя / IP-адрес ПК, на котором нужно получить значение переменной.
- .OUTPUTS
- System.String или $null. Возвращает строковое значение переменной или $null, если его не удалось вычислить
- #>
- Function Expand-RemoteMachineSystemVariable([STRING]$Comp="127.0.0.1",[STRING]$Variable)
- {
- $ErrorActionPreference = "silentlycontinue"
- $Res = $null
- $Var = $Variable.Replace("%","")
- $Var = $Var.Replace("[:","")
- $Var = $Var.Replace(":]","")
- Switch ($Var)
- {
- "SYSTEMROOT"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows NT\CurrentVersion"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("$SYSTEM_ROOT_VARIABLE_NAME")
- }
- "SYSTEMDRIVE"
- {
- $WMI_Info = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $Comp
- $Res = $WMI_Info."$Var"
- }
- "PROGRAMFILES"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("ProgramFilesDir")
- }
- "CommonAdministrativeTools"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("Common Administrative Tools")
- }
- "CommonAppData"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("Common AppData")
- }
- "CommonDesktop"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("Common Desktop")
- }
- "CommonDocuments"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("Common Documents")
- }
- "CommonFavorites"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("Common Favorites")
- }
- "CommonPrograms"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("Common Programs")
- }
- "CommonStartMenu"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("Common Start Menu")
- }
- "CommonStartup"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("Common Startup")
- }
- "CommonTemplates"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("Common Templates")
- }
- "CommonMusic"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("CommonMusic")
- }
- "CommonPictures"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("CommonPictures")
- }
- "CommonVideo"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("CommonVideo")
- }
- "AllUsersProfile"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("")
- }
- "DefaultUserProfile"
- {
- $VarRegKey="SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
- $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
- $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
- $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)
- $Res = $RemoteRegistryKey.GetValue("")
- }
- Default
- {
- }
- }
- return $Res
- trap
- {
- continue
- }
- }
- Set-Constant -Name "SYSTEM_YES" -Value "YES"
- Set-Constant -Name "SYSTEM_NO" -Value "NO"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement