вторник, 14 июля 2015 г.

Windows PowerShell массовое копирование файла по папкам, с проверкой по размеру и с исключением некоторых папок

Задача: есть самописная программа, обновляемая перезаписью нового exe-файла. Установлена у более 10 пользователей в сетевую папку для каждого пользователя вида \\programs\userN\programma. Также в папку programma вложена папка install, в которой есть установочный файл с таким же именем, который требуется обновлять. Требуется из папки, в которой будет лежат новый файл и сам скрипт, запускать копирование в сетевые папки пользователей, причем в папке install не перезаписывать, обновленные файлы также не перезаписывать. То что файл обновлен, сверяем по размеру файла. Процесс нужно логировать.

Решение:
# сетевой каталог, в котором папки пользователей с программами
$PathToPrograms = "\\dfs\programs"

# файл должен лежать в каталоге запуска *.ps1
$FileForUpdate = "file.exe"

# вычисляем размер нового файла
$SizeFileForUpdate = (ls $FileForUpdate).Length

# формируем имя лога
$CurrentDate = Get-Date -Format "dd-MM-yyyy"
$PathLOG = "backup-" + $CurrentDate +".log"

# Создание пустого файла лога, с перезаписью при наличии старого
New-Item $PathLOG -ItemType file -Force

# не обновлять в папке install, не обновлять уже обновленные. Для лога печатаем полный путь и размер
ls $PathToPrograms -File $FileForUpdate -Recurse -Force | foreach `
     # исключаем файлы, в пути содержащие install
   { if( -Not ([string]$_.FullName).Contains("install") -and `
                     $_.Length -ne $SizeFileForUpdate) `
       # логирование полного пути и размера файла до копирования
       {Out-File -FilePath $PathLOG -InputObject $_.Fullname, "Было: ", $_.Length `
                                                                                         -Append -encoding unicode
     
        # логирование через конвеер, PassThru - выводит подробную информацию
        Copy-Item $FileForUpdate -Destination $_.FullName -PassThru | `
                                         Out-File -FilePath $PathLOG -Append -encoding unicode } }

понедельник, 13 июля 2015 г.

Windows XP включение NAT

Используем для создания софтового роутера. Есть VPN, поднятый на компьютере с XP с помощью клиента CiscoVPN, который нужно раздать по сети. На компьютерах в сети прописываем постоянный маршрут сети VPN и шлюз - софтроутер. Далее, настройки для этого роутера:

  1. проверяем что запущен сервис "Маршрутизация и удалённый доступ" ("Routing and Remote Access"), и его режим запуска - "Авто".
  2. HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\Tcpip\Parameters  "IPEnableRouter=1"
  3. netsh routing ip nat install
  4. netsh routing ip nat show global  если сообщение "NAT должен быть установлен первым" , то перезагрузка
  5. netsh routing ip nat add interface "VPN" full  где "VPN" - название сетевого соединения, которое нужно раздать. Его можно посмотреть и скопировать в сетевых подключениях. Данную команду можно выполнить для более чем одного интерфейса, организовав маршрутизацию для нескольких сетей.
  6. netsh routing ip nat add interface "LAN" private  где "LAN" - название сетевого соединения для локальной сети, которая натится.


взято отсюда