В моем провайдере Powershell, который является слоем бизнес-логики над базой данных SQL, диски Powershell приравниваются к настройкам подключения к базе данных. Этот набор параметров подключения сохраняется на зашифрованном XML-файле на локальном компьютере. Администратор может добавлять эти диски PS на компьютер, поставляя учетные данные SQL Server, которые другой пользователь Powershell может использовать при написании сценариев. Когда администратор запускает New-PSDrive, я добавляю диск в коллекцию и сохраняю его в XML. Когда они удаляют-PSDrive, я удаляю диск из постоянного XML. Это прекрасно работает. Однако, когда хост Powershell выходит, он вызывает RemoveDrive() для каждого существующего диска. В этот момент я не хочу удалять диски, так как мне нужно, чтобы они сохранялись на компьютере.Как сохранить информацию о драйвере поставщика Powershell?
Как определить, вызывается ли RemoveDrive() пользователем, выполняющим вручную Remove-PSDrive или выходом хоста?
Кроме того, я создал настраиваемые параметры информации о диске, которые хорошо работают, но я также написал настраиваемый командлет, который используется для добавления и удаления дисков. Как я могу создать (и удалить) psdrives из моего командлета?
@keith: Я переопределяю InitializeDefaultDrives(), и в этой функции я загружаю свою коллекцию жестких дисков с диска. Проблема заключается в том, что я должен разрешить сценаристу выполнить Remove-PSDrive (который возвращается к RemoveDrive()), чтобы они могли удалять диски. В этот момент мне нужно удалить этот диск и удалить его из моего xml-файла, так сказать. Однако, когда PowerShell выходит, он также вызывает RemoveDrive() для каждого загруженного диска. В этом случае я не хочу их останавливать. В RemoveDrive(), как узнать, выполняется ли скрипт или запущен Powershell? –
Свойство CmdletProvider.Stopping зависит от того, удаляет ли пользователь или PowerShell диск? –
Keith, вероятно, находится на правильном пути здесь - вы также можете установить флаг, переопределив Stop на провайдере - если флаг установлен, powershell закрывается, но я не уверен, что вызывается первым: provider.stop или remove -psdrive ... – x0n