Некоторые картинки не загружаются из РФ и РК, используйте VPN.

суббота, 24 февраля 2024 г.

"О, Уве не умеет умирать"
Очень забавное замечание, а если ударится в мистику, может Соня специально мешала ему умереть, потому что он еще может быть полезен???

"SAAB!"

Вторая жизнь Уве

пятница, 23 февраля 2024 г.

Bash скрипт заметка

Заметка скрипт.

Интересный моменты в скрипте:

  1. Вызов функции из себя как вариант цикличности, а не рекурсии
  2. $EUID -ne 0
    Проверка на наличие root прав у текущего пользователя
  3. echo -e "[User]\nSystemAccount=true"> /var/lib/AccountsService/users/$AdminName
    Скрытие учетки в *nix-подобных системах (сервисный аккаунт)
  4. logname
    Получение имени залогинившегося пользователя, даже если он под sudo
  5. eval getent passwd {$UID_MIN..$UID_MAX} 
    eval - преобразует текст в команду
  6. getent passwd {1000..6000} | cut -d: -f1
    получение списка пользователей с UID между 1000-6000, все сервисные аккаунты имеют UID < 1000
  7. blkid -U "$(grep -vE "^#|^$" /etc/crypttab | tail -n1 | cut -d" " -f1 | cut -d"-" -f2-)"
    LUKS иногда создает устройство с именем равным LUKS-UUID_source_block_device, но вот получить именно адрес в виде /dev/sda3 не так просто
Задачи скрипта:
  1. Проверить наличие определенного пользователя
  2. Создать администратора, при его отсутствии
  3. Переименовать выбранного пользователя
  4. Сбросить ID Anydesk
  5. Изменить passphrase для шифрованного раздела
  6. Переименовать ПК
Для чего такое надо?, для клонирования подготовленной системы

четверг, 22 февраля 2024 г.

QEMU KVM Два монитора


Появилась интересная задачка - организация рабочего места на съемном носителе (ssd). Ну интересное тут другое, там используется виртуализация на базе QEMU. Установка и настройка производились на Hyper-V (виртуализация в виртуализации) на внешний ssd (проброшен в VM).

Установка QEMU выглядела так:

sudo apt-get install  --no-install-recommends qemu-system-ppc libvirt-daemon-system libvirt-clients virt-manager gir1.2-spiceclientgtk-3.0

Вот я сделал, а заказчик спрашивает, а как мне работать на двух мониторах?

Поясню, на носителе базовая операционная система, а в ней есть гипервизор QEMU KVM. Человек запускает виртуальную машину и работает через консоль. А у него два монитора и растянуть окно нельзя.

В поисках решений перепробовал много вариантов, в итоге решение нашлось.

среда, 21 февраля 2024 г.

Script posh Keepass Выбор профиля Chrome

По-умолчанию двойной клик по полю url с протоколом https/http открывает новую вкладку chrome в ближайшем окне (если смотреть по порядку). При этом не важно, какой там профиль. Меня это не устраивает. Поэтому я начал искать пути решения.

Первый вариант был привязать тег keepass к папке и добавлять его как параметр --profile-directory, но оказывается я не могу использовать теги.

Следующий вариант был - получить в окне powershell список профилей из каталога %userprofile%\AppData\Local\Google\Chrome\User Data\, но тут лежат не только профили, а сами профили имеют отличные, от заданных в chrome, имена. В итоге выяснилось, что информация об именах и каталогах хранится в файле %userprofile%\AppData\Local\Google\Chrome\User Data\Local State. Это JSON файл, и, к сожалению, в одну строчку распарсить его не получится. Поэтому родился вот такой скрипт с дополнительными проверками. Скрипт выдает таблицу



где нужно ввести номер строки с профилем, этот профиль и будет загружен.

пятница, 16 февраля 2024 г.

У автора очень интересная манера перескакивать в будущее. Собственно сама Бритт для меня несколько некорректна, может она не имела ввиду ничего такого, но все таки я бы воспринял именно вот так. И самое интересное, что она вписалась в этом поселении, я думал она останется

Здесь была Бритт-Мари

воскресенье, 11 февраля 2024 г.

Script Posh Сформировать список файловых баз 1С рекурсивно

Переношу 1С с одного сервера на другой, основные базы были клиент-серверные, переводим в файловую и добавляем в список. Делов на пять минут, так как их не много. А вот в файловых базах целая туча без логики во вложенности. Решил накидать скрипт, который сам сформирует список баз. Скрипт проходит рекурсивно, ищет файл базы 1Cv8.1CD и строит дерево. Если в каталоге нет файла БД и нет подкаталогов, то пропускает, во всех остальных случаях добавляет в файл списка баз. Из за этого возможны пустые каталоги

$Folder="D:\1C_BASES\Базы1с_8"
$filev8i="$Folder\bases_here.v8i"
$level=1

function CheckName{
    param(
        [Parameter()]
        [string]$Name,

        [Parameter()]
        [string]$File,

        [Parameter()]
        [int]$cnt=1
    )
    $content=$(Get-Content $File)
    if ($content | Select-String -Pattern "[$Name]" -SimpleMatch -Quiet){
        $cnt=$cnt+1
        $res=$(CheckName -Name "$Name ($cnt)" -File $file -cnt $cnt)   
    }else{
        $res=$Name
    }
    return $res
}
function GetTree{
    param(
        [Parameter()]
        [string]$Folder,

        [Parameter()]
        [string]$Parent="",

        [Parameter()]
        [int]$level
    )
     
    $ChildList=$(Get-ChildItem -Path $Folder -Directory)
    

    foreach ($child in $ChildList){
        $FullPath=$($child.FullName)
        $NameParentFolder=$Parent

        if (Test-Path "$FullPath\1Cv8.1CD"){
            $pref="-"*$($level)+"|->"
            Write-Host("$pref Folder `"$child`" with 1C Bases")

            $Name=$(CheckName -Name $child -File $filev8i)

            $Text=@"
[$Name]
Connect=File=`"$FullPath`";
ID=
OrderInList=
Folder=$($NameParentFolder.Replace("\","/"))
OrderInTree=
External=0
ClientConnectionSpeed=Normal
App=Auto
WA=1
Version=8.3
AppArch=Auto
DisableLocalSpeechToText=0
DisableLocalSpeechToText=0

"@

            Write-Output($text) | Out-File -Encoding "UTF8" $filev8i -Append
        } else {
            if ($(get-childitem $FullPath -Directory).count -gt 0){
            $pref="-"*$level+"|->"
            Write-Host("$pref Folder `"$child`":")
            $Name=$(CheckName -Name $child -File $filev8i)
$text=@"
[$name]
ID=
Folder=$($NameParentFolder.Replace("\","/"))

"@
            Write-Output($text) | Out-File -Encoding "UTF8" $filev8i -Append
            GetTree -Folder $FullPath -Parent "$NameParentFolder\$name" -level $($level+1)
            } else {
                $pref="-"*$level+"|->"
                Write-Host("$pref Folder `"$child`" not contain subfolders") 
            }
        }
    }
}
Remove-Item -Path $filev8i -Force
$currentParent=$(($Folder.Split("\"))[-1])
$text=@"
[$currentParent]
ID=
Folder=/

"@
Write-Output($text) | Out-File -Encoding "UTF8" $filev8i -Append

GetTree -Folder $Folder -level $level -Parent "/$currentParent"

Скрипт мою задачу решил, наводить лоск смысла не вижу смысла

воскресенье, 4 февраля 2024 г.

Script Posh Восстановление acl в папке пользователя

В попытке настроить аудит, у меня сломался acl для пользовательских папок. Если бы речь шла об одной папке, то я бы решил этот вопрос простым удалением папки пользователя и его повторным входом в систему. Но речь шла о терминальном сервере. Поэтому родился этот скрипт. Единственно что надо учесть:

  1. Скрипт рассчитан на русскую локализацию
  2. Скрипт обрабатывает только каталоги внутри пользовательского
  3. Скрипт подразумевает, что имя каталога совпадает с именем пользователя
  4. Скрипт рассчитан на то, что владельцем каталога пользователя является системная учетная запись, а все дочерние принадлежат пользователю. На разных системах по разному.
  5. Сам скрипт использует icacls, вместо get-acl.
  6. Входящими параметрами скрипта является имя пользователя и домен, если домен не указан, то скрипт будет использовать имя ПК, с которого запущен (на тесте были ошибки, но мне не нужно было и не стал исправлять).

param(
     [Parameter()]
     [string]$User,
     [Parameter()]
     [string]$Domain=$env:COMPUTERNAME
)

$LogFile = (Get-Item $PSCommandPath ).DirectoryName+"\"+(Get-Item $PSCommandPath ).BaseName+".log"
$CurrentTimeStamp=Get-Date -Format "dd.MM.yyyy`tHH:mm:ss"

function Logging($Message) {
	Write-Host "$Message"
    Write-Output("$CurrentTimeStamp`t$Message") | Out-File $LogFile -Append
}

if ($User) {
    Logging("User $User in $Domain is processing")
} else {
    Logging("Parameter `"User for processing (-User)`" is not specified ")
    exit
}
$UserFolder="C:\users\$User"

if (-Not (Test-Path $UserFolder)) {
    Logging("User folder $UserFolder not found")
    Exit
}

function getAcls ($ObjectFS){
    switch ($ObjectFS)
    {
        "Application Data" {return "SYSTEM"}
        "Local Settings" {return "SYSTEM"}
        "NetHood" {return "SYSTEM"}
        "PrintHood" {return "SYSTEM"}
        "SendTo" {return "SYSTEM"}
        "главное меню" {return "SYSTEM"}
        "Мои документы" {return "SYSTEM"}
        "Шаблоны" {return "SYSTEM"}
        Default {return "FULL"}   
    }  
}

foreach ($ObjectFS in  $(Get-ChildItem -Path $UserFolder -Force -Exclude "ntuser*","AppData")) {
    $ObjectFSFullName=$($ObjectFS.FullName)
    Logging("    Object $ObjectFSFullName is processing")
    #ICACLS
    $ACL= getAcls($ObjectFS.BaseName)
    Logging("        $ACL")
    Logging("        ICACLS $ObjectFSFullName /setowner $Domain\$user")
    ICACLS $ObjectFSFullName /setowner $Domain\$user /C /Q
    Logging("        ICACLS $ObjectFSFullName  /C /Q /RESET")
    ICACLS $ObjectFSFullName   /C /Q /RESET
    
    if ( "$ACL" -eq "SYSTEM" ) {
        Logging("        ICACLS $ObjectFSFullName  /setowner `"NT AUTHORITY\СИСТЕМА`" /c /q")
        ICACLS $ObjectFSFullName  /setowner "NT AUTHORITY\СИСТЕМА" /c /q
        Logging("        ICACLS $ObjectFSFullName  /deny `"Все:(NP)(S,RD)`" /c /q")
        ICACLS $ObjectFSFullName  /deny "Все:(NP)(S,RD)" /c /q
   }

}

 

Картины: Альфия Шайхулова

Догорал закат

 

четверг, 1 февраля 2024 г.

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

Атлант расправил плечи