我希望能在PowerShell中实现一个PowerShell提供程序。
我一直认为,如果我定义了类型,然后将它们导入到我的会话中(import-module),我就可以使它们可用。
例如,这个方法并不起作用,但它沿着我想要实现的道路。
显然,我还缺少很多东西……有人知道这是否可能吗?
在导入模块后,我尝试创建名为“environments”的驱动器:
假设提供者确实起作用,可以让它返回一个环境列表:dev, qa, staging, production。
然后我希望能够通过以下方式重复使用此功能:
我一直认为,如果我定义了类型,然后将它们导入到我的会话中(import-module),我就可以使它们可用。
例如,这个方法并不起作用,但它沿着我想要实现的道路。
显然,我还缺少很多东西……有人知道这是否可能吗?
# EnvironmentProvider.ps1
$reference_assemblies = (
"System.Management.Automation, Version=1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
# "System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
)
$source = @"
namespace Providers
{
using System.Management.Automation;
using System.Management.Automation.Provider;
[CmdletProvider("Environments", ProviderCapabilities.None)]
public class EnvironmentProvider : DriveCmdletProvider
{
protected override PSDriveInfo NewDrive(PSDriveInfo drive)
{
return new EnvironmentDriveInfo(drive);
}
protected override object NewDriveDynamicParameters()
{
return base.NewDriveDynamicParameters();
}
}
public class EnvironmentDriveInfo : PSDriveInfo
{
public EnvironmentDriveInfo(PSDriveInfo driveInfo) : base(driveInfo)
{
}
}
}
"@
# -ea silentlycontinue in case its already loaded
#
add-type -referencedassemblies $referenced_assemblies -typedefinition $source -language CSharp -erroraction silentlycontinue
在导入模块后,我尝试创建名为“environments”的驱动器:
new-psdrive -psprovider Environments -name "Environments" -root ""
错误信息:
New-PSDrive : Cannot find a provider with the name 'Environments'.
假设提供者确实起作用,可以让它返回一个环境列表:dev, qa, staging, production。
然后我希望能够通过以下方式重复使用此功能:
c:\adminlib>import-module .\EnvironmentProvider.ps1
c:\adminlib>environments:
environments:>ls
dev
qa
staging
production
environments:> cd production
environments\production> [execute actions against production]
environments\production:> cd dev
environments\dev:> [execute actions against dev, etc]