none
psexec gpupdate win 2008R2 RRS feed

  • Вопрос

  • Доброго времени суток, встала задача сделать gpupdate на всех машинах (win7) из ou или по именам - не суть.
    Пробовал использовать psexec, при использовании на \\computer:
    [MORE]
    C:\Users\nokogerra\Desktop>PsExec.exe \\ws022-temp-01 gpupdate.exe /target:compu
    ter /force

    PsExec v1.98 - Execute processes remotely
    Copyright (C) 2001-2010 Mark Russinovich
    Sysinternals - www.sysinternals.com


    Обновление политики...

    Обновление политики для компьютера успешно завершено.

    gpupdate.exe exited on ws022-temp-01 with error code 0.
    [/MORE]
    При использовании со списком:
    [more]
    C:\Users\nokogerra\Desktop>PsExec.exe -@comps.txt gpupdate.exe /target:computer
    /force

    PsExec v1.98 - Execute processes remotely
    Copyright (C) 2001-2010 Mark Russinovich
    Sysinternals - www.sysinternals.com
    [/more]
    и далее выдает справку psexec, словно не соблюден синтаксис, потыкав по рандомным машинам gpresult`ом стало понятно что политика не применилась после psexec на лист, но на единичную машину применилась.
    Пробовал и с ключем -s, и с -u, хотя и так было запущено от имени администратора домена.
    для примера psexec \\computer ipconfig выводит ipconfig и вконце error0, кто сталкивался?
    10 июля 2013 г. 8:14

Ответы

  • 1. Да, вы правы:  $OU - контейнер Workstation (взят для примера), Windows 7 - установленная ОС (то же для примера) и в итоге список машинок. Только версия ОС берется из свойств учетной записи компьютера в AD. 

    2.  Я просто не уверен, что отвалятся (не проверял). Вы опять правы - можно обойтись и без переменной))


    3. По поводу refresh... . Насколько я понял, эти команды подставляются в текущий скрипт, после -ScriptBlock, вместо {gpupdate /force}. Соответственно, все сессии уже установлены и Invoke-command тоже присутствует.  Но если честно, то я не понимаю зачем gpupdate вызывать столько раз.



    11 июля 2013 г. 7:00

Все ответы

  • Здравствуйте,

    Если у вас проблема только при работе со списком - то проблема, скорее всего, в кодировке этого файла. Попробуйте поменять ее на UTF-8, например.

    10 июля 2013 г. 9:06
  • А то, что "with error code 0." выдает и после применения к одной машине - это нормально?
    10 июля 2013 г. 9:25
  • Насколько я помню, error code 0 - Успешное выполнение операции.
    10 июля 2013 г. 9:32
  • кодировку попробовал ansi, юникод, utf-8 - все одно, выдает справку, может содержание самого листа его смущает? пробовал:

    1.ws022-temp-01

       ws022-temp-02

    2. \\ws022-temp-01

        \\ws022-temp-02

    3. \\ws022-temp-01,\\ws022-temp-02

    4. \\ws022-temp-01,ws022-temp-02

    10 июля 2013 г. 9:47
  • По идее, список должен быть составлен по первому варианту: http://forum.sysinternals.com/psexec-file-format_topic2027.html . Правильно ли я понимаю, что другие команды, например, ipconfig со списком выполняются?


    Согласен с Дмитрием, можно использовать power shell. Пример, можно глянуть тут

    • Изменено SemenovA 10 июля 2013 г. 10:53 корректировка
    10 июля 2013 г. 10:16
  • Буду честен, с powershell не дружу. Запустил модуль AD для powershell (выглядит как cmd, но с соответствующим названием), $cn = Get-ADComputer -filt * это должно было сколлектить все машины AD в переменную $cn, как я понял. Как мне удостовериться что это действительно произошло, и дальше речь идет о создании удаленной сессии, он сохраняет крденшиалы в другую переменную и для установки сессии использует new-pssession, какого типа это удаленные сессии не совсем понятно?
    10 июля 2013 г. 11:45
  • 1. Подглядеть переменную можно так: echo $cn

    2. Насколько я понимаю, результат выполнения  new-pssession - создание своего рода соединительной трубы, через которую потом передаются соответствующие команды.

    У PowerShell есть очень хорошая справка по командлетам: Get-Help имя_командлета


    • Изменено SemenovA 10 июля 2013 г. 12:01 орфография
    10 июля 2013 г. 11:53
  • Хм, при создании $session как указано в блоге (-cn $cn.name), выдает ошибку о нулевом аргументе, 

    PS C:\Users\nokogerra> $session = New-PSSession -cn $cn.name -cred $cred
    New-PSSession : Не удается проверить аргумент для параметра "ComputerName". Арг
    умент пустой или имеет значение NULL. Укажите не пустой аргумент, не имеющий зн
    ачение NULL, после чего повторите выполнение команды.
    строка:1 знак:29
    + $session = New-PSSession -cn <<<<  $cn.name -cred $cred
        + CategoryInfo          : InvalidData: (:) [New-PSSession], ParameterBindi
       ngValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Power
       Shell.Commands.NewPSSessionCommand

    Хотя переменная $cn действительно содержит имена машин в домене. Здесь не компренде зачем .name, аргументы так задают в powershell? Если да, зачем он нужен в данном конкретном случае, без его использования, т.е. при подстановке просто переменной $cn:

    PS C:\Users\nokogerra> $session = New-PSSession -cn $cn -cred $cred

    выдается ошибка о том, что имя одного или нескольких компьютеров недопустимо, и в таком случае нужно использовать параметр "-ConnectionURI", или передавать не стринги, а uri-объекты.

    p.s. в $cn в таком виде передаются инфо о машинах:

    DistinguishedName  : CN=PWS022-STUD-00,CN=Computers,DC=domain,DC=local
    DNSHostName        : PWS022-STUD-00.domain.local
    Enabled            : True
    Name               : PWS022-STUD-00
    ObjectClass        : computer
    ObjectGUID         : 73487b07-b192-49d3-9dd7-51fcd943ec9b
    PSShowComputerName : {}
    SamAccountName     : PWS022-STUD-00$
    SID                : S-1-5-21-3388038277-1402929892-2474356782-2204
    UserPrincipalName  :
    WriteErrorStream   : {}

    так что при указании аргумента "name" должно быть передавать короткое доменное имя, я что-то делаю не так?

    10 июля 2013 г. 12:18
  • Тут по ходу ошибка. Должно выглядеть примерно так: $session = New-PSSession -computername $cn.name -cred $cred
    10 июля 2013 г. 12:23
  • параметр cn = computername в этом командлете, так что с параметром все верно,а вот почему ругается на аргумент и говорит что он нулевой, когда это не так - не понятно.

    p.s. причем как и в кмдлетах регистр в аргументе не имеет значение - реакция такая и с ".name", и с ".Name"


    10 июля 2013 г. 12:26
  • Скажите, а переменная $cn.Name возвращает список компьютеров?

    Можно еще попробовать запихать в переменную $cn данные из текстового файлика который у вас имеется: $cn=get-content путь_к файлу , а не обращаться к свойству Name.

    Посмотрите еще Get-help new-pssession - examples, там попроще варианты подключения рассмотрены.
    • Изменено SemenovA 10 июля 2013 г. 12:42 добавил
    10 июля 2013 г. 12:36
  • да, так сработало, но говорит что служба выключена, я не хотел пользоваться winrs для gpupdate, т.к. нужно было включать winRM на машинах, а теперь придется по-любому :D Нашел тут тему про включение winrm групповой политикой http://social.technet.microsoft.com/Forums/ru-RU/7c8fdd96-f03e-4663-86ec-cacd3fd3a7bd/-winrm-, может и отработает bat типо "winrm quickconfig /y", в любом случае завтра попробую, ибо 8 часов почти, котел совсем не соображает. Как попробую - отпишусь, пожалуйста оставайтесь в теме, Вы мне очень помогаете!

    p.s. $cn.Name действительно не отдает имена машин.

    Полный текст ошибки:

    PS C:\Users\nokogerra> echo $cn2
    pWS022-LAW-02
    nbastrykina
    PS C:\Users\nokogerra> $session = New-PSSession -computername $cn2 -cred $cred
    [nbastrykina] Не удалось подключиться к удаленному серверу. Сообщение об ошибке
    : Клиенту не удается подключиться к узлу назначения, указанному в запросе. Убед
    итесь, что служба на узле назначения работает и принимает запросы. Ознакомьтесь
     с журналами и документацией для определения запущенной на узле назначения служ
    бы WS-Management (чаще всего это IIS или WinRM). Если это служба WinRM, то для
    анализа состояния и настройки этой службы используйте на удаленном узле команду
     "winrm quickconfig". Дополнительные сведения см. в разделе справки, вызываемом
     командой about_Remote_Troubleshooting.
        + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:Re
       moteRunspace) [], PSRemotingTransportException
        + FullyQualifiedErrorId : PSSessionOpenFailed
    [pws022-law-02] Не удалось подключиться к удаленному серверу. Сообщение об ошиб
    ке: Клиенту WinRM не удается закончить операцию за указанное время. Проверьте п
    равильность имени компьютера, его наличие в сети, а также настройку исключения
    для службы удаленного управления Windows в брандмауэре. Дополнительные сведения
     см. в разделе справки, вызываемом командой about_Remote_Troubleshooting.
        + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:Re
       moteRunspace) [], PSRemotingTransportException
        + FullyQualifiedErrorId : PSSessionOpenFailed


    10 июля 2013 г. 12:44
  • Тогда до завтра) Можете еще поглядеть тут.


    • Изменено SemenovA 10 июля 2013 г. 12:55 добавил линк
    10 июля 2013 г. 12:50
  • Так. Настройка winrm через gpo удалась (enable в автолистенерах + фильтр *, также включение службы удаленного управления на автозапуск, правда судя по тестовой машине служба и так была на отложенном автозапуске), правда не сразу, после перезагрузки подумала несколько минут, но потом winrm e winrm/config/listener сказал что слушает всех *, а source="GPO", так что "я понял, не сразу, но понял" slowpoke.jpg.

    Далее делаем new-pssession, сохраняем в $session,

    PS C:\Windows\system32> $session=new-pssession -cn $cn2 -cred $cred
    PS C:\Windows\system32> $session

     Id Name            ComputerName    State         ConfigurationName    Availabi
                                                                               lity
     -- ----            ------------    -----         -----------------    --------
      1 Session1        nbastrykina     Opened        Microsoft.PowerShell ...lable

    собственно пробуем сделать gpupdate, а он мне раз такой ход конем:

    PS C:\Windows\system32> invoke-command -session $session -scriptblock {gpupdate
    /force}
    ?Ў-Rў<?-Ё? ЇR<ЁвЁЄЁ...



    ?Ў-Rў<?-Ё? ЇR<ЁвЁЄЁ ЇR<м§Rў в?<п § ў?аи?-R гбЇ?и-R.

    ?Ў-Rў<?-Ё? ЇR<ЁвЁЄЁ ¤<п ЄR┐Їмов?а  гбЇ?и-R § ў?аи?-R.

    Поискал по поводу кодировки в powershell, сменил язык для программ не поддерживающих юникод (стоял ру, поменял на енг), стало только хуже - для powershell ничего не изменилось, а в cmd появилась козябра, DC русский, ищу решение по смене кодировки.

    11 июля 2013 г. 4:04
  • Здравствуйте,

    Скажите, а gpupdate на клиентах отработал? Если да, то попробуйте сменить кодировку в окне powershell при помощи команды chcp.

    Например, chcp 1251.

    • Изменено SemenovA 11 июля 2013 г. 5:06 Поправил синтаксис
    11 июля 2013 г. 4:53
  • И чтобы не заморачиваться с текстовым файлом и иметь возможность выбирать машинки из нужного OU и с нужной ОС добавьте в скрипт:

    $OU = "OU=Workstations,DC=domain,DC=int"
    $c = (Get-ADComputer -SearchBase $OU -filt {OperatingSystem -like "Windows 7*"}).DNSHostname

    В итоге должно получиться что-то подобное:

    Import-Module ActiveDirectory
    $OU = "OU=Workstations,DC=domain,DC=int"
    $c = (Get-ADComputer -SearchBase $OU -filt {OperatingSystem -like "Windows 7*"}).DNSHostname
    $cred = get-Credential domain\admin
    $session = New-PSSession -cn $c -cred $cred
    icm -Session $session -ScriptBlock {gpupdate /force}
    $RemSession = Remove-PSSession -cn $c
    $RemSession


    • Изменено SemenovA 11 июля 2013 г. 6:50 орфография
    11 июля 2013 г. 6:25
  • еах, действительно ларчик просто открывался с 866 не контачит, с 1251 - работает, но при копировании из окна шелла сюда опять козябру вставляет :D а вот ивенты отображает корректно только с 866 (проверка gpupdate в ивентах, поиск события 1502)

    Вобщем работает, сейчас попробую проверить на всех машинах домена, только список нужно составить, может поковыряю почему $cn=get-adcomputer -filt*, $cn.name не выдает имена машин.

    Осталась одна непонятная вещь:

    1..5 | % {"refreshing GP $(Get-Date)"; gpupdate /force ; sleep 300} как это расшифровать?

    1...5 - я полагаю повторять 5 раз

    sleep 300 - интервал между итерациями

    а вот :% {"refreshing GP $(Get-Date)"...} что значит, что за переменная get-date, что за refreshing GP, нет указаний ни командлета icm, не сессий, ничего.

    11 июля 2013 г. 6:35
  • "refeshing GP..." - это просто текстовая строка куда подставляется текущее время и дата которое возвращает get-date. А %  - это сокращенное foreach. А выполняется, скорее всего в рамках уже открытых сессий и передается через -ScriptBlock.
    • Изменено SemenovA 11 июля 2013 г. 6:49 добавил
    11 июля 2013 г. 6:40
  • И чтобы не заморачиваться с текстовый файлом и иметь возможность выбирать машинки из нужного OU и с нужной ОС добавьте в скрипт:

    $OU = "OU=Workstations,DC=domain,DC=int"
    $c = (Get-ADComputer -SearchBase $OU -filt {OperatingSystem -like "Windows 7*"}).DNSHostname

    В итоге должно получиться что-то подобное:

    Import-Module ActiveDirectory
    $OU = "OU=Workstations,DC=domain,DC=int"
    $c = (Get-ADComputer -SearchBase $OU -filt {OperatingSystem -like "Windows 7*"}).DNSHostname
    $cred = get-Credential domain\admin
    $session = New-PSSession -cn $c -cred $cred
    icm -Session $session -ScriptBlock {gpupdate /force}
    $RemSession = Remove-PSSession -cn $c
    $RemSession

    Я правильно понимаю: $ou - все машины в контейнере Workstations в домене domain.int, $c - возьмет все машины из переменной $ou по wmi фильтру с осями win7 и выдаст имена днс. а зачем remove-pssession, они разве не отвалятся сами при закрытии окна шелла, темболее зачем помещать это в переменную $RemSession?

    ""refeshing GP..." - это просто текстовая строка куда подставляется текущее время и дата которое возвращает get-date. А %  - это сокращенное foreach."

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

    выполнить 1...5 раз | длявсех {выдасть строку "refreshing GP _текущее время_"; выполнить gpupdate; интервал 300сек}, а вот кто такие эти все, как догадается интерпретатор?

    p.s. какой-то неудобный форум :(

    p.s.s. $cn.name начал отдавать имена машин - мэджик какой-то
    11 июля 2013 г. 6:55
  • 1. Да, вы правы:  $OU - контейнер Workstation (взят для примера), Windows 7 - установленная ОС (то же для примера) и в итоге список машинок. Только версия ОС берется из свойств учетной записи компьютера в AD. 

    2.  Я просто не уверен, что отвалятся (не проверял). Вы опять правы - можно обойтись и без переменной))


    3. По поводу refresh... . Насколько я понял, эти команды подставляются в текущий скрипт, после -ScriptBlock, вместо {gpupdate /force}. Соответственно, все сессии уже установлены и Invoke-command тоже присутствует.  Но если честно, то я не понимаю зачем gpupdate вызывать столько раз.



    11 июля 2013 г. 7:00
  • Да, удобнее по $OU удобнее накатывать gpupdate, а не на весь домен разом.

    pssession отваливаются даже через некоторое время бездействия, минут 20 или около того

    по поводу refresh - вобщем то https://www.google.ru/search?q=mickeymouse+%D0%B4%D0%B0+%D0%B8+%D1%85%D1%83%D0%B9+%D1%81+%D0%BD%D0%B8%D0%BC&newwindow=1&safe=off&source=lnms&tbm=isch&sa=X&ei=RVveUbK0M6z44QSJlYGQAQ&ved=0CAcQ_AUoAQ&biw=1600&bih=775#newwindow=1&safe=off&tbm=isch&sa=1&q=%D0%B4%D0%B0+%D0%B8+%D1%85%D1%83%D0%B9+%D1%81+%D0%BD%D0%B8%D0%BC&oq=%D0%B4%D0%B0+%D0%B8+%D1%85%D1%83%D0%B9+%D1%81+%D0%BD%D0%B8%D0%BC&gs_l=img.3...29203.31045.0.31159.14.14.0.0.0.0.111.1098.12j1.13.0...0.0.0..1c.1.17.img.qNt4tuP8mdE&bav=on.2,or.r_cp.r_qf.&bvm=bv.48705608,d.bGE&fp=4a7da8d4cd67e059&biw=1600&bih=775&facrc=_&imgrc=-Sd4oCqqoWALTM%3A%3BQfJYatVlvQ5w8M%3Bhttp%253A%252F%252Fa1.tcdn.ru%252Fassets%252Fatt%252Fda%252Fa3%252F3448867_56748_5067027_3407632_0_0_3299608_0_0______________tlog_tlog.jpg%3Bhttp%253A%252F%252Fperry1.mmm-tasty.ru%252Fentries%252F5067027%3B400%3B368, просто интересно было, мне не требуется 5 раз обновлять через каждые 5 минут :D

    Спасибо, Вы очень помогли мне, ночью будут перезапущены машины, чтобы включился везде winrm, завтра буду пробовать работать массово с машинами.

    11 июля 2013 г. 7:27
  • Не за что))  Удачи Вам.
    11 июля 2013 г. 7:32
  • Решение исходной задчи безо всяких Powershell, чисто с использованием cmd.exe

    for /F %a IN (comps.txt) PsExec.exe \\%a gpupdate.exe /target:computer /force


    где comps.txt - список имен компьютеров по одному имени на строчку:

    ws022-temp-01

    ws022-temp-02

    и т.д.


    Слава России!

    11 июля 2013 г. 11:19
  • Чтобы массово работать, удобнее работать с сессиями живых машин, для этого достаточно не просто отобрать ПК по нужному фильтру (серверы, или...) а еще и проверить доступность машины- в случае, когда их много, получается быстрее.

    Import-Module ActiveDirectory
    $session= Get-ADComputer -Filter 'OperatingSystem -like "Windows 7*"' | select -ExpandProperty Name | New-Pssession
    if (test-connection -computername "$session" -quiet) {New- Pssession}
    $session
    Invoke-command $session stop-computer -force

    11 июля 2013 г. 11:21
    Отвечающий
  • c:\Users\Kagerro\Desktop>for /F %a IN (comps.txt) PsExec.exe \\%a gpupdate.exe /
    target:computer /force
    PsExec.exe was unexpected at this time.

    comps.txt лежит в рабочем каталоге.

    12 июля 2013 г. 2:04
  • Я вообще рано обрадовался, с winrm проблемы всплыли, с фильтром * работает нормально, попытался задать фильтр с определенными адресами, с которых слушать запросы : 10.0.2.42, 10.0.2.2, 10.0.2.6, конфиг winrm отображает как есть:

    winrm get winrm/config 

    .....

    IPv4Filter = 10.0.2.42, 10.0.2.2, 10.0.2.6 [Source="GPO"]

    .......

    в winrm e winrm/config/listener пишет:

    ListeningOn = null, соответственно не работает (winrs -r:computer gpupdate -

    Winrs error:The client cannot connect to the destination specified in the reques
    t. Verify that the service on the destination is running and is accepting reques
    ts. Consult the logs and documentation for the WS-Management service running on
    the destination, most commonly IIS or WinRM. If the destination is the WinRM ser
    vice, run the following command on the destination to analyze and configure the
    WinRM service: "winrm quickconfig".)

    C фильтром *, winrm e winrm/config/listener:

    ListeningOn = 10.0.2.232, 127.0.0.1, почему не нравятся фильтры?

    update: получается что настройка листенеров winrm понимает только диапазоны адресов, а не единичные,но при фильтрах 10.0.2.42-10.0.2.43, 10.0.2.2-10.0.2.6 тоже не работает.

    Кстати утилита specops gpupdate работает даже при ListeningOn=null, что странно.

    12 июля 2013 г. 2:47
  • Здравствуйте,

    Могу ошибаться, но в случае фильтром речь идет об IP адресах локального компьютера, т.е. на каких интерфейсах будет работать прослушиватель. Могу предположить, что команду winrm e winrm/config/listener вы запустили на компе с IP 10.0.2.232 и у которого один сетевой интерфейс.

    Если вы хотите обезопасить себя, то для этой цели лучше использовать файерволл - разрешить принимать запросы на порт 5985 только с определенных IP адресов.

    12 июля 2013 г. 6:33
  • Чтобы массово работать, удобнее работать с сессиями живых машин, для этого достаточно не просто отобрать ПК по нужному фильтру (серверы, или...) а еще и проверить доступность машины- в случае, когда их много, получается быстрее.

    Import-Module ActiveDirectory
    $session= Get-ADComputer -Filter 'OperatingSystem -like "Windows 7*"' | select -ExpandProperty Name | New-Pssession
    if (test-connection -computername "$session" -quiet) {New- Pssession}
    $session
    Invoke-command $session stop-computer -force

    здесь нужен кэп, я писал что не компренде по posh

    Get-ADComputer -Filter 'OperatingSystem -like "Windows 7*"' отбираем машины из AD и осями win7, select -ExpandProperty Name

    прочитал про select -expandproperty <propertyname>, но не совсем понял чем отличается от того же $cn.Name, так же не понятно условие if (test-connection -computername "$session" -quiet)  посылает icmp запросы к компьютерам в переменной $session (ведь там пока имена машин с win7), дальше что? если ответы получаем или не получаем, условие же не закончено? 

    Invoke-command $session stop-computer -force вообще не понял зачем делать шатдаун.

    12 июля 2013 г. 7:33
  • Здравствуйте,

    Могу ошибаться, но в случае фильтром речь идет об IP адресах локального компьютера, т.е. на каких интерфейсах будет работать прослушиватель. Могу предположить, что команду winrm e winrm/config/listener вы запустили на компе с IP 10.0.2.232 и у которого один сетевой интерфейс.

    Если вы хотите обезопасить себя, то для этой цели лучше использовать файерволл - разрешить принимать запросы на порт 5985 только с определенных IP адресов.

    Я не понимаю почему если ограничить эти адреса в политике, то ListeningOn=null.

    update: "понял, не сразу, но понял", фильтр задает лишь адреса самой машины (машин) на которых будут слушаться запросы а не диапазон адресов откуда они могут приходить. получается ограничить адреса откуда они могут приходить можно только файрволом?

    12 июля 2013 г. 7:35
  • Да, ограничивается файерволом.
    12 июля 2013 г. 7:48
  • Хм, winrs ведь теже порты использует? сделал правило в gpo:

    http://imageup.ru/img206/1404309/1.png.html

    с ограничением входящих подключений на 5985, 5986 только с определенных комптьютеров, однако не ограничивает ничего.

    12 июля 2013 г. 9:04
  • Насколько я понимаю Вам достаточно только разрешить нужные порты, Безопасность: требовать проверку подлинности и указать авторизованные компьютеры.

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


    • Изменено SemenovA 12 июля 2013 г. 12:06 Переписал
    12 июля 2013 г. 11:44
  • Хм, точно, при деплое машин в шаблоне выключил брандмауэр совсем (но не службу) из-за заморочек с разрешением icmp и прочим, получается если брандмауэр выключен, и создается ограничивающее правило на входящее подключение - в любом случае открыто все всем. В таком случае нужно включать брандмауэры на всех машинах через GPO и настраивать их для входящих подключений, есть какой-то общий шаблон (без учета специализированного разнящегося ПО вроде бэкап агентов и прочего) для открытия icmp, rdp и прочего (может для службы времени тоже нужно правило о_О)?
    15 июля 2013 г. 5:12