PowerShell和Bash的定义与使用

powershell是运行在windows平台的脚本,而bash是运行在linux平台的脚本

现在bash能做的事情,PowerShell也能做,PowerShell的强大之处是它可以管理windows服务器(特别是域domain),现在的开源PowerShell 也可以管理Linux和Mac(通过PSRP)。

下载最新的PS程序

安装后它会有powershell和它的开发IDE工具,ISE,非常不错!

一、进行powershell的程序

PowerShell和Bash的定义与使用

二、创建脚本,简单的Helloworld.ps1

任务的自动化是以程序文件或者可执行脚本文件为基础的,PowerShell也支持将命令列表做成脚本文件来执行。以下是Helloworld.ps1脚本文件的内容:

$a = "Hello World!"$a  echo $a > a.txt  dir a.txt

Helloworld.ps1脚本文件的执行情况结果如下:

PS E:>.Helloworld.ps1  –注意在执行它时要加.,表示当前上当下的文章,类似于centos里的文件执行方法
Hello world!
Directory: E:
Mode                LastWriteTime     Length   Name                                                                     
—-                ————-     —— —-                                                                     

-a—         5/30/2017   4:56 PM         16 a.txt 

下面是在eShopOnContainers上的一个例子,分别用ps和bash实现了程序的部署

#!/bin/bash  declare -a projectList=('../src/Services/Catalog/Catalog.API''../src/Services/Basket/Basket.API''../src/Services/Ordering/Ordering.API''../src/Services/Identity/Identity.API''../src/Web/WebMVC''../src/Web/WebSPA''../src/Web/WebStatus')    # Build SPA app  # pushd $(pwd)../src/Web/WebSPA  # npm run build:prodfor project in "${projectList[@]}"doecho -e "e[33mWorking on $(pwd)/$project"echo -e "e[33mtRemoving old publish output"pushd $(pwd)/$project      rm -rf obj/Docker/publish      echo -e "e[33mtRestoring project"dotnet restore      echo -e "e[33mtBuilding and publishing projects"dotnet publish -o obj/Docker/publish      popd  done    # remove old docker images:  images=$(docker images --filter=reference="eshop/*" -q)if [ -n "$images" ]; then      docker rm $(docker ps -a -q) -f      echo "Deleting eShop images in local Docker repo"echo $images      docker rmi $(docker images --filter=reference="eshop/*" -q) -f  fi    # No need to build the images, docker build or docker compose will  # do that using the images and containers defined in the docker-compose.yml file.

powershell代码如下

Param([string] $rootPath)  $scriptPath = Split-Path $script:MyInvocation.MyCommand.Path    Write-Host "Current script directory is $scriptPath" -ForegroundColor Yellowif ([string]::IsNullOrEmpty($rootPath)) {      $rootPath = "$scriptPath.."}  Write-Host "Root path used is $rootPath" -ForegroundColor Yellow    $projectPaths =       @{Path="$rootPathsrcWebWebMVC";Prj="WebMVC.csproj"},      @{Path="$rootPathsrcWebWebSPA";Prj="WebSPA.csproj"},      @{Path="$rootPathsrcServicesIdentityIdentity.API";Prj="Identity.API.csproj"},      @{Path="$rootPathsrcServicesCatalogCatalog.API";Prj="Catalog.API.csproj"},      @{Path="$rootPathsrcServicesOrderingOrdering.API";Prj="Ordering.API.csproj"},      @{Path="$rootPathsrcServicesBasketBasket.API";Prj="Basket.API.csproj"}      @{Path="$rootPathsrcWebWebStatus";Prj="WebStatus.csproj"}    $projectPaths | foreach {      $projectPath = $_.Path      $projectFile = $_.Prj      $outPath = $_.Path + "objDockerpublish"$projectPathAndFile = "$projectPath$projectFile"Write-Host "Deleting old publish files in $outPath" -ForegroundColor Yellow      remove-item -path $outPath -Force -Recurse -ErrorAction SilentlyContinue      Write-Host "Publishing $projectPathAndFile to $outPath" -ForegroundColor Yellow      dotnet restore $projectPathAndFile      dotnet build $projectPathAndFile      dotnet publish $projectPathAndFile -o $outPath  }      ########################################################################################  # Delete old eShop Docker images  ########################################################################################    $imagesToDelete = docker images --filter=reference="eshop/*" -q    If (-Not $imagesToDelete) {Write-Host "Not deleting eShop images as there are no eShop images in the current local Docker repo."}   Else   {      # Delete all containers      Write-Host "Deleting all containers in local Docker Host"docker rm $(docker ps -a -q) -f            # Delete all eshop images      Write-Host "Deleting eShop images in local Docker repo"Write-Host $imagesToDelete      docker rmi $(docker images --filter=reference="eshop/*" -q) -f  }    # WE DON'T NEED DOCKER BUILD AS WE CAN RUN "DOCKER-COMPOSE BUILD" OR "DOCKER-COMPOSE UP" AND IT WILL BUILD ALL THE IMAGES IN THE .YML FOR US

自己感觉,这两个东西在以后的程序部署上都会发挥各自强大的力量!

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享