Ru-Board.club
← Вернуться в раздел «В помощь системному администратору»

» Автоматизация администрирования. Часть 3

Автор: Lovec
Дата сообщения: 11.11.2013 16:03
YNY
Начну с конца.

Цитата:
Еще вариант - ваще не юзать кл /U /P тогда по мануалу должно с правами залог юзара запускаться.

И не юзаю. Я писал выше:

Цитата:
Команда получилась такая:
Schtasks.exe /Create /TN Sample_Task /TR notepad.exe /SC ONCE /ST 23:00 /S <имя_компа> /RU <имя_домена>\<имя_залогиненного_пользователя_домена> /F



Цитата:
либо создать юзера в домене с изв тебе паролем и правами нуного юзера и пусть задание зап он и в таком сл все будет гуд

нет. запускать программу надо именно от залогиненного пользователя.


Цитата:
доступ из сети без пароля ограничен

это знаю, но у меня все пользователи с паролями. в т.ч. залогиненный, просто он мне неизвестен )


Цитата:
Если на компе есть антивир с брандмаером, то при выкл виндового, могет он брать ответственность

на компах только антивирь каспера без функций брандмауэра


Цитата:
просто посмотри, что у тебя в параметрах общего доступа: какой профиль активен и какие там параметры). - это для 7 и т.п.

для Win7 проблемы нет. есть проблема с Windows XP
Автор: laprad
Дата сообщения: 14.12.2013 12:31
Есть батник с функцией периодического переноса файлов ненулевой длины и не имеющих при этом расширения *.part из папки d:\download\ в папку d:\gotovo\.
средствами robocopy вся работа умещается в простейшую строку
robocopy d:\download d:\gotovo /MOV /XF *.part /MIN:1
Однако, robocopy, к сожалению, копирует файлы, а потом удаляет их. в моем случае не нужна такая перестраховка, и хочется обычного "мгновенного" переноса в пределах лог. диска. каким образом этого можно добиться? судя по всему xcopy и xxcopy ведут себя так же, как robocopy
Автор: vlary
Дата сообщения: 14.12.2013 17:47
laprad
Цитата:
Однако, robocopy, к сожалению, копирует файлы, а потом удаляет их.
Естественно с ключом /MOV она их будет удалять.
А без него сделает то, что тебе надо (хотя я не совсем уверен, что ты сам знаешь, что тебе надо )
Автор: laprad
Дата сообщения: 14.12.2013 18:34
vlary
Вы пробовали когда-нибудь переносить ну например 6-гигабайтный файл (чтоб заметнее было) из одной папки в другую в пределах 1 логического диска? практически любой файловый менеджер делает это мгновенно, потому как данные (байтики) файла остаются в своих секторах, меняются только записи в MFT.
Если файл сначала скопировать, и только потом удалить в папке-источнике, как раз и получится то же, что делает robocopy - читает 6 гигабайт, и пишет 6 гигабайт. да, мне жалко ресурса винта и времени. robocopy делает так потому, что процесс становится надежнее, если возникнет проблема еще при чтении файла, то я буду про это извещен. Мне такая надежность не нужна, если авишка будет лежать на бед-секторе, я это переживу

Цитата:
(хотя я не совсем уверен, что ты сам знаешь, что тебе надо )

теперь уверены?



Автор: Lovec
Дата сообщения: 14.12.2013 18:45
laprad
move не подходит? делает все мгновенно.
Автор: laprad
Дата сообщения: 14.12.2013 19:14
Lovec

Цитата:
move не подходит? делает все мгновенно.

к сожалению, с теми ключами что я привел выше в своем примере, это не так. Да и если верить описанию, move просто в отличие от mov после удачного копирования удаляет в источнике не только файлы, но и папки. попробуйте на большом файле. версия robocopy xp026, Win2003R2
Автор: Lovec
Дата сообщения: 14.12.2013 19:25
может вы не так поняли - досовская команда move - никакого робокопи
мгновенно переместила файл в 600 ГБ
Автор: laprad
Дата сообщения: 14.12.2013 21:14
Lovec
теперь я понял. но тогда, для move.exe нужно перебирать файлы.. На основе примеров с инета получился скрипт


Код:
FOR %%i IN (d:\download\*.*) do CALL :MVFILE "%%i"
GOTO :EOF

:MVFILE
If "%~z1"=="" GOTO :EOF
If "%~x1"==".part" GOTO :EOF
If %~z1 GEQ 1 (
    move %1 "d:\gotovo\"
    )
GOTO :EOF
Автор: Lovec
Дата сообщения: 14.12.2013 22:56
laprad
Вообще мне кажется уж утилит для работы с файлами должно быть написано множество.
Неужели кроме робокопи вам ничего не подходит?
Опять же если батник написать можете - напишите простенькую программку на VBS. Это будет совсем не сложнее.


Добавлено:
Взять хотя бы такую замечательную тулзу как TerraCopy.
Она через командную строку так же замечательно перемещает файлы.
Например, так:
TeraCopy.exe Move D:\111\film.avi D:\222
Автор: laprad
Дата сообщения: 15.12.2013 15:45
Lovec

Цитата:
Вообще мне кажется уж утилит для работы с файлами должно быть написано множество

да, всегда кажется что программ дофига, но когда начнешь подбирать под реальную задачу, быстро наступает облом. тот же robocopy был бы более чем идеален, ЕСЛИ БЫ имел режим переноса файлов как у move.exe.

Цитата:
Взять хотя бы такую замечательную тулзу как TerraCopy.

хм, разве в TerraCopy можно задать условие "переносить только ненулевые файлы с расширением не *.part"? если нельзя, то зачем он нужен? байты ведь гонять туда-сюда не надо, снова подчеркну, все действо происходит в пределах одного лог. диска. вопрос как ускорить поиск файлов в папке по вышеприведенным условиям. а с готовым списком файлов, как вы верно подсказали, и move отлично справится

Цитата:
напишите простенькую программку на VBS

сдается мне, не будет он быстрее чем cmd, "FOR %%i IN" заменится на "For Each File", но в принципе-то останется тупой перебор в списке файлов?..
Автор: vlary
Дата сообщения: 15.12.2013 17:42
laprad
Цитата:
да, всегда кажется что программ дофига, но когда начнешь подбирать под реальную задачу, быстро наступает облом.
Все правильно, обычно подобные программы написаны для наиболее часто востребованных задач,
возникающих у 90% юзеров.
На специфические задачи специфического контингента они не рассчитаны.
Для этого люди обычно сами пишут себе программу под конкретную свою задачу.
Которая больше ничего не умеет, но нужную задачу выполняет на ура.
То, что требуется в данном случае, пишется програмером средней руки, имеющим представление о Win32 API и C++, за полчаса.
Можно также сделать на C# либо PoverShell, преимущество - не нужна среда разработки, ибо все уже есть.

Цитата:
но в принципе-то останется тупой перебор в списке файлов?..
А тебе что надо? У тебя там только 2 типа файлов: которые нужно перемещать, и которые - нет.
Определяется это либо расширением файла, либо нулевой длиной.
Так что по-любому будет именно тупой перебор.
Да и собственно, куда и зачем тебе спешить?
Автор: YNY
Дата сообщения: 16.12.2013 04:41
laprad
Я ваще не понимаю такого изврата, куда проще тупо упорядочить по типу и не ерзать!
Автор: daMIR
Дата сообщения: 11.03.2014 13:11
Привет всем! Прошу помощи, задача вроде простая, но точно не знаю как надо.
Нужно пройтись по компьютерам в сети (список в txt), узнать размер конкретного файла в строго определенной директории и записать в виде имя компа - размер файла. Если до компа/файла не удалось достучаться, записать отдельно. Права на просмотр файла есть, в том числе к c$ сеть AD

Начал с постройки конструкции в cmd

ECHO OFF
setlocal ENABLEEXTENSIONS
for /f %%a in ('dir /b /s /a-d "\\my_superserver\share\*"') do (
if %%~za GTR 5000000 (

)
)

Или подскажите какой батник можно взять за пример.
Автор: HumpSoft
Дата сообщения: 11.03.2014 16:22
daMIR

Код:
# check_file.ps1
$list = get-content "c:\Scripts\my_hosts.txt"
foreach ($my_host_UNC_path in $list)
{
$my_host_UNC_path="\\$my_host_UNC_path\xxx\yyy.txt"
if (test-path $my_host_UNC_path )
{Write-Host $my_host_UNC_path, ((Get-ChildItem -path $my_host_UNC_path).Length) }
else
{Write-Host $my_host_UNC_path, "error connect" }
}
Автор: daMIR
Дата сообщения: 14.03.2014 00:44

Цитата:
сойдет?

Спасибо, попробую разобраться.
не совсем правда ясно, где какие переменные..


С помощью гугла накатал такой скрипт, правда он не работает..



Ну вот, сделал сам Работает.

Код:
echo
setlocal ENABLEEXTENSIONS
Set PC=.\PC_list.txt
Set PCoff=.\PC_OFF.txt
Set LBase=.\ListBase.txt
Set Put=c$\base\1.db

For /F "UseBackQ Delims=" %%i In ("%PC%") Do (
Ping -n 1 %%i >Nul
If Not ErrorLevel 1 (
     for %%L in (\\%%i\%Put%) do Echo %%i >>%LBase% %%~zL>>%LBase%
) Else Echo %%i >>%PCoff%
)
Автор: YNY
Дата сообщения: 16.03.2014 08:39

Цитата:
daMIR

вроде cmd не работает с UNC - сетевыми, путями!
Автор: daMIR
Дата сообщения: 17.03.2014 08:25
YNY
Ну в данном случае точно работает Размер файла исправно записывает в текстовик. Проверял выборочно- данные корректные.
Автор: HumpSoft
Дата сообщения: 17.03.2014 09:48
daMIR это PowerShell . ежли чо )))

Всего 2 переменные - $list - массив имен хостов (прочитан из файла)
$my_host_UNC_path - изначально содержит имя хоста, потом превращается в unc путь проверяемого файла

перенаправить вывод данных в файл можно с помощью туннелирования в командлет
out-file

типа так:

Код:
# check_file1.ps1
$list = get-content "c:\Scripts\my_hosts.txt"
Write-Output ("path" + ";" + "size") | out-file -Encoding utf8 -filepath c:\scripts\log.scv
foreach ($my_host_UNC_path in $list)
{
$my_host_UNC_path="\\$my_host_UNC_path\xxx\yyy.txt"
if (test-path $my_host_UNC_path )
{Write ($my_host_UNC_path+";"+((Get-ChildItem -path $my_host_UNC_path).Length))| out-file -append -Encoding utf8 -filepath c:\scripts\log.scv }
else
{Write ($my_host_UNC_path+";"+"ERR") | out-file -append -Encoding utf8 -filepath c:\scripts\log.scv }
}

Автор: king_stiven
Дата сообщения: 22.06.2014 19:22
Есть такая программа
Process Monitor
http://technet.microsoft.com/ru-ru/sysinternals/bb896645
http://download.sysinternals.com/files/ProcessMonitor.zip
Она показывает, какой файл читает определённая программа, мне нужен аналог в комстроке.
Автор: Alukardd
Дата сообщения: 22.06.2014 19:50
king_stiven
Вроде как другая утилита от SysInternals могёт оное — Handle
Автор: king_stiven
Дата сообщения: 22.06.2014 20:39
Да, но, сцуко, кириллицу не понимает в путях.
Автор: Alukardd
Дата сообщения: 22.06.2014 21:08
king_stiven
винда)))
Автор: YNY
Дата сообщения: 24.06.2014 13:50
на povershel ты могешь много чего увидить и отсортировать вне зависимости от локализации
Автор: vlary
Дата сообщения: 02.07.2014 13:51
StNastya На вопрос Не получается запустить 2 скрипта при входе в домен
Настя, раз уж вы решили заняться столь трудным и неблагодарным делом,
откройте для себя такую вещь, как WSF:
Using Windows Script Files (.wsf)
Пример WSF файла testscript.wsf:

Код: <job id="IncludeExample">
<script language="JavaScript" src="sprintf.js"/>
<script language="VBScript" src="logging.vbs"/>
<script language="VBScript" src="iis-queryScriptMaps.vbs"/>
</job>
Автор: YNY
Дата сообщения: 14.07.2014 17:03

Цитата:
vlary

Ну ты ваще гонишь! В приведенном примере в корне не верные действия, т.к. для запуска скриптов пути должны быть UNC, а не локальные!!!
Автор: CHIEFlab
Дата сообщения: 15.07.2014 17:35
помогите со скриптом отправки сообщения на почту. Прописана авторизация на smtp сервер. Но при запуске говорит что "503 authentication required"

Код: compName = "Днепропетровск"        ' имя компьютера/сервера
Quota = 20                ' порог в Гб
strSMTP_Server = "mail.mail.com"    ' SMTP сервер
strSMTPPort = "25"
strSMTP_user = "111@111"    ' логин пользователя для SMTP сервера
strSMTP_password = "1111"        ' пароль пользователя для SMTP сервера
strTo = "111@111.com"            ' e-mail куда отсылаем предупреждение
strFrom = "111@1111.com"    ' от кого
strSubject = "Заканчивается свободное место на диске " & compName    ' тема сообщения
strBody = "Превышен лимит на диске"    ' текст сообщения
needSentMail = 0            ' флаг, что требуется слать письмо - достигнут лимит
DriveLetters = "C|E|F|G|H"        ' список дисков для проверки

DriveLettersArray = Split (DriveLetters,"|")    ' сделаем массив с буквами отслеживаемых дисков

For Each DriveLettersArray in DriveLettersArray

    Set fso = WScript.CreateObject("Scripting.FileSystemObject")
    Set WSHShell = WScript.CreateObject("WScript.Shell")
    Set Drive = fso.GetDrive(DriveLettersArray)
    free = Int((fso.GetDrive(drive).FreeSpace/(1024*1024*1024))) ' кол-во свободных Гб на винте

    If free < Quota Then
needSentMail = 1
strBody = strBody & vbNewLine & "Свободное место на диске " & DriveLettersArray & " меньше чем квота " & Quota & " Gb (" & free & " Gb)"
'MsgBox strBody
    End If

Next

    ' если флаг был изменен, то уведомим по е-майлу администратора
    If needSentMail = 1 Then
        
        Set iMsg = CreateObject("CDO.Message")
        Set iConf = CreateObject("CDO.Configuration")
        Set Flds = iConf.Fields
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        'Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTP_Server
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = strSMTPPort
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/SMTPAuthenticate") = cdoBasic
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/SendUserName") = strSMTP_user
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/SendPassword") = strSMTP_password
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10
        Flds.Update
        iMsg.Configuration = iConf
        iMsg.To = strTo
        iMsg.From = strFrom
        iMsg.Subject = strSubject
        iMsg.TextBody = strBody
        iMsg.Send
        
        

    End If
Автор: Vby
Дата сообщения: 15.07.2014 20:17
CHIEFlab
раскомментировать строку:
'Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1

Автор: CHIEFlab
Дата сообщения: 17.07.2014 16:37
Vby

Код: compName = "Днепропетровск"        ' имя компьютера/сервера
Quota = 20                ' порог в Гб
strSMTP_Server = "mail.mail.com"    ' SMTP сервер
strSMTPPort = "25"
strSMTP_user = "from@mail.com"    ' логин пользователя для SMTP сервера
strSMTP_password = "pass"        ' пароль пользователя для SMTP сервера
strTo = "to@mail.com"            ' e-mail куда отсылаем предупреждение
strFrom = "from@mail.com"    ' от кого
strSubject = "Заканчивается свободное место на диске " & compName    ' тема сообщения
strBody = "Превышен лимит на диске"    ' текст сообщения
needSentMail = 0            ' флаг, что требуется слать письмо - достигнут лимит
DriveLetters = "C|E|F|G|H"        ' список дисков для проверки

DriveLettersArray = Split (DriveLetters,"|")    ' сделаем массив с буквами отслеживаемых дисков

For Each DriveLettersArray in DriveLettersArray

    Set fso = WScript.CreateObject("Scripting.FileSystemObject")
    Set WSHShell = WScript.CreateObject("WScript.Shell")
    Set Drive = fso.GetDrive(DriveLettersArray)
    free = Int((fso.GetDrive(drive).FreeSpace/(1024*1024*1024))) ' кол-во свободных Гб на винте

    If free < Quota Then
needSentMail = 1
strBody = strBody & vbNewLine & "Свободное место на диске " & DriveLettersArray & " меньше чем квота " & Quota & " Gb (" & free & " Gb)"
'MsgBox strBody
    End If

Next

    ' если флаг был изменен, то уведомим по е-майлу администратора
    If needSentMail = 1 Then
        
        Set iMsg = CreateObject("CDO.Message")
        Set iConf = CreateObject("CDO.Configuration")
        Set Flds = iConf.Fields
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTP_Server
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = strSMTPPort
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/SMTPAuthenticate") = cdoBasic
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/SendUserName") = strSMTP_user
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/SendPassword") = strSMTP_password
        Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10
        Flds.Update
        iMsg.Configuration = iConf
        iMsg.To = strTo
        iMsg.From = strFrom
        iMsg.Subject = strSubject
        iMsg.TextBody = strBody
        iMsg.Send
        
        

    End If
Автор: Vby
Дата сообщения: 17.07.2014 20:05
CHIEFlab
Попробуй так:

Код:
compName = "Днепропетровск" ' имя компьютера/сервера
Quota = 20 ' порог в Гб
strSMTP_Server = "mail.mail.com" ' SMTP сервер
strSMTPPort = "25"
strSMTP_user = "from@mail.com" ' логин пользователя для SMTP сервера
strSMTP_password = "pass" ' пароль пользователя для SMTP сервера
strTo = "to@mail.com" ' e-mail куда отсылаем предупреждение
strFrom = "from@mail.com" ' от кого
strSubject = "Заканчивается свободное место на диске " & compName ' тема сообщения
strBody = "Превышен лимит на диске" ' текст сообщения
needSentMail = 0 ' флаг, что требуется слать письмо - достигнут лимит
DriveLetters = "C|E|F|G|H" ' список дисков для проверки

DriveLettersArray = Split (DriveLetters,"|") ' сделаем массив с буквами отслеживаемых дисков

For Each DriveLettersArray in DriveLettersArray

Set fso = WScript.CreateObject("Scripting.FileSystemObject")
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set Drive = fso.GetDrive(DriveLettersArray)
free = Int((fso.GetDrive(drive).FreeSpace/(1024*1024*1024))) ' кол-во свободных Гб на винте

If free < Quota Then
needSentMail = 1
strBody = strBody & vbNewLine & "Свободное место на диске " & DriveLettersArray & " меньше чем квота " & Quota & " Gb (" & free & " Gb)"
'MsgBox strBody
End If

Next

' если флаг был изменен, то уведомим по е-майлу администратора
If needSentMail = 1 Then

Set objEmail = CreateObject("CDO.Message")
objEmail.Bodypart.CharSet = "windows-1251"
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = strSMTP_user
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strSMTP_password
objEmail.From = strFrom
objEmail.To = strTo
objEmail.Subject = strSubject
objEmail.Textbody = strBody
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTP_Server
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send



End If
Автор: CHIEFlab
Дата сообщения: 22.07.2014 17:26
Vby
Большое спасибо, работает )))

Страницы: 1234567891011

Предыдущая тема: Не Работает сканер по сети HP 3055


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.