1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Пишу бесплатно скрипты

Тема в разделе "Поиск работы", создана пользователем Alekssss, 12.11.18.

  1. Alekssss

    Alekssss Активный участник

    1.302
    65
    Тренируюсь в написании скриптов на PowerShell. Готов бесплатно или почти бесплатно писать не очень навороченные скрипты под разные задачи.
     
    3aвулoн нравится это.
  2. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    нужна идея
    есть много-много машин, на них крутятся постгрес, версии разные, местами 32-битные, местами 64.
    имя службы у них тоже отличается.
    нужно придумать как по действующей службе (может оказаться так что есть несколько служб, но запущена только одна) найти место расположения экзешника. чтобы потом обратиться к базе из скрипта.
     
  3. Alekssss

    Alekssss Активный участник

    1.302
    65
    Перечисление служб есть в реестре пути запуска и тип запуска там тоже есть. Можно помониторить процесс, зная какой именно и через него узнать кто и откуда запущен. Вопрос в другом если машин много и удаленных, какими средствами делать. Для WMI нужно одно , для Psexec другое. Обязательно нужны права локадминиа. Надеюсь под видой все крутится, с линукс совсем не знаком. Можно чуть более конкретное ТЗ?
     
    Последнее редактирование: 13.11.18
  4. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    под виндой, будь она неладна..
    я настроен на psexec, часто им пользуюсь, хотя у нас и заббикс есть, но до него не пустят.
    права админа есть.
    службы называются примерно так: "pgsql-9.4.2-1.1C-x64"
    отличается номер версий, причем она будет в дальнейшем меняться, то есть поиск нужен по маске первых 5 символов
    в реестре смотреть службы в голову не приходило, штатно повершелл не обращается к службам, только к реестру?
     
  5. Alekssss

    Alekssss Активный участник

    1.302
    65
    не уверен что повершелл в данном случае лучивший выбор. На каждом компе разрешать выполнение не подписанных скриптов, подымать службу RM. В реестре есть ключи DisplayName и ImagePath в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet
    можно sc \\host query type= service в файл потом парсить, но здесь нет пути к исполняемому файлу, но есть параметр binPath. Что нужно узнать или отследить? Не заглядывал в повершелл слишком глубоко, но думаю он может многое.
     
    Последнее редактирование: 13.11.18
  6. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    нужно получить путь к директории data, она лежит рядом с директорией bin, в которой находится экзешник службы
     
  7. Zahar661

    Zahar661 Активный участник

    3.122
    588
    ой, во время моего админства делали так, на всех машинах запускали батник, который раз в 5 минут проверял наличие нового скрипта в расширенной папке. и в этут папку складывали новые скрипты которые отрабатывали на всех машинах и что только не делали таким образом.

    PS: доступ к ГП нам москва не давала.
     
  8. Alekssss

    Alekssss Активный участник

    1.302
    65
    On Error Resume Next
    Const wbemFlagReturnImmediately = &h10
    Const wbemFlagForwardOnly = &h20
    arrComputers = Array(".")
    For Each strComputer In arrComputers
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Service", "WQL",wbemFlagReturnImmediately + wbemFlagForwardOnly)
    For Each objItem In colItems
    If objItem.State = "Running" Then
    If InStr(1, objItem.PathName, "pgsql" ,1) <> 0 Then
    res=Split(objItem.PathName, "\", 1, 1)
    WScript.Echo "Caption: " & objItem.Caption
    WScript.Echo "Description: " & objItem.Description
    WScript.Echo "DisplayName: " & objItem.DisplayName
    WScript.Echo "Name: " & objItem.Name
    WScript.Echo "PathName: " & objItem.PathName
    WScript.Echo "ProcessId: " & objItem.ProcessId
    WScript.Echo "State: " & objItem.State
    End If
    End If
    Next
    Next



    Это VBS до делаю чуть позже

    количество вложений подкаталогов постоянное? res=Split(objItem.PathName, "\") разрежет путь до экзешника по "\" первый член массива "С:" последний сам экзешник
     
  9. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    не, на вбс не надо, на вбс я бы мог, надо на повершелле, там для него потом с этой базой задачка будет та еще
     
  10. Alekssss

    Alekssss Активный участник

    1.302
    65
    vbs оболочка данные получаются по WMI который прикрутить к повершел можно, главное чтобы "количество вложений подкаталогов постоянное?", чтобы без доп.анализа
     
  11. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    да, относительный путь всегда постоянный
     
  12. Lord Beaver

    Lord Beaver Активный участник

    1.939
    316
    Но зачем?!
    Есть командлет Get-Service, но там нет нужной вам информации. Поэтому как-то так:
    Код:
    Get-CimInstance Win32_Service -Filter 'Name like "pgsql%" and State = "Running"' | ForEach-Object {
        $BinPath = Split-Path -Path $_.PathName.Replace('"','') -Parent
        $DataPath = Join-Path -Path (Split-Path -Path $BinPath -Parent) -ChildPath "data"
        Out-String -InputObject $BinPath,$DataPath
    }
    upd 11:10 — fix bug
     
    Последнее редактирование: 14.11.18
    gerodoth нравится это.
  13. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    ¯\_(ツ)_/¯ политика компании
     
  14. Alekssss

    Alekssss Активный участник

    1.302
    65
    Сейчас сослан в Красноармейский р-н, до субботы подождет? За выводные постараюсь нарисовать.
     
  15. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    да мне и этого хватит.
    экспериментировать в январе буду только, сейчас к новогодним продажам готовятся, кучу ресурсов на превентивные меры для оптимизации решили натратить.
     
  16. The Chief

    The Chief Активный участник

    11.673
    944
    Get-WmiObject Win32_Service |
    ? {$_.Name -like '*kl*'} |
    Select Name, DisplayName, State,
    @{Name="Path";Expression={$_.PathName.Split('"')[1]}},
    @{Name="Version";Expression={((($_.PathName.Split('"')[1]) | Get-Item).VersionInfo.FileVersion)}} |
    Format-List

    Выводит все службы, где имя попадает под маску *kl* (Касперский) со статусом (запущена или нет). Дальше сами допилите.
     
    Alekssss и gerodoth нравится это.
  17. Alekssss

    Alekssss Активный участник

    1.302
    65
    cls
    #Список компов берется из этого файла c:\computers.txt для теста можно проверить на паре компов
    Get-Content c:\computers.txt | foreach {
    $PathName = Get-WmiObject Win32_Service -ComputerName $_ |
    ? {$_.Name -like '*pgsql*'}
    $PathName = $PathName.PathName.Split('\')
    $i = 0
    $bb = ""
    do{
    $b = $PathName[$i]
    $bb = $bb + $b + "\"
    $i++
    }
    until( $i -eq $PathName.Split('\').Count-2)
    $Path = $bb + "data"#Путь к текущей службе на текущем компьютере, можно писать в лог.
    }
     
    gerodoth нравится это.
  18. The Chief

    The Chief Активный участник

    11.673
    944
    Это шутка?

    Код:
    $bb = [system.String]::Join("\", $Pathname[0..PathName.Length-2])
    Вся фишка PowerShell в дичайшей компактности.
     
  19. reset

    reset Участник

    460
    23
    @Lord Beaver, +1

    Я бы как-то так сделал (всякую правильную обвязку и проверку в расчет не берем - пример же)
    Код:
    $suffix="data"
    function get-service-exe($mask,$computer="localhost")
        {
        (Get-WmiObject -Query "select * from win32_service where name like '$mask' and state = 'Running'" -ComputerName $computer).pathname
        }
    foreach ($path in $(get-service-exe -mask pgsql%))
        {
        $path=Split-Path $path
        if ($path)
            {
            $path=split-path $path
            }
        join-path $path $suffix
        }
     
  20. qwertEHOK

    qwertEHOK Активный участник

    3.092
    57
    Привет, подскажите, есть пример как на ps доставать данные из mssql, и сохранять в CSV/Xlsx?

    Так же интересует чтение из CSV и вставка в mssql построчно.
     
  21. Zahar661

    Zahar661 Активный участник

    3.122
    588
    на C# за час можно прогу накидать такую )

    хотя и на PS тоже)
     
  22. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    на java c hibernate и OpenCSV можно быстро накидать
     
  23. Zahar661

    Zahar661 Активный участник

    3.122
    588
    ооо, зачем так усложнять, CSV это текстовый файл, разделённый определенным делителем, чаще в европе и азии точка с запятой, в США просто запятая, и если текст содержит переносы или разделители в тексте то он заключается в кавычки, но можно всё заключать в кавычки. так что с выводом вообще нет проблем, со считыванием возможно. Вот с XL работать сложнее без библиотек.
     
  24. qwertEHOK

    qwertEHOK Активный участник

    3.092
    57
    мне хотелось бы в виде редактируемого кода, что бы не надо было компилить каждый раз (на делфях я тоже умею exe делать)
    я видел как с базами работают в bat файлах, подумал может родной для MS powershell умеет это лучше

    ну что, господа, примеры есть? или искать на других ресурсах?
     
  25. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    тогда я бы на vba делал прямо из экселя
     
  26. Zahar661

    Zahar661 Активный участник

    3.122
    588
    с экселя можно напрямую к базе подключаться без VBA
     
  27. Alekssss

    Alekssss Активный участник

    1.302
    65
    Чт
    Что VBA, что PS запуск кода в оболочке. Нужно определится как нужно.
     
  28. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    круто, не знал
     
  29. Zahar661

    Zahar661 Активный участник

    3.122
    588
    @gerodoth, ага, делать обновляемые отчёты, можно напрямую к данным или к представлениям, Единственный минус доступ нужен пользователю ко всей базе на чтение и при шаловливых прямых ручках может узнать то что ему не положено. или нужна очень тонкая настройка представлений с авторстовом и ролями, я такие интересности видел в базе микросовфт дайнамикс. прикольно замучено там. сам пока не создавал.
     
  30. gerodoth

    gerodoth Активный участник

    10.423
    1.256
    я обычно с постгресом работаю через 1с, так что мало пригодится, но полезная фича