Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows

Модерирует : KLASS, IFkO

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Открыть новую тему     Написать ответ в эту тему

KLASS



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Старые и смежные темы: по CMD и в Программах | по PowerShell | В помощь системному администратору | Прикладное программирование

PowerShell
Версии | Ассоциация и подпись сценариев
Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
Прочее
Расширение возможностей
Функции
Write-Color
Output-DebugString
Провайдеры
Готовые скрипты
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?
Книги в PDF
Cheat Sheets
 

Cmd
Для перекодирования кириллицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы
 
Готовые решения и частые вопросы
 
Описания работы команд и символов участниками темы:
setlocal enabledelayedexpansion и переменные окружения
символы & и && в командной строке
Переменная %0
 
Полезные ссылки и утилиты

WSH (VBScript, JScript)
Программирование "удобняшек" на VBScript

Примечания:
• Большие куски кода заключайте в тэг [ more ]
• Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте код без пробелов иначе сценарий может работать неправильно. Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
• Сторонние консольные утилиты можно использовать только в виде готового решения и только в рамках сценариев. Никаких обсуждений и обучений работе с утилитами не предусмотрено и прямо запрещено правилами топика.
Шапка и около-темные вопросы |

Всего записей: 11062 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS 2, 08:24 19-06-2021
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21

Цитата:
Для уточнения:  
$LoginUserName = (Get-CimInstance -ClassName Win32_ComputerSystem).UserName | Split-Path -leaf  
 
YuS_2 win10 x64 LTSB и на Win7 x64 — при переименовании учётки возвращает имя совпадающее с именем папки?  
westlife 1809 LTSC — при переименовании учётки возвращает имя НЕсовпадающее с именем папки?

Да, в обоих случаях...
Тут пришла в голову мысль, что как вариант, вместо реестра и dotnet-а, можно дернуть WMI:

Код:
 
# В любом случае, независимо от того, какое имя получаем(первичное или крайнее, переименованное),  
# залогинившегося пользователь вытаскиваем так:
$loginuser = (gcim win32_computersystem|select username).username|split-path -leaf
 
#Формируем объект, для требующегося пользователя и связываем с SID-ом:
$user = gcim win32_useraccount|
?{$_.disabled -eq $false -and ($_.name -eq $loginuser -or $_.fullname -eq $loginuser)}|
select name,fullname,sid
 
# Получаем профайл с SID-ом
$userprofile = gcim win32_userprofile|
?{$_.special -eq $false -and $_.loaded -eq $true -and $_.sid -eq $user.sid}|select sid,localpath
 
Добавляем путь к профайлу в объект с SID-ом, через соответствие того самого SID-а:
$user|add-member -mem noteproperty -name 'LocalPath' -value $($userprofile.localpath)
 
Используем в скриптах пользователя вошедшего в систему, а не пользователя запустившего скрипт:
$user|fl *
 

Всё это легко оформляется функцией и вперед...
Чтобы использовать в powershell -v 2.0, надо заменить gcim на gwmi

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 21:47 20-03-2019 | Исправлено: YuS_2, 21:51 20-03-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
westlife

Цитата:
Но самое важное помнить про параметры для HKCU

Может оттуда ("HKUS:\$LoginUserSID") и USERPROFILE доставать..
Get-LoginUserPrfileInfo.ps1
 
PhoenixUA
Тоже вариант, быстро да//нет соорудить
 
Добавлено:
И всё это, что бы в одном скрипте/одним запуском от админа, типа от лени
Применять по предписанию дохтура

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 22:11 20-03-2019 | Исправлено: iNNOKENTIY21, 22:37 20-03-2019
westlife



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2

Цитата:
Тут пришла в голову мысль, что как вариант, вместо реестра и dotnet-а, можно дернуть WMI:  

Можно и так, только вот опять в WMI на 1809 пункт fullname пустой у всех ааккаунтов
 
iNNOKENTIY21

Цитата:
Может оттуда ("HKUS:\$LoginUserSID") и USERPROFILE доставать..  

Можно и так. Если необходима работа скрипта с HKCU в чужом окружении. Я тоже думал делать провайдера или заменять стандартного, но так же надо учесть и применение типа registry::
забил пробовать и на это все в своем случае, решил просто запретить такое использование, нет такой необходимости, а для просто так слишком много нужно изменять  и адаптировать =)

Всего записей: 1390 | Зарегистр. 12-12-2006 | Отправлено: 22:39 20-03-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
westlife
А чего VS Code не пользуетесь, не подошел?

Может косячит где, а я не знаю?

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 23:30 20-03-2019
westlife



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21

Цитата:
А чего VS Code не пользуетесь, не подошел?  

Подробнее

Всего записей: 1390 | Зарегистр. 12-12-2006 | Отправлено: 11:01 21-03-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
westlife

Цитата:
только вот опять в WMI на 1809 пункт fullname пустой у всех ааккаунтов

скажу даже больше, он может быть пустым и не на 1809
Ну, кроме переименованных аккаунтов, там он заполняется...
В любом случае, есть ведь два параметра: Name и Fullname и один из них должен быть заполнен всегда, это Name. Кроме того, в этом варианте есть привязка к SID - принцип универсальности. Объект $user можно использовать в скриптах так, как душе угодно... главное, что мы получаем пользователя, осуществившего вход в систему, а не пользователя запустившего скрипт...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 11:02 21-03-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Какие и как создавать объекты или как в xml сохранять, что бы получить желаемый XML например из подобного объекта
System.XML.XMLDocument и методы create это я могу.

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 20:56 21-03-2019 | Исправлено: iNNOKENTIY21, 20:57 21-03-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Есть две техники для применения там, где они уместны:  
1)  
[xml]$Workers =  
или  

Код:
 
$intendedXML = [xml]
@"
<?xml version="1.0" encoding="utf-8"?>  
<Workers>  
  <Worker>  
    <Name>Ivan</Name>  
    <Surname>Drago</Surname>  
  </Worker>  
  <Worker>  
    <Name>Hans</Name>  
    <Surname>Lundgren</Surname>  
  </Worker>  
</Workers>"
"@
 

 
Объект в памяти оказывается доступен для изменений через переменную, но может оказаться проще сгенерить новый
 
2) ... | ConvertTo-Xml  

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 21:36 21-03-2019 | Исправлено: LevT, 21:40 21-03-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT

Цитата:
Есть две техники для применения там, где они уместны:  1) .. 2) ..  

И как это в коде выглядит?

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 22:37 21-03-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
ща в баню иду выпаривать подскочившее давление
Вернусь когда или наутро когда высплюсь - отвечу.
Если ты раньше сам "палочкой" не наковыряешь  

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 22:41 21-03-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21

Цитата:
И как это в коде выглядит?

"Жди меня и я вернусь... может быть" - примерно так
 

Цитата:
Какие и как создавать объекты или как в xml сохранять, что бы получить желаемый XML например из подобного объекта  

Всё дело в том, на каком этапе необходимо создавать xml...
Если объекты уже существуют, то простым конвертированием, скорее всего не обойтись.  
Можно, конечно, попробовать так:

Код:
($Workers|ConvertTo-Xml).save('out.xml')

или так:

Код:
$workers|export-clixml out1.xml

но, результат, вряд ли, понравится... хотя почему нет, всё ведь зависит от целей.
Но если, действительно не понравится, то придется формировать сначала шаблон xml, а потом уже его заполнять (инструменты для этого есть), выдергивая значения параметров объекта(ов).

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 09:26 22-03-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Добавлю ещё, что в галерее есть минимум пара инструментов от известных мастеров: модули Xml и XmlEx
Это если нужно использовать в серьезных проектах без изобретения велосипедов.
 
В их исходниках на гитахбе можно подглядеть результат того пути, на который ты возможно решил вступить вчера.
Потому что произвольный XML в голом повершел создаётся через дотнет, причём через очень древний дотнет, ещё не знавший Linq.
Делается это процедурно (пошагово), выглядит невыносимо и лечится только подобным модулем.

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 10:42 22-03-2019 | Исправлено: LevT, 11:07 22-03-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
Всё также, предлагаю не вдаваться в подробности мыслерастекания by LevT
В общем, не так уж невыносим "черт", как его малюет LevT...
 
Если объекты жестко заданы, то можно поступить достаточно просто:

Код:
function new-xml {
    begin {
        $settings = new-object system.xml.xmlwritersettings
        $settings.indent = $true
        $settings.indentchars = "`t"
        $xml = [xml.xmlwriter]::create($doc, $settings)
        $xml.writestartdocument()
        $xml.writestartelement($root)
    }
    process {
        $xml.writestartelement($obj1)
        $xml.writeelementstring($elem1,$_.name)
        $xml.writeelementstring($elem2,$_.surname)
        $xml.writeendelement()
    }
    end {
        $xml.writeendelement()  
        $xml.writeenddocument()
        $xml.flush()
        $xml.close()
    }
}
 
# Жестко заданный формат объектов
$workers = @(
    [PSCustomObject]@{
        Name    = "Ivan"
        Surname = "Drago"
    },
    [PSCustomObject]@{
        Name    = "Hans"
        Surname = "Lundgren"
    }
)
 
# Описание параметров содержимого xml
$doc = 'doc.xml'
$root,$obj1,$elem1,$elem2 = 'Workers','Worker','Name','Surname'
 
# Собственно, вызов функции
$workers|new-xml

И не надо никаких модулей-шмодулей, мастеров-подмастерий, гуру-сектантов и прочих регалий...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 12:21 22-03-2019 | Исправлено: YuS_2, 12:30 22-03-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Ага, и каждый раз такое переписывать под "жестко заданный формат".
Который очевидно дан лишь для примера.
 
Можно еще переписать более обще, под чуть менее жестко заданную структуру объектов.
Закончатся эти переписывания очередным изобретением велосипеда, варианты которых уже доступны в галерее.
 
Плюс от изобретения велосипедов - наращивание "мастерской мышцЫ".
Если в этом именно цель, то её можно нарастить иначе: изучением кода от мастеров.
Но в "продакшене" приоритетно использование годного рутинного кода, а не обучение его писательству.

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 13:03 22-03-2019 | Исправлено: LevT, 13:35 22-03-2019
YuS_2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT

Цитата:
Ага, и каждый раз такое переписывать под "жестко заданный формат".

Хочешь - переписывай, а хочешь - напиши что-то более универсальное, powershell это позволяет. Многое зависит от задачи...
 

Цитата:
Можно еще переписать более обще, под чуть менее жестко заданную структуру объектов.

Вот именно. И ничем это не закончится, кроме самого факта расширения кругозора и опыта. Что ценится больше, чем чьи-то сектанские "черные ящики", которые ты рекомендуешь устанавливать по поводу и без повода...
 

Цитата:
Но в "продакшене"

Твоего продакшена, нет на других компьютерах, как класса нет, а распространять скрипт с условием:  
"установи вот этот модуль, потом вот этот, посмотри паручасовое видео от гуру-сектанта, затем установи ещё пару модулей, вызови шамана с двумя бубнами спляши с ним парный танец, достигни просветления и экстаза, и только после этого запусти скрипт!"  
- кому нужен такой скрипт? Я даже точно знаю, куда тебя отправят с такими рекомендациями...

Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 14:07 22-03-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2

Цитата:
распространять скрипт с условием:  
"установи вот этот модуль, потом вот этот, посмотри паручасовое видео от гуру-сектанта

 
Вообще-то ты описал обычный процесс разработки, разве что видео смотреть необязательно: можно почитать документацию и примеры.  
Да, увы, только по английски (пока не сыскались маньяки-переводчики)
 
У любого вменяемого (то есть не являющегося write-only) сколь-нибудь сложного кода есть зависимости, притом разной природы: некоторые нужны только на компьютере разработчика.
Зависимости эти разрешаются с помощью модулей, сохранённых в репозитории.
Поскольку зависимости в свою очередь имеют зависимости, человечеством изобретены пакетные менеджеры, которые берут на себя рутинную работу по установке зависимостей.
 
Повершельный пакетный менеджер идет в составе PS v5.1, в десятке он уже установлен (на семёрки-восьмёрки ставится с обновлением версии повершел), разве что при первом запуске просит подтянуть nuget - крохотный движок, который понимает формат пакетов.
 
Ваш КО
 
 
Добавлено:

Цитата:
Твоего продакшена, нет на других компьютерах

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

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 14:26 22-03-2019 | Исправлено: LevT, 14:43 22-03-2019
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
YuS_2

Цитата:
нет на других компьютерах

Я бы добавил, на другом компьютере ещё может не быть как нужной версии PS, так и нужной версии dotnet.

----------
Разум когда-нибудь победит

Всего записей: 3179 | Зарегистр. 09-02-2003 | Отправлено: 14:42 22-03-2019
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
У меня выдаёт в файл:

Цитата:
($Workers|ConvertTo-Xml).save('out.xml')  

out.xml

Цитата:
$workers|export-clixml out1.xml  

out1.xm

Цитата:
function new-xml

doc.xml
 
Формат объекта как раз не жестко задан, он в моей власти, а вот что должно быть в итоге в xml жестко задано.
Я надеялся на сериализацию в xml и управление ею, с помощью атрибутов, но на пошике

Всего записей: 3504 | Зарегистр. 16-08-2012 | Отправлено: 14:43 22-03-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
iNNOKENTIY21
 
Тогда  
1) бери не [PSCustomObject], а [PSObject]
2) Export-Clixml
3) Изучай xslt и пиши трансформацию  
 
Есть вариант вместо этого научиться использовать готовые модули из галереи, Xml или XmlEx.
Я вижу единственное преимущество первого подхода: умение xslt применимо не только в повершел.
 

Цитата:
Я надеялся на сериализацию в xml и управление ею, с помощью атрибутов, но на пошике  

А вот это уже есть в упомянутых модулях, от людей собаку съевших на подобных задачах.

Всего записей: 17126 | Зарегистр. 14-10-2001 | Отправлено: 14:46 22-03-2019 | Исправлено: LevT, 15:19 22-03-2019
NIKZZZZ



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LevT

Цитата:
на семёрки-восьмёрки ставится с обновлением версии повершел

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

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:51 22-03-2019
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Сценарии для Windows


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru