Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Работа с реестром

Ответить
Настройки темы
PowerShell - [решено] Работа с реестром

Пользователь


Сообщения: 80
Благодарности: 1

Профиль | Отправить PM | Цитировать


Доброго времени суток!
Хотелось бы прояснить для себя следующую ситуацию. Необходимо определить путь до папки Desktop у пользователя.
Почему не получается считать значение корректно? Рассматриваемая ветка является же корнем именно из нее получается ветка HKLU
Код: Выделить весь код
$sid = (Get-ADUser $user).Sid.Value
$HKU = 2147483651
$wmi = Get-WmiObject -List -Namespace "root\default" -ComputerName $PS | Where-Object {$_.Name -eq "StdRegProv"}
$wmi.GetExpandedStringValue($HKU,"$SID\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","desktop").SValue

Отправлено: 15:42, 10-08-2020

 

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Когда цепляетесь к удалённой тачке к тому же с активной сессией пользователя, знать SID необязательно, так как в память среди прочего будет загружен куст реестра HKCU. Иными словами, можно запросить данные из последнего. Например:
Код: Выделить весь код
using namespace Microsoft.Win32

$target_machine = "zhopka"
try {
  $rk = [RegistryKey]::OpenRemoteBaseKey([RegistryHive]::CurrentUser, $target_machine)
  $sk = $rk.OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders')
  $sk.GetValue('Desktop')
}
finally {
  if ($sk) {$sk.Dispose()}
  if ($rk) {$rk.Dispose()}
}
Насколько помню HKU = -2147483645.

Отправлено: 18:24, 10-08-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1167
Благодарности: 486

Профиль | Отправить PM | Цитировать


Цитата lox-ness:
Необходимо определить путь до папки Desktop у пользователя. »
Код: Выделить весь код
[environment]::getfolderpath('Desktop')

-------
scio me nihil scire. Ѫ


Отправлено: 18:28, 10-08-2020 | #3


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


YuS_2, если обернуть в Invoke-Command, но у оного достаточно побочных эффектов.

Отправлено: 18:32, 10-08-2020 | #4


Пользователь


Сообщения: 80
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата greg zakharov:
Когда цепляетесь к удалённой тачке к тому же с активной сессией пользователя, знать SID необязательно, так как в память среди прочего будет загружен куст реестра HKCU. Иными словами, можно запросить данные из последнего. Например: »
Без sid не будет работать, считывает ветку пользователя от имени которого происходит запуск
с указанием Sid пишет"Невозможно вызвать метод для выражения со значением NULL"

В ходе тестирования выяснили, что с Windows XP считывает ветку как надо, думаю это происходит потому что папка называется "Рабочий стол", а не "Desktop"
И проблема именно в переменной %Userprofile% и как обойти эту проблему ... ????
Если путь до Desktop написан явно, то все хорошо считывает
WinRM у нас запрещен, поэтому вариант с Invoke-Command и [environment]::getfolderpath('Desktop') - не получиться

Отправлено: 18:54, 10-08-2020 | #5


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата lox-ness:
считывает ветку пользователя от имени которого происходит запуск
Даже если в системе несколько учёток, не вижу проблемы переписать пример с SID по аналогии.
К слову, можно провернуть очень грязный трюк со счётчиками производительности, но способ палится всеми AV.

Отправлено: 19:29, 10-08-2020 | #6


Пользователь


Сообщения: 80
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата greg zakharov:
Даже если в системе несколько учёток, не вижу проблемы переписать пример с SID по аналогии. »
Вроде выше было написано, что с с указанием Sid пишет"Невозможно вызвать метод для выражения со значением NULL
Не получается получить корректное значение, единственное что получается это через wmi получить путь до профиля пользователя и потом дописать название папки и проверить этот путь
Примерно так
Код: Выделить весь код
$path_profile = (((Get-WMIObject win32_userprofile -ComputerName $name_ps -filter "SID = '$sid'").LocalPath) -replace ":","$") + "\desktop"
$path_desktop = "\\$name_ps\$path_profile"
if (Test-path $path_desktop) ....
Какой-то костыль выходит

Отправлено: 06:08, 11-08-2020 | #7


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата lox-ness:
Вроде выше было написано, что с с указанием Sid пишет"Невозможно вызвать метод для выражения со значением NULL
Ну дык никто не мешает воспользоваться невиртуальным методом GetType, чтобы понять где в какой переменной что лежит, верно?

Отправлено: 14:36, 11-08-2020 | #8


Пользователь


Сообщения: 80
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата greg zakharov:
Ну дык никто не мешает воспользоваться невиртуальным методом GetType, чтобы понять где в какой переменной что лежит, верно? »
Что-то не могу понять, как к этому случаю прикрутить GetType. Можете по подробнее рассказать.

Отправлено: 16:22, 11-08-2020 | #9


Пользователь


Сообщения: 80
Благодарности: 1

Профиль | Отправить PM | Цитировать


В проблеме разобрались, все таки как и предполагалось проблема в применении переменной %UserProfile%
ветка .. user Shell Folders содержит тип: REG_EXPAND_SZ - Расширяемая строка данных. Эта строка представляет собой текст, содержащий переменную, которая может быть заменена при вызове со стороны приложения. Именно это и происходит.
Возможно мои суждения ошибочны, но тестирование показывает именно этот вывод
сменили путь на shell folders отрабатывает корректно.

Отправлено: 19:08, 11-08-2020 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Работа с реестром

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Работа с реестром xakserv Скриптовые языки администрирования Windows 4 06-03-2017 12:58
Доступ - Работа с реестром Lite Microsoft Windows 10 2 20-02-2017 01:49
Работа с реестром TERMINAL AutoIt 10 15-06-2012 11:41
Работа с реестром semen1967 Хочу все знать 18 27-11-2004 12:05
Работа с реестром Artya Программирование и базы данных 3 08-09-2003 10:19




 
Переход