Powershell导入并调用公网的ps1脚本中的方法
2017-07-13 17:30
1201 查看
貌似 Powershell 无法直接导入公网上的一些 “ps1” 文件中的函数,所以测试了一下一个比较鸡贼的方法,分享一下。
我们举个例子,之前的 Blog 里面介绍过 Invoke-Parallel 这个方法(http://blog.csdn.net/qwertyupoiuytr/article/details/54142403),但是这个方法非常非常长,如果把这个方法扔到自己的 “ps1” 脚本里面,简直就是灾难,那么有两种方法,一种是把这个文件放到本地,在另外一个
ps1 脚本中调用它,但是有个问题,就是这两个文件到哪里都要一起,不然就引用不到这个文件了。
还有一个方法,就是我们把这个文件放到网盘里(这个例子里面我们放到 Azure 的存储当中,地址http://danielnorthstorage.blob.core.chinacloudapi.cn/fordownload/Invoke-Parallel.ps1),然后在脚本中调用,但是这就遇到了我们最开始提的那个问题,PS
貌似无法直接远程调用公网上的脚本文件。
我们看一下下面的代码:
代码里面我们使用 WebClient 对象的 DownloadFile 方法,将 ps1 脚本下载到了当前脚本的同级目录中,并重命名为 tmpScript.ps1,下载后,我们使用命令 . ".\tmpScript.ps1" 将脚本中的方法(这个脚本里面我们只有一个 Invoke-Parallel 方法)导入到当前执行上下文中,然后我们就可以在当前脚本中调用 Invoke-Parallel 方法了,调用完成后,我们再将临时的文件删除掉即可。
我们具体写一个简单的小例子,批量开启Azure ARM虚拟机:
我们举个例子,之前的 Blog 里面介绍过 Invoke-Parallel 这个方法(http://blog.csdn.net/qwertyupoiuytr/article/details/54142403),但是这个方法非常非常长,如果把这个方法扔到自己的 “ps1” 脚本里面,简直就是灾难,那么有两种方法,一种是把这个文件放到本地,在另外一个
ps1 脚本中调用它,但是有个问题,就是这两个文件到哪里都要一起,不然就引用不到这个文件了。
还有一个方法,就是我们把这个文件放到网盘里(这个例子里面我们放到 Azure 的存储当中,地址http://danielnorthstorage.blob.core.chinacloudapi.cn/fordownload/Invoke-Parallel.ps1),然后在脚本中调用,但是这就遇到了我们最开始提的那个问题,PS
貌似无法直接远程调用公网上的脚本文件。
我们看一下下面的代码:
$scriptSrc = "http://danielnorthstorage.blob.core.chinacloudapi.cn/fordownload/Invoke-Parallel.ps1"; $dest = ".\tmpScript.ps1"; $wc = New-Object System.Net.WebClient; $wc.DownloadFile($scriptSrc, $dest); # import all the functions in the script file . ".\tmpScript.ps1"; // Do something with Invoke-Parallel function Remove-Item -Path ".\tmpScript.ps1";
代码里面我们使用 WebClient 对象的 DownloadFile 方法,将 ps1 脚本下载到了当前脚本的同级目录中,并重命名为 tmpScript.ps1,下载后,我们使用命令 . ".\tmpScript.ps1" 将脚本中的方法(这个脚本里面我们只有一个 Invoke-Parallel 方法)导入到当前执行上下文中,然后我们就可以在当前脚本中调用 Invoke-Parallel 方法了,调用完成后,我们再将临时的文件删除掉即可。
我们具体写一个简单的小例子,批量开启Azure ARM虚拟机:
$scriptSrc = "http://danielnorthstorage.blob.core.chinacloudapi.cn/fordownload/Invoke-Parallel.ps1"; $dest = ".\tmpScript.ps1"; $wc = New-Object System.Net.WebClient; $wc.DownloadFile($scriptSrc, $dest); # import all the functions in the script file . ".\tmpScript.ps1"; $ResourceGroupName = "XXXXXXXX"; $VMNames = "VM1;VM2;VM3"; $VMNames.Split(';') | Invoke-Parallel -ImportVariables -NoCloseOnTimeout -ScriptBlock { Start-AzureRmVM -ResourceGroupName $ResourceGroupName -Name $_ }; Remove-Item -Path ".\tmpScript.ps1";
相关文章推荐
- 在c#中调用windows脚本的方法
- [导入]完成可脚本调用的视频录制控件
- 用 SQL 脚本将 Access 导入 MSSQL 20002005 方法(转)
- 直接双击运行PowerShell的脚本文件.ps1
- [导入]【翻译】WF从入门到精通(第八章):调用外部方法及工作流
- Discuz! 7.0 模块调用脚本范例程序 - 多选下拉的缺陷以及使用方法
- .Net 中利用ADODB生成的RecordSet在前台脚本中进行调用的方法
- 泛型方法或泛型类中的方法是内部调用、PInvoke 或是在 COM 导入类中定义的。
- 子窗体调用父窗体的脚本方法
- ASP.NET后台代码调用前台javascript脚本的方法
- 用脚本调用样式的几种方法
- 在c#中调用windows脚本的方法
- [导入]在xslt中调用webservice的方法
- WebBrowser执行脚本和调用外部方法。
- [导入]轻量级的Ajax解决方案——DynAjax:直接在客户端调用C#类的方法
- vs2005调用js脚本方法总结
- 在c#中调用windows脚本的方法
- 【原创】ASP.NET后台代码调用前台javascript脚本的方法
- shell中调用另外的脚本文件的两种方法
- [导入]使用Sharepoint的Lists Web Service调用UpdateListItems方法"增/删/改"List Items