Задать вопрос
Ответы пользователя по тегу PowerShell
  • Как решить проблему с выводом значений из реестра через Invoke-Command?

    @MaxKozlov Куратор тега PowerShell
    Проще один раз всё загнать в один вызов.
    Так и работать будет в разы быстрее и запустить можно одновременно на несколько компов, только в вывод надо имя компа включить

    invoke-command -comp $comp {
      # а здесь все красоты
      # причём циклом
      $source @(
        @{ key name= '''; valuename=''},
        @{ key name= '''; valuename=''}
      )
      foreach ($src in $source) {
        get-itemproperty -path $src.keyname | select -expandproperty $src.valuename
      }
    }

    test опустил...
    Проблема у вас в select-object

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

    Для этого в моём варианте используется параметр ExpandProperty, который превращает объект в строку
    Ответ написан
    1 комментарий
  • Скрипт PS скачивания и установки BGInfo, упростить if(Если)?

    @MaxKozlov Куратор тега PowerShell
    Так вы хотите таки чтобы не скачивался по новой или вам всё равно ?

    Скачивать можно в $env:temp, тогда проверять не придётся.

    Папку для распаковки создавать с ключом -Force тогда не будет ругаться на её наличие

    Если качать не хочется, сразу проверять существование файла, а не папки

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

    $bits = (Get-WmiObject win32_operatingsystem).OSArchitecture -replace '\D+'

    и потом прямо в имя подставлять через if или из хеша, например, как нравится
    $filename = "C:\Admins\Add\BGInfo\Bginfo" + (if ($bits -eq '64) { '64' } else { '' } ) + ".exe"
    $filename = "C:\Admins\Add\BGInfo\Bginfo" + @{'64'=64; '32'=32 }[$bits] + ".exe"
    
    if (test-path $filename) .....


    А можно ещё качать со своей сети, где держать сразу два архива для разных битностей с соответствующим файлом внутри и с названием bginfo32/bginfo64 чтобы ещё проще было
    Ещё можно битность определять по наличию переменных окружения, а не через wmi-так быстрее будет
    Ответ написан
    Комментировать
  • Как безопасно подключаться с контроллера домена к рабочим станциям через Powershell?

    @MaxKozlov Куратор тега PowerShell
    Если под локальным админом вы имеете ввиду локального юзера, который создан именно а компе, а не в домене, попробуйте использовать имя пользователя без домена - "admin" и авторизацию negotiate, а не kerberos, по умолчанию
    Ответ написан
    Комментировать
  • Как в PowerShell удалить ПО пользователя?

    @MaxKozlov Куратор тега PowerShell
    Ну найдите в том что вы получили содержимое ключа UninstallString для каждой программы и запустите
    Естественно, это ключ надо включить в Select-Object
    Ответ написан
    Комментировать
  • Как осуществить поиск и копирование блока строк по ключевому слову в *.txt?

    @MaxKozlov Куратор тега PowerShell
    если количество строк в каждом блоке постоянное, на powershell для парсинга подойдёт

    Select-String с параметром -Context

    Если нет - цикл вручную
    Ответ написан
    Комментировать
  • Как пакетно разделять видео на сегменты по 10 минут с помощью ffmpeg?

    @MaxKozlov Куратор тега PowerShell
    help почитать внимательнее :)
    ну или погуглить
    кучу опций упустили
    https://unix.stackexchange.com/questions/94168/any...

    а это "ls | Where { $_.Extension -eq ".mp4" }" можно сократить до "ls *.mp4"
    Ответ написан
  • Как загрузить blob через powershell?

    @MaxKozlov Куратор тега PowerShell
    команда выполняется на сервере, значит файл должен быть доступен на сервере. в шару можно положить
    Ответ написан
  • Копирование атрибутов файлов(даты создания, изминения) из оригинала в копию?

    @MaxKozlov Куратор тега PowerShell
    Скопировать дату просто
    $item2.LastWriteTime = $item1.LastWriteTime

    то же самое с CreationTime и LastAccessTime

    А вот сопоставление $item1 и $item2 - это отдельная задача
    Можно в простейшем варианте (без подпапок) создать hashtable по ключу, в качестве ключа - имя файла
    типа
    $path1 = 'D:\1'
    $items = %{}
    Get-ChildItem -Path $path1 | Foreach-Object { $items[$_.basename] = $_ }
    $path2 = 'D:\2'
    Get-ChildItem -Path $path2 | Foreach-Object {
        if ($items.ContainsKey($_.basename)) {
           $_.LastWriteTime = $items[$_.basename].LastWriteTime
        }
    }
    Ответ написан
    Комментировать
  • Как узнать фио удаленно по имени ПК?

    @MaxKozlov Куратор тега PowerShell
    ....расчехляю хрустальный шар....

    Если предположить что тэг Active Directory не просто так, то можно через
    (Get-CimInstance -ComputerName comptername -Class Win32_ComputerSystem).Username
    Узнать логин текущего пользователя

    А потом по логину с помощью Get-ADUser login узнать уже другую необходимую инфу
    Ответ написан
    2 комментария
  • Как установить PowerShell на Windows 7?

    @MaxKozlov Куратор тега PowerShell
    5.1, насколько я помню, действительно ставится только поверх 4
    Плюс ему надо Net 4.5 минимум

    то есть ставите net 4.5 и выше, потом пробуете 5.1
    если не прокатило, сначала ps4. потом её уже до 5.1 обновляете
    Ответ написан
  • Как правильно вставить данные в таблицу SQL из Powershell?

    @MaxKozlov Куратор тега PowerShell
    самое простое - использовать $command.Parameter, а не изобретать свои собственные sql-инъекции.

    И, если вы делаете INSERT, не мутить с Adapter, он для SELECT. Вам нужен
    executenonquery
    Ответ написан
    Комментировать
  • Сравнение двух массивов в Powershel?

    @MaxKozlov Куратор тега PowerShell
    Вам потребуется преобразовать ваши hastable в [PSCustomObject] и
    изучить возможности Compare-Object

    Преобразовать просто - [PSCustomObject]$hastable
    А потом, когда у вас будут объекты, а не хеши, их можно сравнивать по отдельным свойствам
    В частности, можно будет попробовать
    #...
    # вместо # $stammArtikelWebseite += $newRoW
    $stammArtikelWebseite += [PSCustomObject]$newRoW
    # ...
    # то что в $Import - уже объекты, их можно менять на месте
    # или также из вашего хеша сделать 
    # вместо # $stammArtikelcsv += $newRow1
    $stammArtikelcsv += [PSCistomObject]$newRow1
    #...
    
    # А потом:
    Compare-Object -ReferenceObject  $stammArtikelWebseite  -DifferenceObject $stammArtikelcsv -Property preisohne
    Ответ написан
    1 комментарий
  • Не работает команда Get-NetQosPolicy в Power Shell v7.1.1 что делать?

    @MaxKozlov Куратор тега PowerShell
    Лучше ставить MSI
    Сама команда не из комплекта PS, а из модуля
    PS C:\> Get-Command Get-NetQosPolicy
    
    CommandType     Name                                               Version    Source
    -----------     ----                                               -------    ------
    Function        Get-NetQosPolicy                                   2.0.0.0    NetQos
    
    PS C:\> Get-Module NetQos|fl
    
    Name              : NetQos
    Path              : C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\NetQos\NetQos.psd1
    Description       :
    ModuleType        : Manifest
    Version           : 2.0.0.0
    NestedModules     : {MSFT_NetQosPolicy}
    ExportedFunctions : {Get-NetQosPolicy, New-NetQosPolicy, Remove-NetQosPolicy, Set-NetQosPolicy}
    ExportedCmdlets   :
    ExportedVariables :
    ExportedAliases   :


    По-видимому при простом разархивировании седьмая версия не подхватывает модули из основных путей
    Можно попробовать не переставляя загрузить этот модуль прямым указанием пути
    Если получится - с ним всё ок, нужно будет переставить как положено и заработает
    PS C:\> Import-Module C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\NetQos\NetQos.psd1
    Ответ написан
  • PowerShell отсеивание пустых результатов?

    @MaxKozlov Куратор тега PowerShell
    так вот, ваш запрос возвращает несколько таблиц
    $result.Tables.Count - это количество таблиц.
    Их можно перечислять как
    $result.Tables[0], $result.Tables[1] и тд
    В каждой из таблиц есть строки
    $result.Tables[0].DataRow,. $result.Tables[1].DataRow
    Каждый Datarow - это отдельный объект, у него тоже есть свой Count - $result.Tables[0].DataRow.Count

    Вы в своём коде берете все строки из всех таблиц сразу и пишете в эксель. Кстати, внутри цикла перебирающего строки, это делать не рекомендуется.
    Вам надо пробегать не по строкам, а по таблицам и проверять, если есть данные - писать (и безо всяких for, это прошлый век :) )
    То есть что-то вроде:
    foreach ($table in $result.Tables) {
      if ($table.DataRow.Count) {
        $table.DataRow | ... | Export-Excel ...
      }
    }


    Могу наврать с точными названиями свойств, может там просто Rows, сейчас не вспомню, но на один из ваших прошлый вопросов я давал ссылки.
    Проще всего выполнять построчно и смотреть что внутри каждого из объектов
    Ответ написан
    6 комментариев
  • В PowerShell не выполняется команда -newname, если в пути пробелы, что сделать?

    @MaxKozlov Куратор тега PowerShell
    Вы чего-то не договариваете :)

    потому что оно нормально всё переименовывает даже без обёрток вокруг Rename-Item,
    rename свой -Path может получить через pipeline, а -newname у вас скрипт

    Только что затестил.
    Даже внутри переименованной в процессе папки переименовывает содержимое

    Добавьте к орининальному ren -whaitif и посмотрите что выдаёт
    Ответ написан
    Комментировать
  • Как последовательно вызвать утилиту с набором аргументов?

    @MaxKozlov Куратор тега PowerShell
    Powershell:
    'makemigrations', 'migrate', 'createsuperuser' | foreach { & python manage.py $_; if (-not $?) { break } }


    Правда врятли это такое уж сокращение
    Ответ написан
    Комментировать
  • Есть ли у Powershell встроенный hex редактор?

    @MaxKozlov Куратор тега PowerShell
    Poweshel - это не gui, а скриптовый язык и его движок. Поэтому любой "редактор" в нем отсутствует по определению. Но возможности есть. См. ответ Alexey Dmitriev
    Ответ написан
    Комментировать
  • Как добавлять аргументы из текстового файла в скрипт PowerShell?

    @MaxKozlov Куратор тега PowerShell
    Правильно добавлять не $serial - в нём список сериалов, а $serialID - переменную из цикла
    или логичнее тогда уж
    # Пляски @() вокруг Get-Content не нужны, foreach и так всё переберёт как массив, если вы не на PSv2
    $serials = Get-Content ...
    foreach ($serial in $serials) {
      Invoke-WebRequest "https://...api..$serial..."
    }


    А если их действительно 10000 лучше использовать foreach -parallel из седьмого PS или его ранние варианты из PoshRSJob, Invoke-Parallel, ThreadJob...
    Ответ написан
    1 комментарий
  • Перенос файлов в папки год\месяц?

    @MaxKozlov Куратор тега PowerShell
    Та информация что вы получаете командами Get-Item, Get-ChildItem - 'это объекты FileInfo.
    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    В нем есть свойства CreationTime, LastWriteTime, которые являются объектами DateTime, у них в свою очередь есть свойства Year, Month, Day
    Из них можно составить строки
    Копировать Copy-Item, проверять существование Test-Path
    Без вашего кода больше сказать не получится ибо это будет уже задание. Но поиском найти что-то близкое даже тут можно.
    Ответ написан
    Комментировать
  • Записать информацию о ПК в текстовый файл через PowerShell?

    @MaxKozlov Куратор тега PowerShell
    читаете файл до того как туда что-то писать и не пишете если нашли в нём строку про "pcname: xxx"
    Ответ написан