• Нормальная windows 10. Миф или реальность?

    Jump
    @Jump Куратор тега Windows
    Системный администратор со стажем.
    Я считаю 10-ку худшей системой всех времён и народов, а людей, которые используют и советуют Windows 10 можно назвать либо пропагандистами, которые на зарплате у Microsoft, либо это просто ребята с приветом (вас больше), потому что эту "Г" даже нормальной не назвать. Но увы я вынуждена переходить на неё из-за NVidia.
    Вы конечно извините - но это просто бред и вкусовщина.
    Я прекрасно пользуюсь и Windows 7, и Windows 8 и Windows 10. Кое где даже еще XP прекрасно работает.
    Все системы отличные, все имеют свои достоинства и недостатки. Десятка посвежее поэтому все новые фишки на ней.
    Да там есть такая проблема как излишняя самостоятельность системы - но с этим научились бороться, в идеале если хочется стабильности есть LTSC версия.

    Наверное, обновления - это главная проблема 10
    Да это проблема, но какая ОС без проблем? К тому же проблема решаемая.
    Наглое использование трафика тоже решается, если еще и роутер настроить - мышь без спросу не проскочит.

    Что отправляет? Куда отправляет?
    Это проблема не Windows 10 а всего современного софта. Весь софт - и графические редакторы и простенькие утилиты для бэкапа лезут в сеть сливают какую-то информацию, качают обновления и все это без спроса. Особенно браузеры - это вообще жуть. ОС на их фоне выглядит довольно скромно в этом плане!

    Поэтому я ищу какую-нибудь сборку или твики где:
    Если хотите чтобы работало нормально - никаких левых сборок! Только оригинальные дистрибутивы. Если цена не смущает - берите LTSC.
    Если не покупаете - тем более LTSC.
    Там гораздо меньше обновлений, они легко настраиваются и не ставятся без спроса. И нет ничего лишнего.
    Ответ написан
  • Почему Power Shell не видит функцию?

    @MaxKozlov
    Всё по той же причине - Job - это отдельный процесс, он не знает о ваших функциях.
    Возможны три варианта:
    1. функцию надо разместить прямо внутри вашего скриптблока
    2. функцию надо выносить в модуль
    3. использовать альтернативу - PoshRSJob, которому можно указать какие функции импортировать
    Ответ написан
  • Вызов функции с параметром по-умолчанию?

    @MaxKozlov
    Для этих целей лучше использовать не формирование в виде строки, а так называемый Splatting
    $params = @{
      Param1 = "value1"
    }
    if ($something) { $params.Param2 = "*value" }
    
    MyFunction @params


    тогда в зависимости от сформированных в хеше параметров вызовется всё что надо

    Свичи прекрасно привязываются в стиле Start-Process -Wait:$isWait
    Вообще, все значения параметров можно передавать не через пробел, а через двоеточие, именно так их формирует splatting.

    А еще внутри функции есть автоматическая переменная $PSBoundParameters в которй лежит хеш переданных параметров и их значений и оттуда можно узнать, передан ли параметр явно или получил значение по-умолчанию (проверив, есть ли ключ)
    Или можно делать прокси-функции типа
    Function Get-OtherCompProcess {
    Param(
    #здесь все обычные параметры для get-process кроме computername
    )}
    $PSBoundParameters.computername='othercomp'
    Get-Process @PSBoundParameters
    Ответ написан
  • Можно ли через powershell как-то запустить окно программы с нужным тайтлом окна?

    @MaxKozlov
    Powershell для этого не нужен. Достаточно в cmd
    start "Любой заголовок" someprogram.exe

    Если программа сама свой заголовок не ставит, то всё получится. А если ставит, то PS не поможет
    Ответ написан
  • Скрипт добавления address с переменной?

    За Вас написать скрипт powershell? Так это не сюда, это на фриланс.
    Кратко: если известно заранее IP всех микротиков, и известно какую команду для каждого дать, и они поддаются какому-либо правилу (ну, как привели в примере, одна цифра меняется в IP адресе), то всё просто - делаем табличку в excel/libreoffice, в одном столбце ip устройства, во втором что прописать, ну и если ещё что-то меняется то и другие параметры можно прописать в разных столбцах. Экспортируем в csv файл. Пишем скрипт, который в цикле проходит все строки из файла, разбивает по переменным, и подсовывает их в команду, ну ещё неплохо бы проверять доступность устройства, и логировать, что корректно сработало, что нет. Всё.
    Если очень много устройств, и они могут быть не всегда включены, то можно в табличку ещё ввести параметр, который показывает, что уже это устройство обработано успешно. А дальше скрипт по завершению сделает новый такой же csv файл, и подменит исходный, и при следующем запуске будет обрабатывать только те устройства, которые не были обработаны. Периодически запуская скрипт, можно со временем выловить все устройства. Но если они всегда все доступны, то это всё не надо, достаточно раз запустить и проверить потом результат.
    Ответ написан
  • Добавление пользователей скриптом в группу в Exchange Online?

    @zloy_zaya
    А вы уверены что соединение успешно установлено?
    И вы упустили import-pssession $session -allowclobber
    Ответ написан
  • Генерация случайного списка в Powershell?

    $ComputerList = "PC1, PC2, PC3, PC4, PC5, PC6, PC7, PC8, PC9, PC10"
    $AllComputer = $computerList.Split(",")
    Write-Host -ForegroundColor Magenta "Количество компьютеров:" $AllComputer.Length
    $newList = @()
    # for ($i =0; $i -eq 4; $i++) { "-eq" - условие выполнения содержимого цикла, у вас оно не выполняется, т.к. "0=4" - Ложь
    for ($i =0; $i -le 4; $i++) {
    $index = Get-Random -Maximum $AllComputer.Length
    # $newList[$i] = $ComputerList[$index] - добавление в список по несуществующему индексу (изначально список пуст), $ComputerList - не список а строка, которую Вы преобразуете в список (строка 2) и складываете в переменную $AllComputer
    $newList += $AllComputer[$index]
    }
    Write-Host -ForegroundColor Green "Количество новых компьютеров:" $newList.Length
    Write-Host -ForegroundColor Red "Список новых компьютеров:" $newList
    Ответ написан
  • Как при помощи Powershell отправить файл своему боту в Telegram Bot API?

    @MaxKozlov
    у Windows Powershell нет прямой поддержки 'multipart/form-data', только у Core

    В частности для multipart не хватает указания bondary в ContentType
    Можете попробовать поэкспериментировать с ручной сборкой типа как тут @jklemmack
    https://stackoverflow.com/questions/36268925/power...
    или с System.Net.Http.MultipartFormDataContent
    Ответ написан
  • Как в микротике создать site to site между микротиками ipsec в тунельном режиме?

    CityCat4
    @CityCat4
    Если я чешу в затылке - не беда!
    различие...İpsec а в транспортном и туннельном режиме

    Это в гугл.

    Порядок создания опишу завтра - если кто-то другой не напишет раньше :)

    Берем простейший случай - аутентификация по PSK (Pre-Shared Keys, то бишь простому текстовому паролю). Текст пароля "123456" (понятно, что если реализовывать такой вариант, пароль должен быть посерьезней)

    Внешние интерфейсы, смотрящие в тырнет:
    система А - 170.70.70.1
    система Б - 180.80.80.1
    (обязательно поменяйте их на свои!)

    Внутренние интерфейсы, смотрящие в спариваемые локалки:
    система А - 10.1.1.1
    система Б - 10.2.2.1
    маски у обеих сетей - /24 (255.255.255.0)

    итак погнали.

    RouterOS 6.45.7
    значения по умолчанию не указываются
    Система А (на системе Б будет все тоже, только перевернуто зеркально)

    Шаг 0 - создаем предложение
    Этот шаг необязательный
    /ip ipsec proposal
    add auth-algorithms="" enc-algorithms=aes-256-gcm lifetime=1h name=proposal1

    Самое первое - создаем proposal. Это наше предложение другой стороне о том, какие мы поддерживаем шифры и какие методы подписи пакетов. Выбираем самое сильное шифрование AES256 со счетчиком Галуа, отдельная подпись пакета не потребуется. Здесь же мы задали время жизни туннеля до неполного переустановления - 1 час.
    Этот шаг необязательный, он нужен только для усиления защиты туннеля. Без него будет набор из более простых шифров типа AES128 CBC с SHA1 в качестве алгоритма подписи пакета

    Шаг 1 - создаем профиль соединения
    /ip ipsec profile
    add dpd-interval=disable-dpd enc-algorithm=aes-256 hash-algorithm=sha256 lifetime=2h name=profile1 \
        nat-traversal=no proposal-check=strict

    Отключаем DPD - от него только проблемы, устанавливаем более мощные чем по умолчанию алгоритмы шифрования и хэширования (default encrypt может быть и 3DES, default hash - SHA1), устанавливаем время жизни туннеля 2 часа (после - полная переустановка соединения со сбросом ключей шифрования), отключаем NAT Travesal, указываем обработку предложений strict (очень важный параметр! Если время жизни туннеля, запрошенное той стороной больше чем задано у нас - послать, если меньше или равно - принять)

    Шаг 2 - создаем напарника (данные об удаленной системе)
    /ip ipsec peer
    add address=170.70.70.1/32 comment="Main VPN" name=RB2011 profile=profile1

    Тут даже пояснять ничего не надо, все самоочевидно

    Шаг 3 - создаем политику
    /ip ipsec policy
    add dst-address=10.2.2.0/24 peer=RB2011 proposal=proposal1 src-address=10.1.1.0/24 tunnel=yes

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

    Шаг 4 - создаем идентификаторы (identity). Раньше в IPSec у микротика было меньше сущностей и обьяснение было проще...
    /ip ipsec identity
    add peer=RB2011 secret=123456


    Естественно возникает вопрос - а как же микротик узнает, куда девать пакеты? А это записано у него в настройках - все пакеты с сети 10.1.1.0/24 на 10.2.2.0/24 зашифровать и отправить на 170.70.70.1, все пакеты же с 170.70.70.1 протокола ESP нужно расшифровать и обработать повторно.
    Вообще для того, чтобы понять, как ходят пакеты в IPSec - есть отличная схема Packet Flow in Netfilter and General Networking
    Ответ написан
  • Как поменять Имя которое отображается в AD через PowerShell?

    @MaxKozlov
    Rename-ADObject меняет атрибут CN - то есть то, что отображается в списке
    Соответственно и DistinguishedName
    а DisplayName (Выводимое имя) ставится Set-ADUser -DisplayName
    Если же нужно просто Имя, то это GivenName

    DistinguishedName : CN=Чебуракин Геннадий Шапоклякович,OU=SOME_OU,DC=forma,DC=com
    CN : Чебуракин Геннадий Шапоклякович
    DisplayName : Чебуракин Геннадий Шапоклякович
    Name : Чебуракин Геннадий Шапоклякович
    Surname : Чебуракин
    GivenName : Геннадий
    Ответ написан
  • Проблема с WSL на Windows 10?

    fzfx
    @fzfx
    18,5 дм
    а разве в 1909 уже завезли wsl2? afaik нет. ждите версию 2003.
    Ответ написан
  • Как сохранить credential для winrm?

    semenenko88
    @semenenko88 Автор вопроса
    Системный администратор
    Разобрался!

    Чтобы не приходилось вводить каждый раз пароль, сохраним его в зашифрованном виде в файл:
    $crd = Get-Credential
    $crd.Password | ConvertFrom-SecureString | Set-Content pass.txt


    Используя имя пользователя и пароль из файла создадим Credential в переменной, и используя эту переменную подключимся к серверу:
    $user = ″domain\administrator″
    $password = Get-Content pass.txt | ConvertTo-SecureString
    $cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user, $password
    Enter-PSSession -ComputerName 10.15.29.8 -Credential $cred
    Ответ написан
  • Powershell: не работает foreach. Почему?

    @BeatHazard
    В строчке $adPath= "LDAP://" + $destinationOUs вы указали $destinationOUs эта переменная содержит весь массив OU, вам надо было указать $destinationOU
    Подобные проблемы легко можно обнаружить заменяя исполняемые команды более простыми, например Write-Host имя переменной, сразу все становится на свои места и понятно что откуда берется
    Ответ написан
  • Как скопировать директорию со всеми подпапками сверяя контрольную сумму для каждого файла?

    @BeatHazard
    Для решения вашей задачи рекомендую использовать Powershell.
    Накидал вот такой скрипт, думаю он вам поможет.

    $OldFolder = "C:\Temp" #папка с исходными файлами
    $NewFolder = "C:\test\test" # папка куда будут копироваться файлы
    $files = Get-ChildItem $OldFolder -File -Recurse
    foreach ($file in $files )
    {
    $folder = "$NewFolder$(Split-Path $file.DirectoryName -NoQualifier)"
    if (-not (Test-Path $folder)) {New-Item $folder -Force -ItemType Directory}
    Copy-Item $file.fullname $folder -Force
    $MD5 = Get-FileHash -Path $file.fullname -Algorithm MD5
    $MD5New = Get-FileHash -Path "$folder\$file" -Algorithm MD5
    if ($MD5.Hash -ne $MD5New.Hash)
    {Write-Host "Внимание!!! Хэш нового файла $folder\$file не соответствует исходному!!!" -ForegroundColor Red
    Read-host "Нажмите Enter чтобы продолжить"
    }
    }
    Ответ написан
  • Нормально ли это что новый жесткий диск dell уже с разметкой NTFS?

    Zoominger
    @Zoominger
    System Engineer
    Я бы подёргал поставщика, потому что на заводе-изготовителе счётчик времени работы сбрасывается после тестов.
    Ответ написан
  • Проблема с использованием Get-ADUser. Как правильно написать команду для получения списка пользователей?

    @20ivs
    Пользователь пока ничего не рассказал о себе.
    Get-ADUser -Filter * SearchBase 'OU=Отдел, OU=Управление, OU=Департамент,
    OU=Пользователи, OU=ИА, OU=Компания, OU=Регион, DC=test, DC=local'

    потому что скорее всего напутали с последовательностью.
    OU=Пользователи, OU=Отдел, OU=Управление, OU=Департамент, OU=ИА, OU=Компания, OU=Регион, DC=test, DC=local
    для понимания зайдите в AD, в свойствах контейнера в редакторе атрибутов посмотрите distinguishedName.
    и без пробелов это все пишется.
    Ответ написан
  • Проблема с использованием Get-ADUser. Как правильно написать команду для получения списка пользователей?

    @AlexStrelnikov
    Проверьте, что последовательность соответствует структуре AD. Должна быть такая:
    "OU=Центр, OU=Москва, OU=Россия, DC=domain, DC=local"
    Если в пути есть что-то кроме организационной единицы, то это должно быть указано, например контейнер - это CN.
    Можно сделать запрос к пользователю этой OU
    Get-ADUser -Identity 'Dimitry'
    и затем посмотреть как пишется distinguishedname
    Ответ написан