2009-08-11 3 views
1

В моем провайдере Powershell, который является слоем бизнес-логики над базой данных SQL, диски Powershell приравниваются к настройкам подключения к базе данных. Этот набор параметров подключения сохраняется на зашифрованном XML-файле на локальном компьютере. Администратор может добавлять эти диски PS на компьютер, поставляя учетные данные SQL Server, которые другой пользователь Powershell может использовать при написании сценариев. Когда администратор запускает New-PSDrive, я добавляю диск в коллекцию и сохраняю его в XML. Когда они удаляют-PSDrive, я удаляю диск из постоянного XML. Это прекрасно работает. Однако, когда хост Powershell выходит, он вызывает RemoveDrive() для каждого существующего диска. В этот момент я не хочу удалять диски, так как мне нужно, чтобы они сохранялись на компьютере.Как сохранить информацию о драйвере поставщика Powershell?

Как определить, вызывается ли RemoveDrive() пользователем, выполняющим вручную Remove-PSDrive или выходом хоста?

Кроме того, я создал настраиваемые параметры информации о диске, которые хорошо работают, но я также написал настраиваемый командлет, который используется для добавления и удаления дисков. Как я могу создать (и удалить) psdrives из моего командлета?

ответ

0

Возможно, вы захотите использовать переопределение InitializeDefaultDrives. Это означает, что вам нужно будет иметь постоянное хранилище строк подключения, чтобы вы могли создавать все соответствующие диски при инициализации провайдера. Чтобы сохранить эту информацию, вы можете переопределить виртуальный метод Stop.

+0

@keith: Я переопределяю InitializeDefaultDrives(), и в этой функции я загружаю свою коллекцию жестких дисков с диска. Проблема заключается в том, что я должен разрешить сценаристу выполнить Remove-PSDrive (который возвращается к RemoveDrive()), чтобы они могли удалять диски. В этот момент мне нужно удалить этот диск и удалить его из моего xml-файла, так сказать. Однако, когда PowerShell выходит, он также вызывает RemoveDrive() для каждого загруженного диска. В этом случае я не хочу их останавливать. В RemoveDrive(), как узнать, выполняется ли скрипт или запущен Powershell? –

+0

Свойство CmdletProvider.Stopping зависит от того, удаляет ли пользователь или PowerShell диск? –

+0

Keith, вероятно, находится на правильном пути здесь - вы также можете установить флаг, переопределив Stop на провайдере - если флаг установлен, powershell закрывается, но я не уверен, что вызывается первым: provider.stop или remove -psdrive ... – x0n

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