Ответы пользователя по тегу PowerShell
  • Полное отключение учетной записи Active Directory?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Привет!
    Тут 2 задачи в 1 скрипте у Вас будет:
    1 - Воспользуйтесь вот этим командлетом Disable-ADAccount
    2 - Не до конца понял задачу с перемещением. Но вероятно вы просто хотите отключить почту какую-то. Вам нужен командлет Disable-Mailbox. Там же есть Get и Set реализации, если что-то предварительно нужно глянуть или изменить.
    Ответ написан
    1 комментарий
  • Как сделать опроса веб адресса в скрипте?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Привет!
    Если я верно понял, что нужно просто сделать бесконечный Ping на текущий код, то просто заверните его функционал в цикл while.
    Отменить его можно будет через CTRL+C в консоли.
    Ответ написан
  • Как решить проблема запуска ново добавленного службы Windows?

    hekkaaa
    @hekkaaa Автор вопроса
    C#/.NET Developer
    Решение нашел спустя 4 дня поиска.
    В документации Microsoft - это как то не упоминается или не акцентируется, но нужно доустановить Nuget пакет Microsoft.Extensions.Hosting.WindowsServices и добавить в Program.cs -> .UseWindowsService()

    В стартовой зборке это будет выглядеть вот так:
    IHost host = Host.CreateDefaultBuilder(args)
        .ConfigureServices(services =>
        {
            services.AddHostedService<Worker>();
        })
       <b> .UseWindowsService()</b>
        .Build();


    P.S информацию случайно нашел вот тут.
    Ответ написан
    2 комментария
  • Как в powershell изменять только первое найденное значение?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Привет.
    Если хочешь решение именно в своем коде, то тебе просто не хватает break в условии if.
    Вот простенький пример с демонстрацией:

    $hostPC = ("ya.ru", , "ya.ru", "ya.ru", "google.ru","docs.microsoft.com")
    foreach ($item in $hostPC) {
       if($item -eq "ya.ru"){
           Write-Host("MEOW");
           break;
       }
    }

    Если не понятно, запусти код с break и без него.
    Ответ написан
    Комментировать
  • Почему при созданиии тимингово интерфейса он по умолчанию Internal?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Я не совсем уверен. т.к не где проверить такое создание виртуального коммутатора. Но если верить документации есть вероятность в том, что данный тип задается только при создании и не изменяем после.

    New-VMSwitch -name InternalSwitch -SwitchType Internal


    В том мануале что вы кинули он видимо задается по умолчанию каким то образом, либо опускается этот нюанс. Вам вероятнее всего нужно это сделать явно при вводе командлета New-VMSwitch -> добавить параметр -SwitchType Internal
    Ответ написан
    Комментировать
  • Как ввести компьютер в домен с помощью скрипта powershell?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Привет.
    Если двигаться по твоему вопросу, то я вижу 2 пути:
    1. Если ты именно хочешь что бы запускался ps1 файл, то пожалуйста подкидывай его туда и запускай руками или вшивай в образ (это ваше дело как он туда попадет). но предварительно нужно убрать защиту на исполнение на локальном пк скриптов ps1 написанных ВНЕ этого пк. Подробнее тут.

    2. Тот командлет на который Вы ссылаетесь и на него же сослался Владимир должен работать.
    Вот частный пример не из документации.
    Вы же вводите машину в домен с сервера. Главное что-бы удаленный ПК был подключен в нормально настроенную сеть. Тут уже дело за Вами.
    Ответ написан
    Комментировать
  • Как скопировать только новые или измененные файлы/папки за последний час в Powershell?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Привет!
    Тут достаточно в начале применить параметры -File -Recurse

    Данный конвейер прошелся по мему гит репозиторию сквозь папки и копировал конкретно файлы, игнорируя папки.
    Get-ChildItem -File -Recurse | Copy-Item -Destination C:\Temp\

    Как вижу фильтры дат и переменные для -Destination у Вас настроены уже. Просто чутка модификации с вашей стороны.
    Ответ написан
    Комментировать
  • Как с помощью powershell ИНТЕРАКТИВНО запустить mstsc.exe на удаленном сервере?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Вашу задачу проще решить через tasksheduler. В свойствах запуска так же можно попробовать указать /h:850 /w:1000
    Здесь вопрос не о Powershell, а об OS Windows у Вас.
    Ответ написан
    Комментировать
  • Не срабатывает скрипт доступности доменных пк. Почему?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Привет.
    Прошу правильно понять меня. У Вас плохо написан скрипт. Такая реализация имеет место быть, но чем проще и очевиднее пишете тем лучше. (лично мое мнение). Да и судя по всему вы сами запутались в нем же.

    Переменная $all получает данные из AD по фильтру и еще что то импортирует. - Тут ок, Вам виднее что вы хотите найти.
    Но вот ошибка в скобках 4 строчки вероятно в выделенном месте:
    $all=Get-ADComputer -LDAPFilter "(&(objectCategory=computer)(!userAccountControl:1.2.840.113556.1.4.803:=8192))" -Properties (name | Sort).name|Import-csv C:\Users\user\Desktop\list.csv

    Только обратите внимание, что Вы дальше делаете конвеер foreach. Зачем тут конвеер если данные находятся в переменной.
    В самом foreach только if содержится.
    Так можно делать, но не удивляйтесь что дальше крашится будет еще активнее. Вероятнее всего в ветке Test-Path -path $dest и далее. У вас нет ловли ошибок и работы с ними. Используйте try catch.

    Как минимум Хост может не ответить Вам на Test-Path , а еще туча ошибок при копировании (а есть ли папка назначения на данном хосте куда вы батник копируете? Это тоже стоит проверить) или Invoke-command . MaxKozlov не даст соврать, на этих командлетах можно много говна поймать.

    Ну и концовка "$all | export-csv C:\Users\user\Desktop\installed.csv" - дело ваше как вы будете отслеживать на каких машинах взлетел скрипт на каких нет, но рекомендую заморочится в логировании.

    Итог: Перепишите скрипт с нуля. У Вас сложная фильтрация в которой вы сами видимо запутались. Разбейте ее на 2-3 шага в отдельные переменные. Лучше так чем часами сидеть и не понимать ничего.
    Сделайте полноценные хотя бы if else, ведь ошибки неизбежны.
    Ответ написан
    5 комментариев
  • Перенос папки с именем доменного пользователя после его отключения?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Привет.
    Исмат Гайибов Если я все правильно понял тут достаточно простое программирование подключить. используй if else.

    Код очень примерный пишу с ходу без проверки на машине.

    $checkuser = Get-ADUser user12 -filter {enabled -eq $false}
    if($checkuser){
    Move-Item -Path "C:\Obmen\Операторы\user12\Новая папка" -Destination "C:\Мусор"
    }
    else{
     Write-host "отключенных пользователей более не найдено"
    }


    Судя по Вашим вопросам у Вас там туча задач не сложны на PS. Пишите если что на прямую мне на почту в профиле, помогу чем смогу.
    Ответ написан
  • Как предоставить доступ к папкам доменного пользователя через Powershell?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Привет.

    Вот попробуй этот скрипт:

    $a = Get-Acl -Path C:\Temp\TestPS
    $fileSystemAccessRuleArgumentList 
    # Тут Указываем пользователя
    $identity = "NT AUTHORITY\Прошедшие проверку"
    # тут доступ
    $fileSystemRights = "Read"
    $type = "Allow"
    $fileSystemAccessRuleArgumentList = $identity, $fileSystemRights, $type
    $fileSystemAccessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $fileSystemAccessRuleArgumentList
    
    $a.SetAccessRule($fileSystemAccessRule)
    Set-Acl -Path C:\Temp\TestPS -AclObject $a


    Взял с офф мануала и проверил на ноуте своем. Вроде работает.
    Ответ написан
  • Получаю ошибку при добавлении IP в TrustedHosts, почему?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Привет.

    Так ну давайте по очереди. Начнем с:
    Set-Item : Клиенту не удается подключиться к узлу назначения, указанному в запросе. Убедитесь, что служба на узле назначения работает и принимает запросы. Ознакомьтесь с журналами и документацией для определения запущенной на узле назначения службы WS-Management (чаще всего это IIS или WinRM). Если это служба WinRM, то для анализа состояния и настройки этой службы используйте на удаленном узле команду "winrm quickconfig".
    строка:1 знак:1

    На вашем месте я бы 1: Посмотрел бы вот эту статью и вязл команду
    set-item wsman:localhost\client\trustedhosts -value *

    Для теста разрешил бы подключаться с любого IP (да опасно, но лучше идей пока нет).

    2: Если я правильно понял на локальном пк откуда вы подключаетесь к удаленной машине проблема с запуском службы WinRM.
    Я бы для начала проверил ее дефолтный статус и запустил бы руками предварительно.

    У меня на ноутбуке она по дефолту выключена.
    "Status Name DisplayName
    ------ ---- -----------
    Stopped WinRM Служба удаленного управления Windows …"

    Варианты запуска разные. Классика через start-service ****

    Есть ручные варианты

    Резюмируя: Проверить запуск сервисов на двух машинах. Они действительно могут быть отключены.
    Если проблема остается то решаем по мере поступления.
    Ответ написан
    1 комментарий
  • Почему не работает Powershell скрипт от другого пользователя в Jenkins?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Привет.
    Вероятнее всего твоя проблема связана с политикой выполнения PS скриптов.

    У PS есть такая особенность как запуск скрипта на других компьютерах. Нужно предварительно убрать или выбрать оптимальную политику безопасности на исполняемой машине.
    Ответ написан
  • Как цикл ForEach преобразовать в ForEach-​Object для распаралеливания выполнения?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Привет!
    Вам нужно воспользоваться workflow и foreach -parallel как и подсказывает MaxKozlov
    Учтите что Вам нужно использовать версию 5.1 Powershell в полее поздних версиях ее вырезали.

    Вот пример кода который Вам нужен:
    (код просто копирует файлики с одной папки в другую. Думаю на примере вы сможете интегрировать свой бекап)
    workflow Test-Workflow
    {
        $Disk1 = Get-ChildItem C:\Temp\1
    
        # The disks are processed in parallel.
        ForEach -Parallel ($Disk in $Disk1)
        {
            $DiskFrom = "C:\Temp\1\$Disk"
            # The commands run sequentially on each disk.
            Copy-Item -Path $DiskFrom -Destination C:\Temp\2\
            
        }
        Write-Output "Files copied."
    }
    
    Test-Workflow


    Надеюсь помог. Хорошего дня!
    Ответ написан
    4 комментария
  • Как запустить exe файла на удалённом пк через powershell?

    hekkaaa
    @hekkaaa Автор вопроса
    C#/.NET Developer
    Попробуйте воспользоваться данными решениями
    https://habr.com/ru/company/pc-administrator/blog/...

    Из своего опыта скажу что в коде у Вас не хватает указание credential (лог\пасс) для выполнения команды.
    В тех условиях где я писал подобный скрипт увы не заработало даже так т.к были политики ИБ строгие и ни кто их менять не собирался. По этому иногда это дохлый номер.

    Можно попробовать обходные пути через подкидывание батника в TEMP и запуска если через powershell. Альтернатива обращение к CMD через Invoke-command.
    Ответ написан
    Комментировать