PowerShell 工作流实战1

语法

workflow  
	{ 
 	... 
	}

例子1:

PowerShell 工作流实战1_第1张图片


是不是觉得和function有点像呢?

关键字

和workflow相关的关键字有如下:

  • Workflow
  • Parallel
  • Foreach –parallel
  • Sequence
  • InlineScript
  • Checkpoint-workflow
  • Suspend-workflow

例子2:

workflow paralleltest {

 parallel {

   Get-CimInstance –ClassName Win32_OperatingSystem

   Get-Process –Name PowerShell*

   Get-CimInstance –ClassName Win32_ComputerSystem

   Get-Service –Name s*

  }

}
PowerShell 工作流实战1_第2张图片

然而,你会发现,每次运行paralleltest得出来的结果都不一样!

请记住一点,workflow是建立在.NET Framework Windows Workflow Foundation(WWF)之上的,workflow的代码是转成XAML去运行的,如下截图可以看到paralleltest的XAML的code

PowerShell 工作流实战1_第3张图片

注意事项

在workflow中不再使用–ComputerName,而是使用 –PSComputerName代替。例如

workflow foreachtest {

   param([string[]]$computers)

   foreach –parallel ($computer in $computers){

Get-WmiObject -Class Win32_ComputerSystem -PSComputerName $computer    
Get-WmiObject –Class Win32_OperatingSystem –PSComputerName $computer

   }

}
PowerShell 工作流实战1_第4张图片

可以按照以下方式运行:

foreachtest  -Computers “server1″, “server2″, “server3″ 


但是修改以下则结果不一样咯

workflow foreachtest2 {

   param([string[]]$computers)

   foreach –parallel ($computer in $computers){

    sequence {

      Get-WmiObject -Class Win32_ComputerSystem -PSComputerName $computer

      Get-WmiObject –Class Win32_OperatingSystem –PSComputerName $computer

    }

   }

} 

PowerShell 工作流实战1_第5张图片

注意了,运行foreachtest "192.168.2.83","192.168.2.88"和运行foreachtest2 "192.168.2.83","192.168.2.88"的结果是不一样的。

foreachstest"192.168.2.83","192.168.2.88"的结果是每次都会变化的哦,是顺序的变化;

PowerShell 工作流实战1_第6张图片

PowerShell 工作流实战1_第7张图片

foreachtest2运行的结果都是一样的

PowerShell 工作流实战1_第8张图片

再来看个例子:

workflow foreachpsptest {


   param([string[]]$computers)


   foreach –parallel ($computer in $computers){


    sequence {


      Get-WmiObject -Class Win32_ComputerSystem -PSComputerName $computer


      Get-WmiObject –Class Win32_OperatingSystem –PSComputerName $computer


      $disks = Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType = 3" –PSComputerName $computer
	  
      foreach -parallel ($disk in $disks){


        sequence {


          $vol = Get-WmiObject -Class Win32_Volume -Filter "DriveLetter = '$($disk.DeviceID)'" –PSComputerName $computer 
          Invoke-WmiMethod -Path $($vol.__PATH) -Name DefragAnalysis
        }
      }
    }
	}
	}
  
   

PowerShell 工作流实战1_第9张图片

例子3

在workflow中,不能直接加| format-list,如果需要加上format-list,则需要使用InlineScript

workflow foreachpitest {

   param([string[]]$computers)

   foreach –parallel ($computer in $computers){

     InlineScript {

       Get-WmiObject –Class Win32_OperatingSystem –ComputerName $using:computer |

       Format-List

     }

   }

} 




你可能感兴趣的:(PowerShell,介绍)