Advertisement
hdablin

Модуль сценария ADT "CM_SYSTEM"

Dec 4th, 2012
343
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $SYSTEM_SCRIPT_MODULES_CORE_MODULES_DIR_NAME = "Modules\Core\"
  2. $SYSTEM_FILE_EXTENSIONS_PSD1    =   "psd1"
  3. $SYSTEM_FILE_EXTENSIONS_MASK_PSD1   =   "*.$SYSTEM_FILE_EXTENSIONS_PSD1"
  4. $SYSTEM_SCRIPT_MODULES_CORE_SYSTEM_MODULE_NAME = "CM_System.psd1"
  5.  
  6. #MV2
  7.  
  8. <#
  9. .SYNOPSIS
  10.     Загружает модуль ядра ADT по его имени.
  11.    
  12. .Description
  13.     Позволяет загрузить модуль ядра ADT по его имени с учетом всех зависимоестей: если загружаемому модулю требуются
  14.     другие модули, они тоже будут рекурсивно загружены.
  15.    
  16. .PARAMETER  ModuleName
  17.     Имя загружаемого модуля.
  18.  
  19. .PARAMETER  $ModulesDir
  20.     Путь к папке с модулями ядра.
  21.  
  22. .OUTPUTS   
  23.     $Null. Функция не возвращает значений.
  24. #> 
  25. Function Import-CoreModuleByName([STRING]$ModuleName,[STRING]$ModulesDir)
  26. {
  27.     #Запоминаем предыдущее значение системной переменной  $env:psmodulepath, чтобы можно было его восстановить
  28.     $PrevModulePath = $env:psmodulepath
  29.    
  30.     if (Test-Path $ModulesDir)
  31.     {
  32.         #Смотрим, есть ли наша папка с модулями в списке путей поиска модулей. Если нет - добавляем.   
  33.         If (-not ($env:psmodulepath.Contains($ModulesDir)))
  34.         {
  35.             $env:psmodulepath = $env:psmodulepath + ";$ModulesDir"
  36.         }  
  37.        
  38.         #Конструируем имя файла описания модуля для загрузки  
  39.         $DescFilePath = Join-Path $ModulesDir $ModuleName      
  40.         $DescFilePath = $DescFilePath + "." + $SYSTEM_FILE_EXTENSIONS_PSD1
  41.        
  42.         #Смотрим, существует ли файл описания с нужным именем
  43.         if (Test-Path $DescFilePath)
  44.         {  
  45.             #Получаем содержимое файла описания модуля в виде многострочной строки
  46.             $DescriptionContents = Get-Content $DescFilePath
  47.             Foreach ($Line in $DescriptionContents)
  48.             {
  49.                 $ResultSB = $ResultSB + "`r`n" + $Line
  50.             }  
  51.            
  52.             #Выполняем строку, содержащую описания модуля. В итоге у нас получается хэш-таблица, содержащая, среди прочего
  53.             #перечень модулей, требующихся для загрузки текущего модуля.        
  54.             $Hash = Invoke-Expression $ResultSB
  55.            
  56.             #Получаем список имен требуемых модулей
  57.             $PreRequirements = $Hash.RequiredModules
  58.            
  59.             #Если для работы текущего модуля требуются другие модули, загружаем их по одному с помощью этой же функции
  60.             If ($PreRequirements.Count -ne $null)
  61.             {
  62.                 Foreach ($Module in $PreRequirements)
  63.                 {
  64.                     Import-CoreModuleByName -ModuleName $Module -ModulesDir $ModulesDir
  65.                 }
  66.             }
  67.            
  68.             #Все требуемые модули (если они были) загружены, можно загружать текущий модуль
  69.            
  70.             #Сначала выгрузим модуль
  71.             Remove-Module -Force "$ModuleName" -ErrorAction SilentlyContinue | Out-Null        
  72.             #Теперь загрузим его снова
  73.             Import-Module "$DescFilePath" -ErrorAction Stop -Global | Out-Null 
  74.             Write-Log -CurrentLogLevel 1 -Message "Успешно [пере]загружен модуль ядра `"$ModuleName`"" | Out-Null
  75.            
  76.            
  77.         }
  78.         else #Ожидаемый файл описания для модуля не найден. Пробуем загрузить модуль просто по имени.
  79.         {
  80.             Write-Log -CurrentLogLevel 1 -Message "Не могу найти модуль `"$ModuleName`" в папке `"$ModulesDir`". Попробую загрузить его по имени."           
  81.             Import-Library $ModuleName | Out-Null
  82.  
  83.         }      
  84.     }
  85.     else
  86.     {
  87.         Write-Log -CurrentLogLevel 1 -Message "Не могу найти папку `"$ModulesDir`". В ней должны были быть модули, но поскольку нет самой папки, их тоже нет"
  88.         Throw "Err_connot_find_modules_dir"
  89.     }
  90.     #Восстанавливаем значение системной переменной $env:psmodulepath
  91.     $env:psmodulepath = $PrevModulePath
  92.    
  93. }
  94.  
  95. <#
  96. .SYNOPSIS
  97.     Загружает модули ядра ADT.
  98.        
  99. .DESCRIPTION
  100.     Просматривает файлы *.psd1 в папке \Modules\Core. Для каждого файла сначала загружаются модули, перечисленные
  101.     в секции RequiredModules, затем выполняется загрузка самого файла.
  102.  
  103. .OUTPUTS   
  104.     $null. Функция не возвращает значений.      
  105. #> 
  106. Function Initialize-ADTCore()
  107. {      
  108.     if (($Global:ScriptPS1File -ne $null) -and (Test-Path $Global:ScriptPS1File))
  109.     {    
  110.         $ScriptDir = $PSScriptRoot
  111.         $ScriptDir = Split-Path -Parent $ScriptDir
  112.         $ScriptDir = Split-Path -Parent $ScriptDir
  113.     }
  114.     else
  115.     {
  116.         $ScriptDir = Get-ScriptDir
  117.     }    
  118.    
  119.     $CoreModuleDirPath = Join-Path $ScriptDir $SYSTEM_SCRIPT_MODULES_CORE_MODULES_DIR_NAME 
  120.     if (Test-Path $CoreModuleDirPath)
  121.     {
  122.         $CoreModuleFiles = Get-ChildItem -LiteralPath $CoreModuleDirPath -Filter $SYSTEM_FILE_EXTENSIONS_MASK_PSD1     
  123.         Foreach ($CoreModuleFile in $CoreModuleFiles)
  124.         {
  125.             $ModuleName = $CoreModuleFile.BaseName
  126.             Import-CoreModuleByName -ModuleName $ModuleName -ModulesDir $CoreModuleDirPath 
  127.         }
  128.     }
  129.     else
  130.     {
  131.         Write-Log -CurrentLogLevel 1 -Message "Не могу найти папку `"$CoreModuleDirPath`", в которой должны быть модули ядра сценария."
  132.         Throw "Err_cannot_find_core_modules_dir"
  133.     }
  134.    
  135. }
  136.  
  137. <#
  138. .SYNOPSIS
  139.     Демонстрирует сообщение пользователю.
  140.    
  141. .Description
  142.     В зависимости от параметров сценария (режима запуска, наличия лог-файла) и параметров вызова, - пишет в консоль,
  143.     в статусную строку формы (для графического режима), в файл лога, если он задан.
  144.    
  145.     Имеет поддержку уровней логирования. Если заданный параметром CurrentLogLevel уровень сообщения больше, чем
  146.     уровень логирования сценария, определяемы параметром $ScriptLogLevel, то сообщение не выводится.
  147.    
  148. .PARAMETER  CurrentLogLevel
  149.     Определяет текущий уровень "важности" сообщения.
  150.    
  151. .PARAMETER  $ScriptLogLevel
  152.     Определяет уровень логирования сценария. По умолчанию равен десяти.
  153.    
  154. .PARAMETER  Message
  155.     Текст сообщения.
  156.  
  157. .OUTPUTS   
  158.     Данная функция не возвращает значений.
  159. #> 
  160. Function Write-Log ([Byte]$CurrentLogLevel,[String]$Message,[INT]$ScriptLogLevel=10)
  161. {
  162.     If ($CurrentLogLevel -le $ScriptLogLevel )
  163.     {  
  164.         if ($Message -ne " ")
  165.         {
  166.             [String]$DT = $(Get-Date)
  167.             [String]$Str = $($DT + " " + $Message)
  168.         }else
  169.         {
  170.             $Str = " "
  171.         }
  172.        
  173.        
  174.         if (($Script:RunMode -eq $SCRIPT_MAIN_SCRIPT_RUN_MODE_GUI) -and ($Script:RunMode -ne $Null))
  175.         {
  176.             $Len = $Message.Length
  177.             #Если сообщене не влазит по длине, укорачиваем его
  178.             if ($Len -gt $SYSTEM_MAX_STATUSBAR_LENGTH)
  179.             {
  180.                 $OverSized = $Len - $SYSTEM_MAX_STATUSBAR_LENGTH
  181.                 $Middle = [Math]::Round($SYSTEM_MAX_STATUSBAR_LENGTH / 2)
  182.                 $HalfOver = [Math]::Round($OverSized / 2)              
  183.                
  184.                 $Pos1 = $Middle - 3
  185.                 $TempMessage1 = $Message.Substring(0,$Pos1)
  186.                
  187.                 $Pos2 = $Len - $Middle + 3
  188.                 $TempMessage2 = $Message.Substring($Pos2)
  189.                 $Message = $TempMessage1 + "<....>" + $TempMessage2            
  190.             }
  191.            
  192.             $StatusBar.Text = $Message
  193.             $MainForm.Refresh() | Out-Null
  194.         }
  195.         Write-Host $Str
  196.        
  197.         If (($Global:gLogFile -ne "") -and ($Global:gLogFile -ne $null))
  198.         {
  199.             # echo $Message + "`n" >> $Global:gLogFile -
  200.             Write-Output $Str | Out-File -FilePath $Global:gLogFile -Append        
  201.         }
  202.        
  203.     }
  204.     trap {
  205.             Write-Host $_
  206.             continue
  207.         }
  208. }
  209.  
  210. <#
  211. .SYNOPSIS
  212.     Позволяет установить константу в области видимости сценария.
  213.    
  214. .Description
  215.     Функция создает неизменяемую переменную уровня сценария. Если переменная с заданным именем уже существеует, она не будет перезаписана.
  216.     Функция написана для удобства обработки исключений и устранения конфликтов имен переменных.
  217.    
  218. .PARAMETER  Name
  219.     Имя создаваемой константы
  220.    
  221. .PARAMETER  Value
  222.     Значение создаваемой константы
  223.  
  224. .PARAMETER  Scope
  225.     Область видимости создаваемой константы. По умолчанию - Script.
  226.  
  227. .OUTPUTS   
  228.     Данная функция не возвращает значений.
  229. #> 
  230. Function Set-Constant ([STRING]$Name,$Value,$Scope="Global")
  231. {
  232.     if ( -not (Get-Variable $Name -ErrorAction SilentlyContinue -Scope Script))
  233.     {
  234.         Set-Variable -Name $Name -option Constant -Value $Value -Force -Scope $Scope -ErrorAction SilentlyContinue 
  235.     }
  236. }
  237.  
  238.  
  239.  
  240. <#
  241. .SYNOPSIS
  242.     Загружает модуль по имени.
  243.    
  244. .Description
  245.     Если модуль уже загружен, повторная загрузка не выполняется
  246.    
  247. .PARAMETER  Module
  248.     Имя модуля, который нужно загрузить.
  249.  
  250. .OUTPUTS   
  251.     $true в случае успешной загрузки модуля.      
  252. #> 
  253.  
  254. Function Import-Library ([string]$Module)
  255. {
  256.     #Проверяем, загружен ли модуль
  257.     if (Get-Module -name $Module)
  258.     {
  259.         Return $True
  260.     }
  261.     else
  262.     #Смотрим, доступен ли нужный модуль
  263.     {
  264.         if (Get-Module -ListAvailable | Where-Object { $_.name -eq $Module })
  265.         {
  266.             #Импортируем модуль, предварительно удалив его
  267.             Remove-Module -Name $Module -Force -ErrorAction SilentlyContinue
  268.             Import-Module -Name $Module -Global -Force -ErrorAction SilentlyContinue | Out-Null
  269.             Write-Log -CurrentLogLevel 1 -Message "Успешно загружен модуль $Module"
  270.             Return $true
  271.         }      
  272.         else
  273.         {
  274.             Write-Log -CurrentLogLevel 1 -Message "Модуль $Module не может быть загружен"
  275.             Throw "Err_cannot_load_module"
  276.         }
  277.     }
  278.    
  279. }
  280.  
  281. <#
  282. .SYNOPSIS
  283.     Разворачивает внутренние переменные сценария.
  284.    
  285. .Description
  286.     Логикой работы сценария допускается использование переменных (например, $SYSTEM_SCRIPT_VARIABLE_LOCAL_CODE)
  287.     в конфигурационных файлах и файлах заданий. Данная функция ищет в переданной строке эти переменные и заменяет
  288.     их актуальными значениями.
  289.    
  290. .PARAMETER  Value
  291.     Строка, содержащая (или не содержащая) переменные.
  292.    
  293. .OUTPUTS   
  294.     System.String. Возвращает строку, в которой имена переменных заменены их фактическими значениями.
  295. #> 
  296.  
  297. Function Expand-InternalVariable([STRING]$Value)
  298. {
  299.     $Val = $Value
  300.     #---Значение LocalCode - переменная, используемая в путях OU в AD    
  301.     $SYSTEM_SCRIPT_VARIABLE_LOCAL_CODE = "[:LocalCode:]"  
  302.     #---Имя домена, в котором исполняется сценарий
  303.     $SYSTEM_SCRIPT_VARIABLE_DOMAIN_FQDN = "[:DomainFQDN:]"
  304.     #---Путь к папке с ADT
  305.     $SYSTEM_SCRIPT_VARIABLE_ADT_FOLDER = "[:ADTRootDIR:]"
  306.     #---Путь к общему локальному главному меню
  307.     $SYSTEM_SCRIPT_VARIABLE_COMMON_START_MENU = "[:CommonStartMenu:]"  
  308.     #---Путь к общей паке "Администрирование"
  309.     $SYSTEM_SCRIPT_VARIABLE_COMMON_ADMINISTRATIVE_TOOLS = "[:CommonAdministrativeTools:]"
  310.     #---Путь к общей папке "Application Data"
  311.     $SYSTEM_SCRIPT_VARIABLE_COMMON_APP_DATA = "[:CommonAppData:]"
  312.     #---Путь к общему рабочему столу
  313.     $SYSTEM_SCRIPT_VARIABLE_COMMON_DESKTOP = "[:CommonDesktop:]"
  314.     #---Путь к общим документам
  315.     $SYSTEM_SCRIPT_VARIABLE_COMMON_DOCUMENTS = "[:CommonDocuments:]"
  316.     #---Путь к общей папке "избранное"
  317.     $SYSTEM_SCRIPT_VARIABLE_COMMON_FAVORITES = "[:CommonFavorites:]"
  318.     #---Путь к общей папке "Программы"
  319.     $SYSTEM_SCRIPT_VARIABLE_COMMON_PROGRAMS = "[:CommonPrograms:]"
  320.     #---Путь к общей папке автозагрузки
  321.     $SYSTEM_SCRIPT_VARIABLE_COMMON_STARTUP = "[:CommonStartup:]"
  322.     #---Путь к общей папке шаблонов
  323.     $SYSTEM_SCRIPT_VARIABLE_COMMON_TEMPLATES = "[:CommonTemplates:]"
  324.     #---Путь к общей папке "Моя музыка"
  325.     $SYSTEM_SCRIPT_VARIABLE_COMMON_MUSIC = "[:CommonMusic:]"
  326.     #---Путь к общей папке "Мои рисунки"
  327.     $SYSTEM_SCRIPT_VARIABLE_COMMON_PICTIRES = "[:CommonPictures:]"
  328.     #---Путь к общей папке "Видео"
  329.     $SYSTEM_SCRIPT_VARIABLE_COMMON_VIDEO = "[:CommonVideo:]"
  330.     #---Путь к общему профилю
  331.     $SYSTEM_SCRIPT_VARIABLE_ALL_USERS_PROFILE = "[:AllUsersProfile:]"
  332.     #---Путь к профилю пользователя по умолчанию
  333.     $SYSTEM_SCRIPT_VARIABLE_DEFAULT_USER_PROFILE = "[:DefaultUserProfile:]"
  334.    
  335.    
  336.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_LOCAL_CODE
  337.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_LOCAL_CODE,$NV)
  338.  
  339.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_DOMAIN_FQDN
  340.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_DOMAIN_FQDN,$NV)
  341.  
  342.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_START_MENU
  343.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_START_MENU,$NV)
  344.  
  345.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_ADMINISTRATIVE_TOOLS
  346.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_ADMINISTRATIVE_TOOLS,$NV)
  347.  
  348.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_APP_DATA
  349.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_APP_DATA,$NV)
  350.  
  351.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_DESKTOP
  352.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_DESKTOP,$NV)
  353.  
  354.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_DOCUMENTS
  355.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_DOCUMENTS,$NV)
  356.  
  357.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_FAVORITES
  358.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_FAVORITES,$NV)
  359.  
  360.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_PROGRAMS
  361.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_PROGRAMS,$NV)
  362.  
  363.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_STARTUP
  364.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_STARTUP,$NV)
  365.  
  366.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_TEMPLATES
  367.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_TEMPLATES,$NV)
  368.  
  369.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_MUSIC
  370.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_MUSIC,$NV)
  371.  
  372.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_PICTIRES
  373.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_PICTIRES,$NV)
  374.  
  375.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_COMMON_VIDEO
  376.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_COMMON_VIDEO,$NV)
  377.  
  378.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_ALL_USERS_PROFILE
  379.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_ALL_USERS_PROFILE,$NV)
  380.  
  381.     $NV = Expand-RemoteMachineSystemVariable -Variable $SYSTEM_SCRIPT_VARIABLE_DEFAULT_USER_PROFILE
  382.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_DEFAULT_USER_PROFILE,$NV)
  383.    
  384.     $LocalCode = Get-RegValue -RegPath $SYSTEM_SCRIPT_REG_STORE_PATH -Param $SYSTEM_SCRIPT_REG_PARAM_LOCAL_CODE
  385.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_LOCAL_CODE,$CSM)
  386.    
  387.     [STRING]$DomainFQDN = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().Name
  388.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_DOMAIN_FQDN,$DomainFQDN)
  389.    
  390.     if (($Global:ScriptPS1File -ne $null) -and (Test-Path $Global:ScriptPS1File))
  391.     {    
  392.         $ScriptDir = $PSScriptRoot
  393.         $ScriptDir = Split-Path -Parent $ScriptDir
  394.         $ScriptDir = Split-Path -Parent $ScriptDir
  395.     }
  396.     else
  397.     {
  398.         $ScriptDir = Get-ScriptDir
  399.     }  
  400.     $ADTDirPath = $ScriptDir
  401.     $Val = $Val.Replace($SYSTEM_SCRIPT_VARIABLE_ADT_FOLDER,$ADTDirPath)
  402.  
  403.     Return $Val
  404.    
  405. }
  406.  
  407. <#
  408. .SYNOPSIS
  409.     Позволяет получить значение переменной среды на удаленном компьютере.
  410.    
  411. .Description
  412.     Получает значение поддерживаемых переменных на указанном компьютере. Данные берет из реестра.
  413.     Поддерживает ряд собственных переменных, не имеющих аналогов в стандартынх переменных среды (например, %CommonStartMenu%)
  414.    
  415. .PARAMETER  $Variable
  416.     Переменная, значение которой нужно получить.
  417.    
  418. .PARAMETER  $Comp
  419.     Имя / IP-адрес ПК, на котором нужно получить значение переменной.
  420.    
  421. .OUTPUTS   
  422.     System.String или $null. Возвращает строковое значение переменной или $null, если его не удалось вычислить
  423. #> 
  424. Function Expand-RemoteMachineSystemVariable([STRING]$Comp="127.0.0.1",[STRING]$Variable)
  425. {
  426.  
  427.     $ErrorActionPreference = "silentlycontinue"
  428.     $Res = $null
  429.    
  430.     $Var = $Variable.Replace("%","")
  431.     $Var = $Var.Replace("[:","")
  432.     $Var = $Var.Replace(":]","")
  433.    
  434.     Switch ($Var)
  435.     {
  436.         "SYSTEMROOT"
  437.         {
  438.             $VarRegKey="SOFTWARE\Microsoft\Windows NT\CurrentVersion"  
  439.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  440.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  441.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  442.             $Res = $RemoteRegistryKey.GetValue("$SYSTEM_ROOT_VARIABLE_NAME")
  443.         }
  444.        
  445.         "SYSTEMDRIVE"
  446.         {
  447.             $WMI_Info = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $Comp
  448.             $Res = $WMI_Info."$Var"    
  449.         }
  450.        
  451.         "PROGRAMFILES"
  452.         {
  453.             $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\"
  454.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  455.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  456.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  457.             $Res = $RemoteRegistryKey.GetValue("ProgramFilesDir")
  458.         }      
  459.        
  460.         "CommonAdministrativeTools"
  461.         {
  462.             $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  463.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  464.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  465.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  466.             $Res = $RemoteRegistryKey.GetValue("Common Administrative Tools")
  467.         }
  468.        
  469.         "CommonAppData"
  470.         {
  471.             $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  472.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  473.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  474.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  475.             $Res = $RemoteRegistryKey.GetValue("Common AppData")
  476.         }
  477.        
  478.         "CommonDesktop"
  479.         {
  480.             $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  481.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  482.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  483.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  484.             $Res = $RemoteRegistryKey.GetValue("Common Desktop")
  485.         }
  486.        
  487.         "CommonDocuments"
  488.         {
  489.             $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  490.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  491.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  492.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  493.             $Res = $RemoteRegistryKey.GetValue("Common Documents")
  494.         }
  495.        
  496.         "CommonFavorites"
  497.         {
  498.             $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  499.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  500.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  501.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  502.             $Res = $RemoteRegistryKey.GetValue("Common Favorites")
  503.         }
  504.        
  505.         "CommonPrograms"
  506.         {
  507.             $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  508.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  509.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  510.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  511.             $Res = $RemoteRegistryKey.GetValue("Common Programs")
  512.         }
  513.        
  514.         "CommonStartMenu"
  515.         {
  516.             $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  517.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  518.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  519.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  520.             $Res = $RemoteRegistryKey.GetValue("Common Start Menu")
  521.         }
  522.        
  523.         "CommonStartup"
  524.         {
  525.             $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  526.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  527.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  528.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  529.             $Res = $RemoteRegistryKey.GetValue("Common Startup")
  530.         }
  531.        
  532.         "CommonTemplates"
  533.         {
  534.             $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  535.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  536.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  537.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  538.             $Res = $RemoteRegistryKey.GetValue("Common Templates")
  539.         }
  540.        
  541.         "CommonMusic"
  542.         {
  543.             $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  544.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  545.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  546.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  547.             $Res = $RemoteRegistryKey.GetValue("CommonMusic")
  548.         }
  549.        
  550.        
  551.         "CommonPictures"
  552.         {
  553.             $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  554.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  555.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  556.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  557.             $Res = $RemoteRegistryKey.GetValue("CommonPictures")
  558.         }
  559.        
  560.        
  561.         "CommonVideo"
  562.         {
  563.             $VarRegKey="SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
  564.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  565.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  566.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  567.             $Res = $RemoteRegistryKey.GetValue("CommonVideo")
  568.         }
  569.        
  570.         "AllUsersProfile"
  571.         {
  572.             $VarRegKey="SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
  573.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  574.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  575.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  576.             $Res = $RemoteRegistryKey.GetValue("")
  577.         }
  578.        
  579.         "DefaultUserProfile"
  580.         {
  581.             $VarRegKey="SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
  582.             $keytype=[Microsoft.Win32.RegistryHive]::LocalMachine
  583.             $RemoteRegistry=[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype,$Comp)
  584.             $RemoteRegistryKey=$RemoteRegistry.OpenSubKey($VarRegKey)  
  585.             $Res = $RemoteRegistryKey.GetValue("")
  586.         }
  587.        
  588.        
  589.         Default
  590.         {
  591.            
  592.         }
  593.     }
  594.    
  595.     return $Res
  596.     trap
  597.     {
  598.         continue
  599.     }
  600. }
  601.  
  602.  
  603. Set-Constant -Name "SYSTEM_YES"   -Value  "YES"  
  604. Set-Constant -Name "SYSTEM_NO"   -Value "NO"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement