• 技术文章 >运维 >linux运维

    PowerShell和Bash的定义与使用

    PHP中文网PHP中文网2017-06-21 11:13:18原创1050
    PowerShell是运行在windows平台的脚本,而Bash是运行在linux平台的脚本

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

    下载最新的PS程序


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

    一、进行powershell的程序

    二、创建脚本,简单的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[33m\tRemoving old publish output"pushd $(pwd)/$project
        rm -rf obj/Docker/publish
        echo -e "\e[33m\tRestoring project"dotnet restore
        echo -e "\e[33m\tBuilding 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="$rootPath\src\Web\WebMVC";Prj="WebMVC.csproj"},
        @{Path="$rootPath\src\Web\WebSPA";Prj="WebSPA.csproj"},
        @{Path="$rootPath\src\Services\Identity\Identity.API";Prj="Identity.API.csproj"},
        @{Path="$rootPath\src\Services\Catalog\Catalog.API";Prj="Catalog.API.csproj"},
        @{Path="$rootPath\src\Services\Ordering\Ordering.API";Prj="Ordering.API.csproj"},
        @{Path="$rootPath\src\Services\Basket\Basket.API";Prj="Basket.API.csproj"}
        @{Path="$rootPath\src\Web\WebStatus";Prj="WebStatus.csproj"}
    
    $projectPaths | foreach {
        $projectPath = $_.Path
        $projectFile = $_.Prj
        $outPath = $_.Path + "\obj\Docker\publish"$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

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

    以上就是PowerShell和Bash的定义与使用的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:PowerShell Bash 介绍
    上一篇:windows环境使用linux出现的一些问题 下一篇:linux系统中对SSD硬盘优化的实例教程
    大前端线上培训班

    相关文章推荐

    • Linux下发送邮件的方法大总结• 技巧分享:Linux快速查看历史记录• 一文讲解Linux服务器如何部署apache和php• 唠唠到底是什么阻碍了Linux桌面的发展?• 一张图带你缕清linux目录结构!

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网