博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Powershell自动化Linux,macOS和Windows进程
阅读量:2526 次
发布时间:2019-05-11

本文共 4728 字,大约阅读时间需要 15 分钟。

自动化控制手动,费力且容易出错的流程,并用运行自动化脚本的计算机代替执行手动任务的工程师。 每个人都同意手动流程是DevOps健康心态的敌人。 一些人认为自动化不是一件好事,因为它可以代替辛勤的工程师,而另一些人则意识到,它可以提高一致性,可靠性和效率,节省时间,并且(最重要的是)使工程师能够智能地工作。

DevOps不仅是自动化或作为代码的基础架构 ”, 。

那么,什么时候应该自动化?

  • 使您手动执行的流程自动化一次或两次以上。
  • 自动执行您将定期且连续执行的流程。
  • 使一切可自动化的自动化。

更重要的是,您应该自动化什么?

  • 不要自动化一次性的流程,除非您将其用作参考文档并定期进行验证以确保其正常运行,否则这笔投资不值钱。
  • 不要自动化高度易变的流程,因为它过于复杂且昂贵。
  • 不要自动化损坏的流程,请在自动化之前对其进行修复。

例如,我的团队不断检查我们共同的协作和工程系统上的数百个用户活动,以寻找浪费宝贵资源的闲置状态。 如果某个用户不活跃三个月或更长时间并被分配了昂贵的许可证,我们会将其恢复为功能较弱且免费的许可证。

如图1所示,这不是一个技术难题。 这是一个令人烦恼且容易出错的过程,尤其是在与其他开发和操作任务进行上下文切换时执行该过程时。

Manual process to switch user license

图1手动切换用户许可证的过程

顺便说一下,这是通过三个简单步骤创建的价值流图的示例:

  1. 可视化所有活动:列出用户,筛选用户和重置许可证。
  2. 确定利益相关者,即运营和许可团队。
  3. 测量:
    • 总交货时间(TLT)= 13小时
    • 总循环时间(TCT)= 1.5小时
    • 总效率百分比= TLT / TCT * 100 = 11.5%

如果将这些可视化文件的副本悬挂在人流量大,能见度高的区域,例如团队的分组讨论区,自助餐厅或在通往洗手间的路上,则将引发大量讨论和未经请求的反馈。 例如,从视觉上看,很明显,手动任务是浪费,主要是由于较长的过程等待时间造成的。

让我们探索一个简单的PowerShell脚本,该脚本可以自动执行该过程,如图2所示,将总交付时间从13小时减少到4小时60秒,并将总效率从11.5%提高到12.75%。

Semi-automated PowerShell-based process to switch user license

是一种基于任务的开源脚本语言。 它 ,基于.NET构建,可让您自动执行Linux,macOS和Windows进程。 具有开发背景,尤其是C#的用户将享受PowerShell的全部好处。

下面的PowerShell脚本示例通过其服务与进行通信。 该脚本结合了图1中的手动列表用户和筛选用户任务,标识了DEMO组织中两个月内没有活动并且正在使用Basic或更昂贵的Basic + Test许可证的所有用户,并输出了用户的控制台的详细信息。 简单!

首先,设置身份验证标头和其他变量,稍后将在此初始化脚本中使用它们:

param(     
  [string]   $orgName       = "DEMO",
  [int]      $months        = "-2",
  [string]   $patToken      = "
"
)
# Basic authentication header using the personal access token (PAT)
$basicAuth = ("{0}:{1}" -f "",$patToken)
$basicAuth = [System.Text.Encoding]::UTF8.GetBytes($basicAuth)
$basicAuth = [System.Convert]::ToBase64String($basicAuth)
$headers   = @{Authorization=("Basic {0}" -f $basicAuth)}
# REST API Request to get all entitlements
$request_GetEntitlements    = "https://vsaex.dev.azure.com/" + $orgName + "/_apis/userentitlements?top=10000&api-version=5.1-preview.2";
# Initialize data variables
$members              = New-Object System.Collections.ArrayList
[int] $count          = 0;
[string] $basic       = "Basic";
[string] $basicTest   = "Basic + Test Plans";

接下来,使用此脚本查询所有权利以标识非活动用户:

# Send the REST API request and initialize the members array list.     
$response = Invoke-RestMethod -Uri $request_GetEntitlements -headers $headers -Method Get
$response.items | ForEach-Object { $members.add($_.id) | out-null }
# Iterate through all user entitlements
$response.items | ForEach-Object {
  $name    = [string]$_.user.displayName;
  $date    = [DateTime]$_.lastAccessedDate;
  $expired = Get-Date;
  $expired = $expired.AddMonths($months);
  $license = [string]$_.accessLevel.AccountLicenseType;
  $licenseName = [string]$_.accessLevel.LicenseDisplayName;
  $count++;
  if ( $expired -gt $date ) {
    # Ignore users who have NEVER or NOT YET ACTIVATED their license
    if ( $date.Year -eq 1 )
    {
      Write-Host " **INACTIVE** " " Name: " $name " Last Access: " $date "License: " $licenseName
    }
    # Look for BASIC license
    elseif ( $licenseName -eq $basic ) {
         Write-Host " **INACTIVE** " " Name: " $name " Last Access: " $date "License: " $licenseName
      }
    }
    # Look for BASIC + TEST license
    elseif ( $licenseName -eq $basicTest ) {
        Write-Host " **INACTIVE** " " Name: " $name " Last Access: " $date "License: " $licenseName
      }
    }
}

运行脚本时,将获得以下输出,您可以将该输出转发给许可团队以重置用户许可:

**INACTIVE** Name: Demo1 Last Access: 2019/09/06 11:01:26 AM License: Basic     
**INACTIVE** Name: Demo2 Last Access: 2019/06/04 08:53:15 AM License: Basic
**INACTIVE** Name: Demo3 Last Access: 2019/09/26 12:54:57 PM License: Basic
**INACTIVE** Name: Demo4 Last Access: 2019/06/07 12:03:18 PM License: Basic
**INACTIVE** Name: Demo5 Last Access: 2019/07/18 10:35:11 AM License: Basic
**INACTIVE** Name: Demo6 Last Access: 2019/10/03 09:21:20 AM License: Basic
**INACTIVE** Name: Demo7 Last Access: 2019/10/02 11:45:55 AM License: Basic
**INACTIVE** Name: Demo8 Last Access: 2019/09/20 01:36:29 PM License: Basic + Test Plans
**INACTIVE** Name: Demo9 Last Access: 2019/08/28 10:58:22 AM License: Basic

如果自动化最后一步,将用户许可证自动设置为免费的利益相关者许可证,如图3所示,则可以进一步将总交付时间减少到65秒,并将总效率提高到77%。

Fully automated PowerShell-based process to switch user license

图3完全基于PowerShell的切换用户许可证的过程

此PowerShell脚本的核心价值不仅在于能够实现自动化,而且还能够定期一致快速地执行该过程。 进一步的改进将使用诸如Azure管道之类的调度程序每周或每天触发脚本,但我将在以后的文章中进行程序化许可证重置和脚本调度。

以下是可视化进度的图表:

Graph to visualize progress

图4测量,测量,测量

我希望您喜欢通过自动化,PowerShell,REST API和价值流映射进行的短暂旅程。 请在评论中分享您的想法和反馈。

翻译自:

转载地址:http://uoczd.baihongyu.com/

你可能感兴趣的文章
C++练习 | 模板与泛式编程练习(1)
查看>>
HDU5447 Good Numbers
查看>>
08.CXF发布WebService(Java项目)
查看>>
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
Django 学习笔记(五) --- Ajax 传输数据
查看>>
Spring boot 日志 Logback
查看>>
基于OWIN WebAPI 使用OAUTH2授权服务【授权码模式(Authorization Code)】
查看>>
[深入Maven源代码]maven绑定命令行参数到具体插件
查看>>
laravel 分页使用
查看>>
RobotFramework自动化2-自定义关键字
查看>>
centos6.4-x86-64系统更新系统自带Apache Http Server
查看>>
[置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
查看>>
BABOK - 需求分析(Requirements Analysis)概述
查看>>
第43条:掌握GCD及操作队列的使用时机
查看>>
Windows autoKeras的下载与安装连接
查看>>
CMU Bomblab 答案
查看>>