2015-12-10 4 views
0

Я хочу удалить все локально сохраненные профили пользователей при выходе из системы с помощью сценария Powershell. У меня есть следующий сценарий:Удаление всех локально сохраненных профилей пользователей при выходе из системы

Set-ExecutionPolicyRemoteSigned[gc]::collect() 
cmd /c start reg unload "HKCU"Remove-PSDrive HKCU import-module C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ManageUserProfiles\ManageUserProfiles.PSM1 
get-userprofile |where{ $_.SID -ne ("S-1-5-21-3071724114-2656578308-4228372245-500")} | remove-userprofile 

Я полный новичок в powershell. Так может кто-нибудь сказать мне, соответствует ли этот сценарий моим потребностям и как он работает? И не могли бы вы также объяснить, что означает $_.SID -ne ("S-1-5-21-3071724114-2656578308-4228372245-500"). Заранее спасибо.

+0

SID: S-1-5-21domain-500 Имя: Администратор Описание: Учетная запись пользователя для системного администратора. По умолчанию это единственная учетная запись пользователя, которая получает полный контроль над системой. –

+0

Источник: https://support.microsoft.com/en-us/kb/243330 –

+0

Что касается самого скрипта, я тоже не профессионал, но похоже, что он удалит профили администратора только на вашем компьютере. –

ответ

0

Я не знаком с модулем, который вы используете, и похоже, что это должно быть 6 строк не 3 (вставить разрыв до [gc], до Remove-PSDrive и до Import-Module).

Дальше, укажите промежуток между Set-ExecutionPolicy и RemoteSigned.

Теперь скрипт собирает профили пользователей, передает их через оператор Where, который исключает учетную запись администратора из списка профилей, а затем удаляет все остальные профили. Давайте пройдем через это ...

Set-ExecutionPolicy RemoteSigned 

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

[gc]::collect() 

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

cmd /c start reg unload "HKCU" 

Это использует приложение REG.EXE командной строки выгрузить улей HKEY_CURRENT_USER внутри текущего набора реестра. Это нужно сделать, прежде чем удалять профиль, поскольку вы не можете удалять файлы, которые используются.

Remove-PSDrive HKCU 

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

C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ManageUserProfiles\ManageUserProfiles.PSM1 

Это загружает модуль «Управление профилями пользователей». Я не знаком с модулем, но вам нужно убедиться, что у вас установлен этот модуль на компьютере, на котором он запущен, поэтому, если вы используете это на всех своих компьютерах, вам необходимо установить этот модуль на всех ваших компьютеров.

get-userprofile |where{ $_.SID -ne ("S-1-5-21-3071724114-2656578308-4228372245-500")} | remove-userprofile 

Это команда только что загруженного модуля. Я предполагаю, что пользовательские профили станут своего рода пользовательским объектом, а затем он подключится к оператору Where, который исключает учетную запись администратора, заявив, что он разрешает только объекты профиля (-ne - это оператор «не равен») имеют свойство SID, равное «S-1-5-21-3071724114-2656578308-4228372245-500». Таким образом, все профили пользователей, кроме профиля учетной записи администратора, затем передаются в команду Remove-UserProfile, что, вероятно, может предполагать удаление каждого профиля, который был отправлен на него.

Надеюсь, это объясняет, что делает ваш сценарий.

+0

Отличный ответ. Благодарю. – user5103877

+0

Еще одно сомнение. Как мне его запустить? – user5103877

+0

Запустите 'powershell_ise', скопируйте, вставьте, нажмите' F5' для запуска, молитесь. – sodawillow

Смежные вопросы