#python #windows #backup #archive
#питон #Windows #резервная копия #Архив
Вопрос:
Скрипт должен архивировать файлы с некоторых компьютеров. Файлы находятся на разных компьютерах, подключенных к сети. Компьютер, на котором выполняется скрипт, должен получить доступ к каждой отдельной станции, заархивировать некоторые файлы, сохранить их на сервере и удалить предыдущую резервную копию. Все машины работают под управлением Windows 10. И у каждой машины разные учетные записи. Пример: машина 1 пользователь: пропуск администратора: администратор машина 2 пользователь: пропуск администратора: администратор
Любая идея, как я могу получить доступ к какому-либо компьютеру от имени конкретного пользователя. (atm Я открываю каждый путь на исполнительном компьютере, в Windows регистрируюсь как какой-то пользователь и использую «запомнить учетные данные», а затем сценарий работает.
Код:
def main_backup_engine(MACHINE_ID,OBJECT_TO_BACKUP,BACKUP_DIRECTORY): MAX_BACKUP_AMOUNT = 1 # The maximum amount of backups to have in BACKUP_DIRECTORY object_to_backup_path = Path(OBJECT_TO_BACKUP) backup_directory_path = Path(BACKUP_DIRECTORY) assert object_to_backup_path.exists() # Validate the object we are about to backup exists before we continue # Validate the backup directory exists and create if required backup_directory_path.mkdir(parents=True, exist_ok=True) # Get the amount of past backup zips in the backup directory already existing_backups = [ x for x in backup_directory_path.iterdir() if x.is_file() and x.suffix == '.zip' and x.name.startswith('backup-' MACHINE_ID) ] # Enforce max backups and delete oldest if there will be too many after the new backup oldest_to_newest_backup_by_name = list(sorted(existing_backups, key=lambda f: f.name)) while len(oldest_to_newest_backup_by_name) gt;= MAX_BACKUP_AMOUNT: # gt;= because we will have another soon backup_to_delete = oldest_to_newest_backup_by_name.pop(0) backup_to_delete.unlink() # Create zip file (for both file and folder options) backup_file_name = f'backup-{MACHINE_ID}-{datetime.now().strftime("%Y-%m-%d_%H-%M-%S")}-{object_to_backup_path.name}.zip' zip_file = zipfile.ZipFile(str(backup_directory_path / backup_file_name), mode='w') if object_to_backup_path.is_file(): # If the object to write is a file, write the file zip_file.write( object_to_backup_path.absolute(), arcname=object_to_backup_path.name, compress_type=zipfile.ZIP_DEFLATED ) elif object_to_backup_path.is_dir(): # If the object to write is a directory, write all the files for file in object_to_backup_path.glob('**/*'): if file.is_file(): zip_file.write( file.absolute(), arcname=str(file.relative_to(object_to_backup_path)), compress_type=zipfile.ZIP_DEFLATED ) # Close the created zip file zip_file.close() try: main_backup_engine(MACHINE_ID='PC Name', OBJECT_TO_BACKUP='IP Address', BACKUP_DIRECTORY='Backup DIR') except: print("Targeted Machine is offline")