如所承诺的,这个帖子是第几个希望将谈论PSH 2.0功能。嗯......其实,也许我会变成一个名为“愚蠢的PowerShell技巧”正在进行的一系列本。
总之,三项赛是的那种挫败我与CTP2构建的事情之一。出于某种原因,我不能(不是在所有井实际上)获得三项赛到正常工作。话虽这么说,多亏了从产品团队倾吐心事,我意识到我的逻辑是有缺陷的,和CTP3版本,我不仅可以得到三项赛工作(以及还挺)。不过,我觉得我也许能帮助其他人也是如此。所以...以下是一步一步的希望展示如何使用自定义组件使用三项赛其中。
顺便说一句 - CTP3刚刚发布。点击这里查看更多!
步骤1
加载自定义程序集,创建一个对象,并查看是否对象支持活动。例如,下面显示了如何使用一些伪代码做到这一点:
添加型-路径“C:\工具\ SuperCool.dll”
$为MyObject =新物体cool.scp “主机1”, “为myuser”, “输入mypassword”
$为MyObject |获得会员
在我的情况下,最终的格式化表格有以下事件:
- OnTransferEnd
- OnTransferProgress
- OnTransferStart
酷,考虑到我的系统之间传输文件。
第二步
一旦你已经想通了,这是类型的事件提供给你,使用这些事件是下一个挑战。为了找出答案,使用注册-ObjectEventcmdlet将事件订阅注册到你的PowerShell会话。例如:
注册-ObjectEvent-InputObject$为MyObject-EventNameOnTransferProgress-SourceIdentifierScp.OnTransferProgress`
-行动{$全球:MCDPtotalBytes =的$ args [3];$全球:MCDPtransferredBytes =的$ args [2]}
注册-ObjectEvent-InputObject$为MyObject-EventNameOnTransferEnd`
-SourceIdentifierScp.OnTransferEnd-行动{$全球:MCDPGetDone = $真}
所以...什么是怎么回事?首先,你使用的是InputObject参数在对象的cmdlet来传递。因为该cmdlet需要从它会创建一个事件订阅对象你这样做。为了事件名称名称参数,您提供的事件(一个或多个)的名字,你在第一步中发现的。为了SOURCEIDENTIFIER参数,你只需要提供一个唯一的名称。我倾向于使用的东西,是关系到从我的事件将是未来的对象。最后,行动参数是可选。就我而言,我需要的情况下做一些事情。
在这一点上,你可能会问,“就如何使用泰森这些事件?”
好吧,首先,我只需要脚本等到发出做移动使用SCP文件的命令。基本上,没有脚本的等待,它一直一次获取或发布命令发出去。如果我是交互发出这些命令,将被罚款。但是,因为脚本是越来越,比较,然后将所有从远程数据源复制文件。我跑成时序问题进行了脚本试图来比较也尚未完成复制文件。
为了使脚本等待,我有两个选择。首先,我可以使用等待事件小命令,这将导致脚本等待发生特定事件。不幸的是,当我使用此cmdlet,我一直运行到奇怪的问题是脚本的执行,有时没有“等待”或只是不停地“等待”。原来等待的问题涉及到像网络滴,导致从未被解雇的事件东西。而其他的问题仍然是一个谜。
无论如何,第二个选项放在一起,只是不停地检查东西是一个循环真正。为此,我们首先这是因为我以前上市的动作参数的一个定义的脚本块开始:
-action {$全球:MCDPGetDone = $真}
注聪明人,该脚本块为自己范围内的动作参数执行规定。因此,为什么我定义MCDPGetDone变量作为全球!
接下来,我们定义了以下循环:
做{写进展-activity “获得 - $($ _名称)” - 状态 “复制” -PercentComplete(($ MCDPtransferredBytes / $ MCDPtotalBytes)* 100)},而($ MCDPGetDone -eq $空)
超爽......不仅要转移我现在脚本等待一个文件!但是,由于OnTransferProgress事件处理程序,我也得到一个进度条。:>)
但愿这是有帮助的!
如果你喜欢这个,看看泰森一些其他职位:
- 创建ASP.NET Web应用程序自定义404页,手柄链接重定向
- 微软中止支持Windows 3.X(如嵌入式系统)
- 京都寺夜景 - 技术支持谷歌!
- 我对在PowerShell中的SSH任务重新!
- 如何阅读使用PowerShell的证书和CRL
或者,如果你愿意,你还可以检查出一些泰森的最新出版物:
- Windows PowerShell中偷跑(2ND版)
- Windows Server 2008的偷跑(是的,我确实帮助这本书)