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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

KLASS



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

PowerShell
Версии | Ассоциация и подпись сценариев
Сценарий для ассоциации файлов PowerShell и запуска неподписанных скриптов.
 
Прочее
  • Если используете "белый список" в брандмауэре Windows, то для работы сценариев в сети необходимо создать 2 исходящих правила для svchost.exe и PowerShell.exe.
  • В отличие от батников, кодировка скриптов на PowerShell должна быть 1251 (ANSI). Начиная с версии PowerShell Core 6.0, кодировка по умолчанию UTF8NoBOM.
Расширение возможностей
Функции
Write-Color
Output-DebugString
Провайдеры
Готовые скрипты
Ошибки и предупреждения в журнале событий по электронной почте (в4.0)
Преобразование алиасов в скриптах к полным командам.
Получение детализированной информации из файлов.
Скачивание файлов по списку из файла .csv, ведение лога
Компиляция страниц html сохранённых из браузера в chm
Скрипт модифицированного вывода get-winevent, с добавлением доп. данных из событий, т.е. из узлов Data
Скрипт для получения списка имён и размеров всех альтернативных потоков, т.е. ADS файлов и каталогов.
 
Полезные ссылки | Будет ли репозиторий PowerShell на ru-board?

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

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

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

Всего записей: 7786 | Зарегистр. 12-10-2001 | Отправлено: 13:40 17-02-2018 | Исправлено: YuS_2, 19:47 12-03-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
westlife
 
Я не могу понять, зачем городить лишние ручные циклы по дискам и разделам.
Они уже есть внутри реализаций Get-Disk и Get-Partition  

Всего записей: 11418 | Зарегистр. 14-10-2001 | Отправлено: 15:11 11-02-2019
farag



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
westlife, LevT
Спасибо за наводки!
Нравится такой вариант:

Код:
 
Get-Partition | Where-Object {$_.IsBoot -eq $false} | Get-Volume | Where-Object {$_.DriveLetter -ne $null}
 

Но при в ставленном USB-диске также показывает и его. Как с без Get-Disk завернуть проверку на

Код:
 
$_.BusType -ne "USB"
 

Всего записей: 729 | Зарегистр. 27-07-2009 | Отправлено: 15:18 11-02-2019
westlife



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

Цитата:
Я не могу понять, зачем городить лишние ручные циклы по дискам и разделам.
Они уже есть внутри реализаций Get-Disk и Get-Partition

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

Всего записей: 641 | Зарегистр. 12-12-2006 | Отправлено: 15:19 11-02-2019
LevT



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

Цитата:
Как с без Get-Disk завернуть проверку на

 
Может статься, что и никак.
"Сюрприз" с BusType USB  - лишь самый мелкий сюрприз из ситуаций, для которых приспособлен модуль Storage
 
 
Добавлено:
 
Тебе шашечки или ехать?
Для того, чтобы содержимое тома-помойки было смонтировано по заданному пути, можно полагаться на
 
1) автоматическое назначение буквы.  С недостатками ты уже столкнулся, иначе и вопросов не задавал бы.
 
2) ручное/скриптом назначение буквы согласно метке тома
Или как вариант колхоз с файловыми метками, популярными в иных кругах из-за ограничений cmd
 
3) автоматическое монтирование по известному пути.
Один раз примонтировать содержимое в папку файловой системы загрузочного раздела винды - и папка останется NTFS-ссылкой, ведущей в нужное место.
Это делается через менеджер дисков или Add-PartitionAccessPath

Всего записей: 11418 | Зарегистр. 14-10-2001 | Отправлено: 15:24 11-02-2019 | Исправлено: LevT, 16:16 11-02-2019
westlife



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

Цитата:
Но при в ставленном USB-диске также показывает и его

Этот вариант показывает все разделы в системе с буквами, кроме системного. У меня 4 отображает.

Всего записей: 641 | Зарегистр. 12-12-2006 | Отправлено: 15:31 11-02-2019
YuS_2



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

Цитата:
Но при в ставленном USB-диске также показывает и его.

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

Код:
get-disk|? isboot|get-partition |?{$_.isboot -ne $true -and [int][char]$_.driveletter -ne 0}

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

Всего записей: 2350 | Зарегистр. 03-02-2009 | Отправлено: 18:19 11-02-2019 | Исправлено: YuS_2, 12:17 12-02-2019
iNNOKENTIY21



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Условия флешмоба я не особо понял но поучаствую:

Код:
Get-PhysicalDisk | Get-Disk | ? BootFromDisk -EQ $false | ? BusType -EQ 'SATA' | Get-Partition | ? IsHidden -EQ $false | ? Type -EQ 'Basic' | Get-Volume


Всего записей: 1444 | Зарегистр. 16-08-2012 | Отправлено: 20:23 11-02-2019
farag



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

Цитата:
поучаствую

Спасибо, проверю )

Цитата:
Условия флешмоба я не особо понял

Грех смеяться над больными!
 

Всего записей: 729 | Зарегистр. 27-07-2009 | Отправлено: 22:21 11-02-2019
YuS_2



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

Цитата:
? BusType -EQ 'SATA'

- Это не лучший вариант...  
Например, у меня:

Код:
BusType               : ATA

А этого параметра:

Цитата:
? Type -EQ 'Basic'

в принципе нет.
 
А в целом, выбор идет сразу незагрузочного диска

Цитата:
? BootFromDisk -EQ $false

поэтому, тот самый:
 11-02-2019

Цитата:
диск один и разбит на два логических, где C — загрузочный, а D — для хранения файлов.

который был нужен, найден не будет...

Всего записей: 2350 | Зарегистр. 03-02-2009 | Отправлено: 22:36 11-02-2019
dragovich01

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
имеется скрипт для вычисления имени компьютера по имени пользователя и даже работает))
только выполняется минут 7-10, хотелось бы ускорить это дело. В интернете нашел подсказки что можно распараллелить цикл, пробовал и так и сяк пока не получается, подскажите как можно это сделать.
 
сам скрипт
Подробнее...

Всего записей: 104 | Зарегистр. 03-09-2014 | Отправлено: 06:45 12-02-2019
farag



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dragovich01
Я, конечно, не "хакер", но, по-моему, быстрее будет, если использовать CIM вместо WMI.

Всего записей: 729 | Зарегистр. 27-07-2009 | Отправлено: 08:36 12-02-2019
dragovich01

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
пожалуйста поподробней можно?

Всего записей: 104 | Зарегистр. 03-09-2014 | Отправлено: 08:37 12-02-2019
farag



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

Код:
 
$comp = Get-ADComputer -Filter * | Where-Object {$_.Enabled -eq $true} | Select-Object Name | Sort-Object Name
Foreach ($pc in $comp)
{
    IF (Test-Connection -ComputerName $pc.Name -Count 1 -Quiet)
    {
        $CIMSession = New-CimSession -ComputerName $RemoteComputer
        Get-CimInstance Win32_ComputerSystem -CimSession $CIMSession -Property Username, Name | Out-File -Append "C:\Temp\test.txt"
    }
}
Select-String "User1" C:\Temp\test.txt
 

Всего записей: 729 | Зарегистр. 27-07-2009 | Отправлено: 09:08 12-02-2019
dragovich01

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
farag
вместо $RemoteComputer в моем случае нужно подставить $pc.Name?

Всего записей: 104 | Зарегистр. 03-09-2014 | Отправлено: 09:21 12-02-2019
LevT



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dragovich01
Даже без распараллеливания сначала уберите фуфлокод
 

Код:
 
$Computer = Get-ADComputer -Filter * | Where-Object { $_.enabled -eq $true }
$Computer.name | Get-CimInstance win32_computersystem -ea SilentlyContinue | Where Username -match User1
 

Всего записей: 11418 | Зарегистр. 14-10-2001 | Отправлено: 09:50 12-02-2019
farag



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возвращаясь к моей idee fixe...
Какой-то монстр вышел. Можно ли сделать лучше?

Код:
 
param(
    [Parameter(Mandatory = $true)]
    [string]$drive
)
$drive = $drive + ':'
Function KnownFolderPath
{
    Param (
        [Parameter(Mandatory = $true)]
        [ValidateSet('Documents', 'Downloads')]
        [string]$KnownFolder,
 
        [Parameter(Mandatory = $true)]
        [string]$Path
    )
    $KnownFolders = @{
    'Documents' = @('FDD39AD0-238F-46AF-ADB4-6C85480369C7','F42EE2D3-909F-4907-8871-4C22FC0BF756');
    'Downloads' = @('374DE290-123F-4565-9164-39C4925E467B','7D83EE9B-2244-4E70-B1F5-5393042AF1E4');
    }
    $Type = ([System.Management.Automation.PSTypeName]'KnownFolders').Type
    $Signature = @'
    [DllImport("shell32.dll")]
    public extern static int SHSetKnownFolderPath(ref Guid folderId, uint flags, IntPtr token, [MarshalAs(UnmanagedType.LPWStr)] string path);
'@
    $Type = Add-Type -MemberDefinition $Signature -Name 'KnownFolders' -Namespace 'SHSetKnownFolderPath' -PassThru
    # return $Type::SHSetKnownFolderPath([ref]$KnownFolders[$KnownFolder], 0, 0, $Path)
    ForEach ($guid in $KnownFolders[$KnownFolder])
    {
        $Type::SHSetKnownFolderPath([ref]$guid, 0, 0, $Path)
    }
    Attrib +r $Path
}
$Downloads = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{374DE290-123F-4565-9164-39C4925E467B}"
IF ($Downloads -ne "$drive\Загрузки")
{
    IF (!(Test-Path -Path $drive\Загрузки))
    {
        New-Item -Path $drive\Загрузки -Type Directory -Force
    }
    KnownFolderPath -KnownFolder Downloads -Path "$drive\Загрузки"
    New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{7D83EE9B-2244-4E70-B1F5-5393042AF1E4}" -Type ExpandString -Value "$drive\Загрузки" -Force
}
$Documents = Get-ItemPropertyValue -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name Personal
IF ($Documents -ne "$drive\Документы")
{
    IF (!(Test-Path -Path $drive\Документы))
    {
        New-Item -Path $drive\Документы -Type Directory -Force
    }
    KnownFolderPath -KnownFolder Documents -Path "$drive\Документы"
    New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" -Name "{F42EE2D3-909F-4907-8871-4C22FC0BF756}" -Type ExpandString -Value "$drive\Документы" -Force
}
 

 
Добавлено:
dragovich01
Лучше послушать более опытных завсегдатаев на предмет, что исправить. Я лишь посоветовал отказаться от WMI, так как это был удел PowerShell 2.0.

Всего записей: 729 | Зарегистр. 27-07-2009 | Отправлено: 10:11 12-02-2019 | Исправлено: farag, 10:20 12-02-2019
YuS_2



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

Цитата:
Возвращаясь к моей idee fixe...

Что за идея?

Всего записей: 2350 | Зарегистр. 03-02-2009 | Отправлено: 11:23 12-02-2019
farag



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
http://forum.ru-board.com/topic.cgi?forum=62&topic=30859&start=1160#11
 
Не смог "разработать" метод вычленения нужной буквы у дисков при общем условии, чтобы потом взять букву и создать на нем папки Загрузки и Документы.

Всего записей: 729 | Зарегистр. 27-07-2009 | Отправлено: 11:26 12-02-2019
YuS_2



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

Цитата:
метод вычленения нужной буквы у дисков при общем условии

А:
 11-02-2019
не?

Всего записей: 2350 | Зарегистр. 03-02-2009 | Отправлено: 11:51 12-02-2019
farag



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Все работает ровно до того, когда имеется ПК с 1 диском, разбитым на 2.

Всего записей: 729 | Зарегистр. 27-07-2009 | Отправлено: 12:35 12-02-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

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

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2018

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru