При временном хранении текста в переменных PowerShell во время выполнения, каков наиболее эффективный способ удаления содержимого переменных из памяти, когда они больше не нужны?
Я использовал как Clear-Item variable:
, так и Remove-Variable
, но как быстро что-то удаляется из памяти с помощью последнего по сравнению с обнулением содержимого памяти с помощью первого?
РЕДАКТИРОВАТЬ: я должен был сделать это немного яснее, почему я спрашиваю.
Я автоматизирую вход RDP для группы виртуальных машин приложений (приложение не работает как служба, сторонние разработчики, длинная история).
Итак, разрабатываю (в основном закончил) скрипт для группировки сессий запуска на каждую из ВМ.
Идея состоит в том, что функция скрипта, хранящая учетные данные, использует read-host
для запроса имени хоста, а затем get-credentials
для выбора домена/пользователя/пароля.
Затем проход преобразуется из защищенной строки с использованием 256-битного ключа (ключ времени выполнения, уникальный для машины/пользователя, который сохранил учетные данные и запускает групповой запуск).
Имя ВМ, домен, пользователь и зашифрованный пароль хранятся в файле. При запуске сеанса данные считываются, пароль расшифровывается, данные передаются в cmdkey.exe
для хранения учетных данных \generic:TERMSRV
для этой виртуальной машины, очищается переменная передачи открытого текста, запускается mstsc для этого хоста, через несколько секунд удаляются учетные данные из хранилища учетных данных Windows. (Если бы я передал пароль cmdkey.exe как что-либо, кроме открытого текста, сеанс RDP либо получил бы неверные учетные данные, либо не получил бы их).
Итак, отсюда вопрос: мне нужно, чтобы пароль в открытом виде существовал в памяти как можно меньше времени.
Чтобы ребята из службы безопасности были довольны, сам скрипт зашифрован с помощью aes256, а оболочка c# с собственным хостом ps читает, расшифровывает и запускает скрипт, поэтому на машине, на которой он выполняется, нет источника открытого текста. (Зашифрованный источник в общем файле настолько эффективен, что у меня есть переключатель уничтожения, я могу просто заменить зашифрованный скрипт другим, отображающим сообщение о том, что это приложение отключено)