Запустите команду как системный пользователь в Powershell
Я нашел несколько ответов в Интернете, но не совсем то, что искал.
Проблема заключается в следующем: при восстановлении файла с помощью "Networker" списки ACL файла те же, что и при резервном копировании файла, относящиеся к наследованию в папке, в которую восстанавливается файл. Значение наследования ACL не влияет на вновь восстановленный файл.
Это оставляет меня с проблемой, что только 3 учетных записи имеют право изменять ACL.
- Пользователь, которому принадлежит файл
- Администраторы домена
- Системный аккаунт
Чтобы решить эту проблему, я хотел бы запустить автоматический скрипт, исправляющий ACL и активирующий правильное наследование.
Системный пользователь для скрипта должен быть одним из трех. Пользователь изменяется и поэтому не является правильным выбором, также я не хочу оставлять какие-либо учетные данные администратора домена или предоставлять права администратора домена учетной записи службы.
Это оставляет мне системную учетную запись для выполнения работы, и здесь возникает вопрос:
Как выполнить задачу в powershell под учетными данными системной учетной записи?
Я старался
$username = "NT Authority\System"
$password = ConvertTo-SecureString -String "" -AsPlainText -Force
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist @($username, $password)
Поскольку пароль пустой, я не могу создать учетные данные с его помощью.
Имя учетной записи во всех локалях -.\LocalSystem. Имя, LocalSystem или ComputerName\LocalSystem также могут быть использованы. Эта учетная запись не имеет пароля. https://msdn.microsoft.com/de-de/library/windows/desktop/ms684190(v=vs.85).aspx
Так что теперь я немного смущен тем, как я могу заставить это работать.
Изменить: Файловая система работает на EMC и не является настоящей файловой системой Windows, а просто подключена к системе Linux. Так что нет учетной записи локального администратора.
TL; DR
Я хочу наследовать разрешения ACL для файлов, используя системную учетную запись PowerShell, как?
2 ответа
https://github.com/mkellerman/Invoke-CommandAs
Сделал функцию Invoke-Command для локального / удаленного компьютера с использованием предоставленных учетных данных или SYSTEM. Возвращает PSObjects, обрабатывает сетевые прерывания и решает любые проблемы Double-Hop.
Попробуйте, дайте мне знать, если это решит ваши проблемы.
Если у вас все в порядке с установкой (очень полезной) сторонней программы, вы можете попробовать следующее. Это портативный.zip, никакой реальной установки.
Запустить от имени администратора:
C:\WINDOWS\system32>nircmd.exe elevatecmd runassystem c:\windows\System32\cmd.exe
запускает новое окно cmd:
Microsoft Windows [Version 10.0.18362.418]
(c) 2019 Microsoft Corporation. All rights reserved.
C:\WINDOWS\system32>whoami
nt authority\system
C:\WINDOWS\system32>
Администраторы домена получают доступ через локальную группу администраторов. Локальные администраторы могут стать владельцами любого локального объекта и впоследствии предоставить новые разрешения этому объекту.
Запуск чего-то вроде этого от имени администратора должен делать то, что вы хотите:
takeown /f C:\some\file_or_folder /a /r /d:y
icacls C:\some\file_or_folder /reset /t /c /q
Никогда не используйте учетную запись SYSTEM для таких вещей.