пятница, 5 февраля 2016 г.

test service presence  in computers from dhcp leases file
проверяем наличие сервиса на компах из лиза dhcp


clear
$ping = new-object System.Net.NetworkInformation.Ping
function Test-Host ($Name)
{
try
{
     if ($ping.send($Name).Status -eq "Success" ) { $True }
}
    catch{ $False }
}

$hashimported=@{}
import-csv c:\temp\dhcp-leases-18.01.16.csv | sort-object name | where {$_.name -like "COMP-*"} | %{$hashimported[$_.name]=$_.ip}

foreach($computer in $hashimported.keys|sort)
{
 if(test-host($computer))
 {
  try{
  $getservice=get-wmiobject -query "select * from win32_service where name like '%zservice%'" -computername $computer -ErrorAction Stop
  }
  catch {($computer)+" "+$error[0].exception.message}

  if(!$getservice)
    {
($computer)+" Сервис не обнаружен!"
    }
  }
  else
  {
  ($computer)+" PING не прошел!"
  }
 }

среда, 27 января 2016 г.

Function for view directory/es access rights
Функция возвращает хэш в котором ключ - имя директории, значение - массив AccessRights

function get-diraccess
{
 param(
  [string]$path, 
  [switch] $recurse,
  [switch] $verbose
  )
if($recurse){
 $dirs=get-childitem $path -Recurse | ?{ $_.PSIsContainer }}
else{$dirs=get-childitem $path | ?{ $_.PSIsContainer }}

if(!$dirs){return}
$result=@{}
foreach($dir in $dirs)
 {
  $result.add($dir.fullname,@($dir.getAccessControl().Access))
 }

 if($verbose)
 {
  foreach($i in $result.keys)
   {$msg+=$i+"`n";
   foreach($j in $result[$i]){
   $msg+="`t"+($j.IdentityReference)+" - "+($j.filesystemrights)+"`n"}
   }
   Write-Host $msg
 }

 return $result
}

С возвращенным хэшем удобно работать используя Enumerator поша


$a=get-diraccess -path "c:\temp\" -verbose
$enum=$a.keys.getenumerator()
$enum.movenext()
$enum.key
$enum.value

четверг, 14 января 2016 г.

Узнать кто сейчас залогинен на удаленном компе (logged user)
(gwmi Win32_ComputerSystem -ErrorAction SilentlyContinue -ComputerName COMPNAME001).UserName

Старт службы
(get-wmiobject win32_service -filter "name='WinRM'" -computername COMPNAME001).StartService()

Если вылетает ошибка WinRM
$winrmservice=Get-WmiObject Win32_Service -ComputerName COMPNAME001 -filter "name='winrm'"
$winrmservice.startservice()

wbemtest  --- отличная утилита windows для WMI

вторник, 20 октября 2015 г.

show disabled users and not hiden from address book (include witout mailbox)
get-mailbox -ResultSize Unlimited * | where {(-not $_.HiddenFromAddressListsEnabled) -and (-not (get-aduser $_.samaccountname).enabled)} | sort-object name | select name, alias

вторник, 11 августа 2015 г.

четверг, 6 августа 2015 г.

сразу несколько штук для памяти:
работа в скрипте с длинными именами+пробелы (linux bash)

#!/bin/bash
find /tmp -name "*.gz" -type f -print0 | while read -d $'\0' i
do
  gzip -d "$i"
done

=========

приравнять пользователя по правам и затем отобрать их назад(windows powershell)
# {}.memberof <===> Select-Object -ExpandProperty memberof ------ выбор объекта
#сохраняем текущие группы в файл
(Get-ADUser -Identity SaraDavis -property memberof).memberof | export-clixml SaraDavis-memberof.xml
#назначаем
(Get-ADUser -Identity User123 -property memberof).memberof | Add-ADGroupMember [-members] SaraDavis[,User2,User3]

#а теперь отбираем
$old1=import-clixml SaraDavis-memberof.xml
foreach($i in (Get-ADPrincipalGroupMembership -Identity SaraDavis -property memberof).memberof){
  if(-not($old1 -contains $i)){"$i" | Remove-ADGroupMember SaraDavis}}


profit

четверг, 11 июня 2015 г.

Чистим неиспользуемые почтовые каталоги postfix
postfix работает с mysql.
в каталоге /var/mail которую он обслуживает находятся каталоги доменов:
/var/mail
   domain1.ru
   domain2.com
   domain3.org

в этих каталогах хранятся много пользовательских каталогов, хозяева которых уже уволились или не пользуются посфиксом. Задача их вычистить. Т.е. сопоставить таблицу aliases поле address из базы postfix и структуры каталогов для домена. Вывести тех кто отсутствует в этом поле, но чей каталог присутствует в /var/mail/domainX.XXX

#!/usr/bin/env python
# -*- coding: utf8 -*-

import mysql.connector
from mysql.connector import Error
import sys,os
import subprocess

mysqlserver="192.168.0.1"
mysqldb="postfix"
mysqluserlogin="user"
mysqluserpasword="password"


"""
# задел на работу по ssh - пока не используем
def ssh_command(HOST,KEYS,COMMAND):
   print("ssh %s %s %s" % (KEYS,HOST,COMMAND))
   ssh = subprocess.Popen(["ssh %s" % KEYS, "%s" % HOST, COMMAND],
                       shell=False,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE)
   result = ssh.stdout.readlines()
   if result == []:
       error = ssh.stderr.readlines()
       print >>sys.stderr, "ERROR: %s" % error
   else:
       return result
   return
"""

rowmails=[]
rowdomains=[]

try:
   conn = mysql.connector.connect(host=mysqlserver,
                                   database=mysqldb,
                                   user=mysqluserlogin,
                                   password=mysqluserpasword)
   if conn.is_connected():
            print('Connected to MySQL database')
   cursor = conn.cursor()

   cursor.execute("SELECT address FROM alias where domain = 'domain1.ru'")
   row=cursor.fetchone()

   while row is not None:
      rowmails.append(row[0])
      row=cursor.fetchone()

except Error as e:
        print(e)
finally:
    conn.close()

if len(rowmails)<=0:
   print("sql query returns zero rows")
   sys.exit(1)

MAILDIR="/var/mail/domain1.ru/"
for f in os.listdir(MAILDIR):
   if os.path.isdir(MAILDIR+f):
       if f not in rowmails:
           print(MAILDIR+f)
sys.exit(0)