none
Powershell 2. Имена и расположение специальных папок на удаленном компьютере RRS feed

  • Вопрос

  • Есть такой скрипт который выводит имена и расположение специальных папок на локальном компьютере.

     foreach ($f in [Enum]::GetValues([System.Environment+SpecialFolder])) { "{0,-20} - {1}" -f $f, [Environment]::GetFolderPath($f) }

     А как получить данные с удаленного компьютера?

     

     

Ответы

  • Примерно так:

    invoke-command -computername NameOfRemoteComputer -scriptblock {foreach ($f in [Enum]::GetValues([System.Environment+SpecialFolder])) { "{0,-20} - {1}" -f $f, [Environment]::GetFolderPath($f) }}

     

    Только смысла в этом я особого не вижу, ведь этот скрипт возвращает данные, которые в основном зависят от контекста пользователя, а значит, скорее всего они будут те же самые, что и на локльной машине в контесте того же пользователя.

    • Предложено в качестве ответа Vasily GusevModerator 29 мая 2010 г. 5:49
    • Помечено в качестве ответа TOleg 9 июня 2010 г. 10:34
  • От головной боли могут избавить Group Policy Preferences (их конечно тоже надо ставить на XP, но это легко http://www.itcommunity.ru/blogs/sie/archive/2008/11/26/38771.aspx)

    С помощью GPP можно запускать скрипты в контексте пользователя. Делаете скрипт, который пишет информацию на шару, прописываете его в GPP и ставите галочку "Выполнять в контексте пользователя".


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    • Помечено в качестве ответа TOleg 9 июня 2010 г. 10:35
    Модератор

Все ответы

  • Примерно так:

    invoke-command -computername NameOfRemoteComputer -scriptblock {foreach ($f in [Enum]::GetValues([System.Environment+SpecialFolder])) { "{0,-20} - {1}" -f $f, [Environment]::GetFolderPath($f) }}

     

    Только смысла в этом я особого не вижу, ведь этот скрипт возвращает данные, которые в основном зависят от контекста пользователя, а значит, скорее всего они будут те же самые, что и на локльной машине в контесте того же пользователя.

    • Предложено в качестве ответа Vasily GusevModerator 29 мая 2010 г. 5:49
    • Помечено в качестве ответа TOleg 9 июня 2010 г. 10:34
  • Благодарю за помощь! PS только начал осваивать....

    Про смысл поясню..

    в том-то и дело, что некоторые папки (мои документы, рабочий стол ...)  у пользователей,  располагаются  по-разному. Скриптом требуется получить месторасположение спец.папок  на компьютерах в сети.

  • Благодарю за помощь! PS только начал осваивать....

    Про смысл поясню..

    в том-то и дело, что некоторые папки (мои документы, рабочий стол ...)  у пользователей,  располагаются  по-разному. Скриптом требуется получить месторасположение спец.папок  на компьютерах в сети.


    Дело в том, что для этого вам придется запускать скрипт в контексте пользователя на удаленном компьютере. "Православнее" это делать при помощи логон скрипта в GP, IMHO. Иначе вам придется выдавать расширенные права пользователям только лишь для того, чтобы вы имели возможность запустить ваш скрипт на удаленной машине в  контексте этого пользователя (не говоря  о том, что вы должны будете знать пароль этого пользователя)
  • Всё ОК, но только  этот скрипт работает если на клиенте настроен WinRm. А каким образом  на PowerShell получить месторасположение специальных папок с компьютеров в сети как в примере на vbscript:

    Const DESKTOP = &H10&
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(DESKTOP)
    Set objFolderItem = objFolder.Self
    Wscript.Echo objFolderItem.Path

    Или

     Const PROGRAM_FILES = &H26&

    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(PROGRAM_FILES)
    Set objFolderItem = objFolder.Self
    Wscript.Echo objFolderItem.Path

     

  • Всё ОК, но только  этот скрипт работает если на клиенте настроен WinRm. А каким образом  на PowerShell получить месторасположение специальных папок с компьютеров в сети как в примере на vbscript:

    Const DESKTOP = &H10&
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(DESKTOP)
    Set objFolderItem = objFolder.Self
    Wscript.Echo objFolderItem.Path

     

    Так, ведь скрипт, который приведен в вашем первом посте, делает то же, что и этот на VBScript (и даже больше: она показывает пути ко всем спец. папкам, а не только к Desktop)

    Если вы хотите получить только путь к папке Desktop, то можно сделать так: [Environment]::GetFolderPath("DesktopDirectory")

     

  • Да это так, шеловский скрипт намного больше даёт информации, но при условии если на клиентской машине, с которой требуется получить данные , будет установлен и настроен WinRM. Хочу узнать есть ли другой способ  PowerShell`ом определить пути спец. папок  на определённых компьютерах. т.е. надо на каком-либо компе узнать где у него расположена папка рабочий стол или какая другая или вывести весь список спец.папок.

  • Да это так, шеловский скрипт намного больше даёт информации, но при условии если на клиентской машине, с которой требуется получить данные , будет установлен и настроен WinRM. Хочу узнать есть ли другой способ  PowerShell`ом определить пути спец. папок  на определённых компьютерах. т.е. надо на каком-либо компе узнать где у него расположена папка рабочий стол или какая другая или вывести весь список спец.папок.

    На этот вопрос я вам уже отвечал. Просто поймите, что вне зависимости от того, на каком языке реализован скрипт, для решения вашей задачи (получить информацию о спец. папках на удаленной машине) необходимо будет запускать некий процесс на удаленной машине в контексте того пользователя, для которого вы хотите получить информацию.  Для этого проще всего использовать Logon Scripts в GP. Иначе (какое бы средство для реализации скрипта вы не использовали) вам придется

    1)выдавать повышеные привелегии пользователям, о которых вы хотите собрать информацию (для того чтобы дать возможность этим пользователям (тем или иным способом: WinRM, WMI, WSH, psexec) выполнять дистанционно скрипт на целевой машине)

    2)вы обязаны будете выполнить логон на удаленной системе в контексте нужного вам пользователя, а для этого вам нужно будет знать пароль этого пользователя

  • От головной боли могут избавить Group Policy Preferences (их конечно тоже надо ставить на XP, но это легко http://www.itcommunity.ru/blogs/sie/archive/2008/11/26/38771.aspx)

    С помощью GPP можно запускать скрипты в контексте пользователя. Делаете скрипт, который пишет информацию на шару, прописываете его в GPP и ставите галочку "Выполнять в контексте пользователя".


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/
    • Помечено в качестве ответа TOleg 9 июня 2010 г. 10:35
    Модератор