Что нового

[Файловая система] Копирование файлов в несколько папок

mainfin

Новичок
Сообщения
4
Репутация
0
Здравствуйте.
Версия AutoIt: Production Version: 3.3.6.1

Описание: Нужна довольно простая GUI утилитка, которая будет копировать заранее известные файлы в указанные папки на сервере.
Поясню: есть терминальный сервер, на котором 100 пользователей и время от времени выборочно нужно создавать ярлыки на рабочем столе. В дальнейшем планируется расширение функциональности (блокировка пользователей AD, распечатка doc файлов из удаленной папки и пр. но это позднее)

Я уже начал делать, но доделать до конца не хватает ума (надеюсь пока). К существующему скрипту необходимо добавить возможность указать несколько папок, т.е. указав в поле ввода 101, 123, 140-170 файлы скопировались бы в соответствующие папки \\server\c$\Users\user$переменная\Desktop\

Примечания: Также очень прошу писать комментарии, т.к. цель не просто нахаляву получить готовый инструмент, а именно научиться и в дальнейшем расширить функционал до настоящей консоли управления пользователями. От сюда вторая просьба, если не очень сложно - добавить прогресс бар и/или окно статуса (сколько и куда скопировано, сколько с ошибкой, отображение действий скрипта, одним словом), а также окно настоек или ini файлик из которого бы брался источник для копирования и целевой сервер.
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=C:\DATA\DeployShurtcut.kxf
$Form2 = GUICreate("Deploy Shortcut", 405, 181, 387, 458)
GUISetFont(14, 400, 0, "MS Sans Serif")
$label1 = GUICtrlCreateLabel("Ведите номера", 48, 16, 304, 28)
$input1 = GUICtrlCreateInput("101, 123, 140-170", 48, 64, 297, 32)
$Button1 = GUICtrlCreateButton("Копировать", 112, 112, 169, 41)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
            $sInput1 = GUICtrlRead($input1)
			FileCopy ("\\server\c$\TEST\Shortcuts\*.*", "\\server\c$\Users\"& $sInput1 &"\Desktop\") 



	EndSwitch
WEnd
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
622
http://autoit-script.ru/index.php?topic=124.0


Добавлено:
Сообщение автоматически объединено:

но вообще, раз уж есть наработки, то рекомендую перенести тему в раздел для новичков для допиливания. а то, этот раздел как раз для всего готового. да и шансов получить помощь там выше чем в этом.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
OffTopic:
autoit тут не поможет. начни читать wmi - больше пользы будет для начала.
 
Автор
M

mainfin

Новичок
Сообщения
4
Репутация
0
то рекомендую перенести тему в раздел для новичков для допиливания
Сделано, на самом деле меньше чем нужно допиливаль, плюс боюсь запутаться в подсказках, т.к. с Autoit только начинаю знакомиться.
autoit тут не поможет. начни читать wmi - больше пользы будет для начала.
не очень понял почему. WMI - это больше набор методов управления и мониторинга, а AutoIT - средство взаимодействия. Не вижу возможности замещения.

Сейчас весь функционал реализован на GPO, cmd скриптах и ручной работе, а хотелось бы все это свести в одно приложение.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <array.au3>
#Region ### START Koda GUI section ### Form=C:\DATA\DeployShurtcut.kxf
$Form2 = GUICreate("Deploy Shortcut", 405, 181, 387, 458)
GUISetFont(14, 400, 0, "MS Sans Serif")
$label1 = GUICtrlCreateLabel("Ведите номера", 48, 16, 304, 28)
$input1 = GUICtrlCreateInput("101, 123, 140-170", 48, 64, 297, 32)
$Button1 = GUICtrlCreateButton("Копировать", 112, 112, 169, 41)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            $sInput1 = GUICtrlRead($input1)
			$aA = _ParseInput($sInput1)
			For $Element In $aA
				FileCopy ("\\server\c$\TEST\Shortcuts\*.*", "\\server\c$\Users"& $Element &"\Desktop\")
			Next
    EndSwitch
WEnd

;Все пробелы удаляем
;@error = 1 - пустая строка на входе
;@error = 0 и массив значений
Func _ParseInput($sString = '')
	If $sString = '' Then
		Return SetError(1)
	EndIf
	$sString = StringStripWS($sString, 8)
	Local $sPattern = '(\d+)([-,]*)'
	Local $A = StringRegExp($sString, $sPattern, 3)
	Local $sS = ''
	For $i = 0 To UBound($A) - 1
		If $A[$i] = '' Then
			ContinueLoop
		EndIf
		If StringInStr($A[$i], ',') > 0 Then
			ContinueLoop
		EndIf
		If StringInStr($A[$i], '-') > 0 Then
			For $j = Number($A[$i-1]) + 1 To Number($A[$i+1]) - 1
				$sS &= $j & '|'
			Next
			ContinueLoop
		EndIf
		$sS &= $A[$i] & '|'
	Next
	$A = StringSplit ($sS, '|', 3)
	_ArrayDelete($A, UBound($A)-1)
	Return SetError (0, 0, $A)
EndFunc


ps. wmi - тебе будет нужно (как минимум для этой задачи) для получения списка пользователей, чтобы не вводить их руками (вспоминая), а затем разбирая эту строку.
 
Автор
M

mainfin

Новичок
Сообщения
4
Репутация
0
axlwor спасибо! А Kaster утверждал что в данном разделе мало шансов получить помощь.
А списки пользователей - эт следующий этап, но там не так сложно (кажется).

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

axlwor

Скриптер
Сообщения
657
Репутация
147
остаются
1. блокировка пользователей
2. распечатка доков
3. прочее
? ? ?
ps. мой код комментировать?
 
Автор
M

mainfin

Новичок
Сообщения
4
Репутация
0
Остается добавить прогресс бар и/или окно статуса (сколько и куда скопировано, сколько с ошибкой, отображение действий скрипта, одним словом), а также окно настоек или ini файлик из которого бы брался источник для копирования и целевой сервер.

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

С кодом, в целом понятно, а что конкретно какая функция выполняет попробую сам разобраться.
 
Верх