尽解powershell的workflow

-------1【简介】---------

Microsoft .NET Framework 4.0 发布于2010年4月左右。
.net4 的新特性,是并行多任务机制。.net4 workflow(WF),翻译为工作流,它依赖并行多任务机制,并成为其延伸。(也有说法说WF在.net3中就有)

基于.net4的workflow,微软powershell团队开发出了powershell workflow。并作为powershell3.0的新特性推出,它是对.net4 workflow的封装,或调用。
powershell workflow中,并行语句产生的,每个并行任务,都会产生一个powershell。exe进程。是并发【多进程】!任务。
它弥补了powershell v2.0原先只有多线程(*-job命令)的不足。
 

--------2【浅谈多线程,多进程脚本的区别】---------

1 powershell job所有线程,都在一个powershell.exe进程中运行。powershell的多线程,可以使用多cpu核心,这点比python强。
bat,bash中没有多线程。powershell只有一个前台线程,无数个后台线程。
 
2 powershell workflow并行语句产生的,每个并行任务,都会产生一个powershell。exe进程。因为有进程创建时间所以比较慢,但并行提升了多任务速度。
 
3 进程的特色是隔离,从使用公用变量的角度,【多进程】不容易的,是不如【多线程】简单方便的。任何计算机语言都是这样。
但有了隔离,脚本代码跑的会更健壮。坏了就杀掉,不影响其他脚本。
 
4 从程序编写难易度,【多进程】比代码【多线程】更容易写,容易控制。任何计算机语言都是这样。
powershell 线程 进程 workflow Register-PSSessionConfiguration Set-PSSessionConfiguration
powershell 传教士 原创文章 允许转载,但必须保留名字和出处,否则追究法律责任。2014-03-29写,2019-09-18改,
 
5 不论是多进程,还是多线程,只能解决cpu密集计算的问题,只能解决io密集计算的问题。并发只是在用内存空间换时间,任何计算机语言都是这样。
 

--------3 【workflow的原理和使用场景】---------

每个powershell.exe启动要2秒钟左右,占用内存80---100mb。所以你先要规划好内存。
假如说你有200个任务,并限定200个进程并发。
1workflow会先启动这200个powershell.exe,也就是400秒内,光吃cpu,内存了,没运行任务。
 
2把你的脚本任务,传给powershell运行。
 
3任务运行完毕后,这200个powershell.exe,坐等新任务,却等不到。
 
4超过一定时间后,这200个powershell.exe,开始被杀掉。
 
workflow使用场景:
1workflow首次启动非常慢。
2每个传入任务至少要10秒左右的,最好30秒以上。若传入任务用时太小,时间将被耗费在进程切换上。
3如果传入任务用时很小,还想用workflow,则应每次传入一组n个任务。
4每个powershell.exe,最少应该接活2次。即限定200个进程并发,则最少应该有400个任务。
 

--------4 【workflow数据的输出】---------

 
1用一段代码,或一个脚本,来实现,并发写入txt。本质是多进程,同时写入txt。这里面必须有一个随机延时的功能。
分享powershell脚本:同一个txt文件,300个并发写入
http://bbs.chinaunix.net/thread-4314470-1-1.html
【bf并发写入txt_v1.1.ps1】,脚本分享地址:
https://pan.baidu.com/s/16deKKe3ZnCg809lffiVZWg
2写入队列也可以。本质是多进程,通过端口,sql插件,写入另一个进程。在那个进程中,数据排队,再输出。
3写入数据库也可以。本质是用数据库的锁,实现并发到顺序。
比如,用一个脚本,写入数据库。等workflow执行完毕后,在任务脚本最后一行,调用另一个脚本,读取数据库,写入txt。

--------5 【powershell workflow最大进程数设置】---------

 
系统默认开5个多进程,
cpu密集型任务,应该根据cpu核心设定,比如有16核心,则开15,或16个进程。
io密集型任务,可以开100,200,这样。
#管理员权限,一次性执行此命令!
Enable-PSRemoting -SkipNetworkProfileCheck -Force
Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-NoScope" -RemoteAddress Any
Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP" -RemoteAddress Any
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*'
$我的工作流参数 = New-PSWorkflowExecutionOption -MaxActivityProcesses 200
Register-PSSessionConfiguration -Name '我的工作流配置' -SessionTypeOption $我的工作流参数 -SessionType Workflow -Force
(Get-PSSessionConfiguration -Name '我的工作流配置' ).maxactivityprocesses
restart-service -Name WinRM -Force
 

--------6 【workflow脚本例子】---------

workflow最常用的功能,就是foreach -parallel
$我的workflow代码 = {
workflow bingfa3
{
foreach -parallel ($renwu in 1..60)
{
inlinescript
{
Start-Sleep -Seconds 1
$using:renwu
Start-Sleep -Seconds 60
}
}
#问:这个脚本谁写的?有问题找谁技术支持?
#答:QQ群号=183173532
#名称=powershell交流群
# 2019-09-18 转载留名
}
bingfa3
}
$本机ip = '192.168.11.22'
$workflow连接1 = New-PSSession -ComputerName $本机ip -ConfigurationName '我的工作流配置'
Invoke-Command -Session $workflow连接1 -ScriptBlock $我的workflow代码
Remove-PSSession $workflow连接1
 

--------7 【手册,资料】---------

powershell工作流            https://docs.microsoft.com/zh-cn/powershell/scripting/components/workflows-guide?view=powershell-5.1
New-PSWorkflowExecutionOption      https://docs.microsoft.com/zh-cn/powershell/module/psworkflow/new-psworkflowexecutionoption?view=powershell-5.1
About Workflows             https://docs.microsoft.com/zh-cn/powershell/module/psworkflow/about/about_workflows?view=powershell-5.1
About WorkflowCommonParameters     https://docs.microsoft.com/zh-cn/powershell/module/psworkflow/about/about_workflowcommonparameters?view=powershell-5.1
 

尽解powershell的workflow的更多相关文章

  1. 使用PowerShell解三道测试开发笔试题

    在网上看到了三道测试开发的笔试题,答案是用Python解的.这段时间正好在学PowerShell,练习一下:) 1. 验证邮箱格式 2. 获取URL的后缀名 3. 获取前一天时间或前一秒 我的解法是: ...

  2. PowerShell攻防进阶篇:nishang工具用法详解

    PowerShell攻防进阶篇:nishang工具用法详解 导语:nishang,PowerShell下并肩Empire,Powersploit的神器. 开始之前,先放出个下载地址! 下载地址:htt ...

  3. 赖法,强制启动,https版的winrm ---powershell远程连接(winrm)的4个安全级别,详解

    ---------[winrm的“四级”安全]--------- 四级安全,就是最不安全的. winrm默认使用http+5985端口,密码传输加密,数据.命令传输明文.有被人窃取机密,和插入攻击命令 ...

  4. 【PowerShell】文件的解压与压缩

    1 New-Item -ItemType File 1.txt -Force #新建文本文件 2 Compress-Archive -Path '1.txt' -DestinationPath '1. ...

  5. linux下mono,powershell安装教程

    1简介 简单来说pash就是bash+powershell 2官网 https://github.com/Pash-Project/Pash 3下载fedora20---lxde桌面---32位版. ...

  6. Install and Configure SharePoint 2013 Workflow

    这篇文章主要briefly introduce the Install and configure SharePoint 2013 Workflow. Microsoft 推出了新的Workflow ...

  7. 如何用PowerShell列出你机器上的.NET Framework的版本号和SP服务补丁

    代码下载:本文提到的脚本,可以从微软的代码库下载, How to determine versions & service pack levels of .NET Framework by P ...

  8. Struts2拦截器的使用 (详解)

    Struts2拦截器的使用 (详解) 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈default ...

  9. 使用PowerShell读取SharePoint里列表的内容

    1. 在https://www.microsoft.com/en-us/download/details.aspx?id=42038这里下载SharePoint Online Client Compo ...

随机推荐

  1. 详解JAVA8Stream API {全}

    1: 概述 1.1 优势 1.2 与传统迭代器的区分 1.3 流的操作类型分为两种: 2:流的构造与转换 2:1 常见构造 2.2: 三大包装类型的构造 2.3 并行流的规则输出 2.4 流的转换 3 ...

  2. 利用内存锁定技术防止CE修改

    利用内存锁定技术防止CE修改 通过这种在R3环利用的技术,我们可以来达到保护内存的目的,像VirtualProtect等函数来修改页属性根本无法修改. 而CE修改器推测应该使用VirtualProte ...

  3. GO的执行原理以及GO命令

    Go的执行原理以及Go的命令 一.Go的源码文件 Go 的源码文件分类: 如上图,分为三类: 1.命令源码文件: 声明自己属于 main 代码包.包含无参数声明和结果声明的 main 函数. 命令源码 ...

  4. python基础(3):变量、常量、注释、基本数据类型

    1. 变量 变量:将运算的中间结果暂存到内存,以便后续程序调⽤. 可以直接运算,如下所示: print(3+5+6) print((3+5+6)*12) print(((3+5+6)*12)+3) p ...

  5. CSS3 3D变形 transform---rotateX(), rotateY(), rotateZ(), 透视(perspective)

    2d x y 3d x y z 左手坐标系 伸出左手,让拇指和食指成“L”形,大拇指向右,食指向上,中指指向前方.这样我们就建立了一个左手坐标系,拇指.食指和中指分别代表X.Y.Z轴的正方向.如下图 ...

  6. iOS 禁用`URL Scheme`和`Universal Link`(通用链接)

    为什么要禁用URL Scheme和Universal Link(通用链接) 通常我们APP中都会嵌套一些web页面,有时我们的web页面会被DNS劫持从而跳转到其他APP中:或者是某些APP的Univ ...

  7. MySQL数据篇(五)--SQL对数据进行按月统计,或对数据进行按星期统计

    对于所有的需求,当你不知道怎么处理的时候,你就先用最简单的方法,或者说的明白一点,用最原始的方法,先实现业务需求再说. 一.对提现队列数据表“ims_checkout_task”进行汇总统计,按月汇总 ...

  8. Weblogic的三种部署方式

    Weblogic的三种部署方式     在weblogic中部署项目通常有三种方式:第一,在控制台中安装部署:第二,将部署包放在domain域中autodeploy目录下部署:第三,使用域中配置文件c ...

  9. python爬虫(1)——正则表达式

    原子 原子是正则表达式中最基本的组成单位,每个正则表达式中至少要包含一个原子. 常见的原子类型: 普通字符作为原子 非打印字符作为原子 通用字符作为原子 原子表 #普通字符作为原子 import re ...

  10. I2C硬件与模拟的区别

    硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C:一般也较为稳定,但是程序较为繁琐. 硬件(固件)I2C是直接调用内部寄存器进行 ...