码迷,mamicode.com
首页 > Windows程序 > 详细

在C#创建CmdLet中使用DynamicParameter

时间:2014-10-17 19:04:05      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:classic   开发者   微软   动态   联科教育   

在C#创建CmdLet中使用DynamicParameter

今天我们介绍PowerShell 命令中另外一种参数 动态参数
所谓动态参数是依据某些特定条件而出现的参数,通常情况下,这些条件包括但不仅限于,特定参数值,特定参数出现,特定参数行为,属性。
我们用一个简单的例子还说明动态参数,这个例子将是下一波PowerShell 扩展中的
Set-SPWebApplicationAuthenticationType 命令
该命令将转换指定的WebApplication 身份验证模式
其中可以转换的为 Classic(经典SharePoint 2010中的身份验证模式)以及Claims(基于声明的身份验证SharePoint 2013中推荐的身份验证)。

首先我们讨论下 关于 转换为 Classic (经典)
根据微软给出的方法 我们很轻易的得出结论 转化为 Classic 身份验证 从一个命令开发者角度来看 仅仅需要知道一个WebApplication 同时修改其属性就能实现。
我们再来看下 关于转换为 Claims(基于声明的验证)
在转化为Claims 时候 我们需要知道 WebApplication,以及适用该WebApplication的访问账户,该账户对该WebApplication 访问的权限,以及 对应的WebApplication Zone(区域)
不难看出 从一个命令开发者角度去思考我们会得到下表

bubuko.com,布布扣


 

  

 

 

 

 

 

 

 

 

 

不难看出 要在一个命令中同时实现转化两种身份验证模式 有两个分支
似乎这两个分支可以使用参数集的方法来解决,
但是仔细考虑下你就会发现一个严重的问题AuthenticationType,以及WebApplication 为这两个分支的公共且必须参数 且转化为 Classic 不再需要任何参数,这就会造成一个问题 参数集界定的十分模糊,虽然从一个开发者本身看这似乎并不是问题,但是该问题对终端用户使用会造成困扰,当他们把 AuthenticationType 参数设置为任意值的时候 都会出现 UserAccountName 等几个参数,但是这几个参数却不是 转化为 Classic 必须的参数甚至这些参数没有任何意义。虽然你可以在帮助中指明用法,但是这种做法并不严谨,而且十分的愚蠢。
我们不妨换个角度用动态参数的办法实现这个目标。
当 AuthenticationType 为 Claims 时候 我们让命令出现 参数3-参数5,
这的确是个好办法,即满足需求,又不会造成困扰,当然我们还可以考量下参数4,参数5
的默认值的可能 进一步简化用户的使用复杂程度。
基于此我们今天将学会如何在使用C#创建Cmdlet 时候使用动态参数


我们先创建该命令,请注意我们要使用IDynamicParameters

bubuko.com,布布扣
 
然后按照常规思路把 AuthenticationType,WebApplication的参数进行声明

bubuko.com,布布扣
 

似乎重要的问题来了 动态参数该如何声明

bubuko.com,布布扣
 
在这里 我们先 声明一个__DyP1 的参数 然后 又写了一个名为Dynamic 的类 而这个类里面 我们看到的确是常规的参数声明, 你似乎对此有怀疑 不要慌张我们继续看

然后我们实现IDynamicParameters

bubuko.com,布布扣
 

我们验证AuthenticationType 参数当其为Claims 时候 初始化Dynamic类的实例
So。。当Dynamic类实例初始化我们就会同时得到UserName,Zone 等几个参数,
当然我们可以使用下面的方式调用动态参数的值

bubuko.com,布布扣
 

此后编译,使用该命令

bubuko.com,布布扣
 
当我们把 AuthenticationType 设为 Classic 时候 我们没有看到 参数3-参数5

bubuko.com,布布扣

当我们把 AuthenticationType 设为 Claims 时候 我们将看到 参数3-参数5
而WebApplication 这个公共参数将同时适用该命令两个分支

 ---本文档由联科教育(http://www.iLync.cn)田梦博 原创提供,如有问题请电话:021-60745131---


本文出自 “iLync” 博客,请务必保留此出处http://ilync.blog.51cto.com/6203086/1565170

在C#创建CmdLet中使用DynamicParameter

标签:classic   开发者   微软   动态   联科教育   

原文地址:http://ilync.blog.51cto.com/6203086/1565170

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!