2009-08-11 47 views
1

在我的Powershell提供程序中,它是SQL数据库上的业务逻辑层,Powershell驱动器等同于数据库连接设置。这个连接设置集合被持久化到本地计算机上的加密XML文件。管理员可以在计算机上添加这些PS驱动器,提供SQL Server凭据,以便在编写脚本时可以使用另一个Powershell用户。当管理员运行New-PSDrive时,我将一个驱动器添加到集合中并将其保存到XML中。当他们删除PSDrive,我从持久性XML中删除驱动器。这工作正常。但是,当Powershell主机正在退出时,它会为每个现有驱动器调用RemoveDrive()。在这一点上,我不想删除驱动器,因为我需要它们坚持在计算机上。如何坚持Powershell提供商驱动器信息?

如何确定是否从用户手动执行Remove-PSDrive或从主机退出时调用RemoveDrive()?

此外,我创建了自定义驱动器信息参数,它可以很好地工作,但我也写了一个用于添加和移除驱动器的自定义cmdlet。我如何从我的cmdlet创建(并删除)psdrives?

回答

0

您可能想要使用InitializeDefaultDrives覆盖。这意味着您需要持续存储连接字符串,以便您可以在提供程序初始化时创建所有适当的驱动器。您应该能够覆盖Stop虚拟方法以保存此信息。

+0

@keith:我重写了InitializeDefaultDrives(),并且在该函数中我从磁盘加载持久驱动器的集合。 问题是我需要允许脚本执行一个Remove-PSDrive(调用RemoveDrive()),以便它们可以删除驱动器。此时,我需要删除该驱动器并将其从我的xml文件中删除,可以这么说。但是,当PowerShell退出时,它也会为每个加载的驱动器调用RemoveDrive()。在这种情况下,我不想让他们坚持下去。在RemoveDrive()中,我如何知道脚本执行者还是Powershell正在退出? – 2009-08-11 21:30:26

+0

CmdletProvider.Stopping属性取决于用户还是PowerShell删除驱动器而有所不同? – 2009-08-11 22:33:25

+0

Keith可能在这里是正确的 - 你也可以通过覆盖提供者的Stop来设置一个标志 - 如果标志被设置,PowerShell正在关闭,但我不确定哪一个被称为first:provider.stop或者remove -psdrive ... – x0n 2009-08-12 17:50:04