PowerShell是运转在windows平台的脚本,而Bash是运作在linux平台的本子

PowerShell和Bash的介绍,powershellbash

PowerShell是运营在windows平台的脚本,而Bash是运作在linux平台的本子

今日bash能做的事务,PowerShell也能做,PowerShell的强有力之处是它可以管理windows服务器(特别是域domain),以后的开源PowerShell
也得以管理Linux和Mac(通过PSRP)。

一、进行powershell的程序

澳门金沙国际 1

贰、创制脚本,轻便的Helloworld.ps壹

职分的自动化是以程序文件或许可实行脚本文件为根基的,PowerShell也帮忙将下令列表做成脚本文件来实行。以下是Helloworld.ps1脚本文件的内容:

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

Helloworld.ps一脚本文件的实践情形结果如下:

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

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

下边是在eShopOnContainers上的1个事例,分别用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:prod

for project in "${projectList[@]}"
do
    echo -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 Yellow

if ([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是运维在windows平台的剧本,而Bash是运作在linux平台的脚本
未来bash能做的政工,PowerShell也能做,…

目前bash能做的事务,PowerShell也能做,PowerShell的有力之处是它能够管理windows服务器(更加是域domain),现在的开源PowerShell
也能够处理Linux和Mac(通过PSRP)。

powershell版本

下载最新的PS程序

假定你的系统是window7或许Windows Server 二〇一〇,那么PowerShell
2.0曾经松手了,能够荣升为3.0,四.0。
比方你的连串是Windows 八 大概Windows server 二〇一一,那么PowerShell
叁.0一度停放了,能够升高为四.0。
只要您的体系为Windows 8.壹也许Windows server 贰零1三 Lacrosse2,这暗中同意已经是四.0了。

  Windows
Management Framework 4.0

设置后它会有powershell和它的支出IDE工具,ISE,异常正确!

启动 Windows PowerShell ISE  Integrated Scripting Environment**

一、进行powershell的程序

在 Windows Vista、Windows Server 二零零六 和越来越高版本的 Windows
中,在“开头”菜单中,依次单击“开头”、“全部程序”、“附属类小部件”、“Windows
PowerShell”文件夹和“Windows PowerShell ISE”项。
在 Windows XP 和 Windows Server 200三 中,若要运行 Windows
PowerShell,请在“早先”菜单中相继单击“开端”、“程序”、“附属类小部件”、“Windows
PowerShell”文件夹和“Windows PowerShell ISE”项。
在 Windows PowerShell 控制台、Cmd.exe
或“运行”框中,键入“powershell_ise.exe”。

澳门金沙国际 2

PowerShell中从未公文的概念,只有项【Item】的定义,像Windows驱动器、目录、文件、注册表、变量等新闻都被架空成了”项”的定义,PowerShell使用”项”来张开统壹管理。本次大家只关怀文件系统,即目录、文件,别的系统持续篇章再做摸底。
PowerShell和Bash的牵线。关于文件系统的授命有如下一些:
New-Item
Copy-Item
Move-Item
Remove-Item
Rename-Item
Invoke-Item
当然,那么些命令不仅仅用于文件系统,像驱动器、注册表等都足以应用,本次大家只从文件系统的角度去关注那几个命令。

2、创立脚本,简单的Helloworld.ps1

执行powershell脚本
PowerShell[.exe] -Help | -? | /?

职分的自动化是以程序文件可能可实践脚本文件为底蕴的,PowerShell也支持将下令列表做成脚本文件来实行。以下是Helloworld.ps1脚本文件的剧情:

Restricted——暗许的安装, 不容许任何script运转
AllSigned——只可以运维经过数字证书签字的script
RemoteSigned——运维业地的script无需数字签名,然而运营从互联网上下载的script就不能够不要有数字签字
Unrestricted——允许具有的script运营
windows私下认可不容许其余脚本运维,你能够运用”Set-ExecutionPolicy”cmdlet来改动的您PowerShell意况。举个例子,你可以动用如下命令让PowerShell运营在无界定的条件之下:
PS C:\Users\flt\ps> Set-ExecutionPolicy Unrestricted
Set-ExecutionPolicy :
对注册表项“HKEY_澳门金沙国际 ,LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell”的造访被拒绝。
要更换默许(LocalMachine)效能
域的执行政策,请使用“以管理人身份运转”选项运转 Windows
PowerShell。要改动当前用户的实行政策,请运营 “Set-ExecutionPolicy -Scope
CurrentUser”。
PS C:\Users\flt> Set-ExecutionPolicy Unrestricted -Scope
CurrentUser
抑或输入以下命令:runas /noprofile /user:Administrator cmd
然则本身的管理员账号未有密码,不能切换成administrator权限,展现不可能运营服务。
看来那种通过的不二等秘书籍对于未有设置管理员密码的计算机照旧略微难点。

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

使用java调用powershell脚本,能够应用以下命令:
String cmd = “cmd /c powershell -ExecutionPolicy RemoteSigned -noprofile
-noninteractive -file \””

Helloworld.ps一脚本文件的实施情状结果如下:

  • scriptFilename + “\””;

PS E:\>.\Helloworld.ps1  --注意在执行它时要加.\,表示当前上当下的文章,类似于centos里的文件执行方法

一.最常见的运作脚本的艺术是调用它:
PS C:\> & “C:\Belfry\My first Script.ps1”  
留意: 这里的”&”操作符能允许你调用一个发令, 脚本, 或函数. 比方:
设若路线不含有别的的空格, 那么你就足以忽略引号和’&’操作符.
PS C:\> C:\Belfry\Myscript.ps1
假定脚本就在当前路线下,
你必须利用标记”.\”来报告PowerShell该脚本就在时下路线下.
PS C:\> .\Myscript.ps1  

Hello world!

二.Dot Sourcing
当使用方面包车型地铁语法实施脚本的时候,
脚本中定义的变量和函数会在本子运转甘休后一去不复返。假诺您利用dot
sourcing来运维脚本的时候,
全体脚本中定义的变量和函数会在本子运转截至后依旧存在。
举个例子运维dot-sourcing脚本.
PS C:\> . “C:\Belfry\My first Script.ps1”  
PS C:\> . .\Myscript.ps1″

Directory: E:\

Powershell对象=属性+方法

Mode                LastWriteTime     Length   Name

在实际世界中,你可能曾经掌握对象就是那几个可以摸到的事物。Powershell中的对象和现实生活很一般。比方要在现实生活中描述1把小刀。大家可能会分两上面描述它
属性:一把小刀具备一些奇怪的属性,比如它的颜料、创造商、大小、刀片数。那几个目的是丙午革命的,重55克,有三个刀片,ABC企业生产的。由此属性描述了2个对象是怎么着。
方法:能够运用那几个指标做什么,比方切东西、当螺丝钉用、开特其拉酒盖。一个对象能干什么就属于这么些目的的办法。

----                -------------     ------ ----

按Insert键设置命令行编辑格局为改写格局,
再按三遍Insert键命令行重临插入方式. 当命令行处于改写形式,
你输入字符将会替代被光标高亮显示的字符. 当命令行处于插入情势(暗中认可状态),
字符被插入到光标字符此前.
按Backspace键删除光标前3个字符(改写或插队方式). 改写形式中,
按Delete键删除高亮字符. 在插入方式, 按Delete键删除下二个字符.
按Tab键自动补全你输入的路线. 假诺第一个有血有肉的门径不是您愿意的,
再二次按Tab知道科学的门道出现. 注意Tab键补全的门道只能是目前子目录中.
举个例子, 要是你输入了c:\ 然后按Tab键, 可选路线之1将会是c:\windows,
而不是c:\windows\system32. 要进入结构中的下个档案的次序(译者注:
文件系统中正是子目录), 在增选的父目录后输入反斜杠, 然后按Tab键. 比方,
若是你一贯按Tab直到看见c:\windows, 你能够在行尾输入多个反斜线,
然后继续按Tab键来遍历结构中的下一层.

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

今天为大家总括了在调整台的兼具快捷键, 方便大家使用PowerShell.
实际上Cmd.exe或其余调控台都援助这个连忙键的.

上边是在eShopOnContainers上的三个例子,分别用ps和bash落成了先后的安插

按键

功能

光标向左移动一个字符

Ctrl + ←

光标向左移动一个单词

光标向右移动一个字符

Ctrl + →

光标向右移动一个单词

Home键

光标移动到行首

End键

光标移动到行尾

Delete键

删除光标指向的字符

Backspace键或Ctrl + H

删除光标左边第一个字符

Ctrl + End键

删除从光标到行尾的所有字符

Esc键

清除当前输入的所有字符

Insert键

插入与改写模式切换

Tab键

Tab键自动完成命令,例如:自动完成命令的名称、cmdlet命令的参数、路径。如果第一个提示的对象不是您期望的结果,继续输入Tab键,将会自动显示下一个候选对象。

向上查询历史命令

向下查询历史命令

F7键

显示命令历史记录,以图形列表窗的形式给出所有曾经输入的命令,并可用上下箭头键选择再次执行该命令。

F8键

搜索命令对应的历史记录,在命令上输入命令的一部分内容后,按F8键,可以得到匹配该输入的历史命令。如果有多个匹配项,重复按F8,可以循环显示所有曾经输入的命令。如果命令行为空,则默认匹配所有历史输入的命令。

F9键

按编号选择历史命令,以图形对话框方式要求您输入命令所对应的编号(从0开始),并将该命令显示在屏幕上。

Enter键或Ctrl + M

回车(Enter)

Ctrl + C

终止当前执行的命令

Ctrl + Break

终止当前执行的命令

Alt + F7键

清除所有曾经输入的命令历史记录

#!/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:prod

for project in "${projectList[@]}"
do
    echo -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把所有环境变量的记录保存在env: 虚拟驱动中,因此可以列出所有环境变量 。一旦查出环境变量的名字就可以使用$env:name 访问了。
PS C:\Users\flt\ps> ls env:

Name                           Value
----                           -----
ALLUSERSPROFILE                C:\ProgramData
APPDATA                        C:\Users\flt\AppData\Roaming
CommonProgramFiles             C:\Program Files\Common Files
CommonProgramFiles(x86)        C:\Program Files (x86)\Common Files
CommonProgramW6432             C:\Program Files\Common Files
COMPUTERNAME                   FLT-NB
ComSpec                        C:\Windows\system32\cmd.exe

PS C:\Users\flt\ps> $env:APPDATA
C:\Users\flt\AppData\Roaming
PS C:\Users\flt\ps> dir a.ps|Format-List *


PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\Users\flt\ps\a.ps
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\Users\flt\ps
PSChildName       : a.ps
PSDrive           : C
PSProvider        : Microsoft.PowerShell.Core\FileSystem
PSIsContainer     : False
VersionInfo       : File:             C:\Users\flt\ps\a.ps
                    InternalName:
                    OriginalFilename:
                    FileVersion:
                    FileDescription:

PS C:\Users\flt\ps> Get-Variable

Name                           Value
----                           -----
$                              *
?                              True
^                              Get-Variable
args                           {}
ConfirmPreference              High

PS C:\Users\flt\ps> Get-Variable|fl *|more

Name        : $
Description :
Value       : more
Visibility  : Public
Module      :
ModuleName  :
Options     : None
Attributes  : {}

Value       : False
Name        : ?
Description : 上一命令的状态
Visibility  : Public
Module      :
ModuleName  :
Options     : ReadOnly, AllScope
Attributes  : {}

powershell代码如下

 

Param([string] $rootPath)
$scriptPath = Split-Path $script:MyInvocation.MyCommand.Path

Write-Host "Current script directory is $scriptPath" -ForegroundColor Yellow

if ([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

 

友好深感,那四个东西在随后的先后陈设上都会发挥各自壮大的力量!

cmd控制台与ps控制台
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\flt>powershell
Windows PowerShell
版权所有 (C) 2009 Microsoft Corporation。保留所有权利。
PS C:\Users\flt>

例如通过ls获取当前目录的所有文件信息,然后通过Sort -Descending对文件信息按照Name降序排列,最后将排序好的文件的Name和Mode格式化成Table输出。
PS C:\Users\flt> ls | sort -Descending Name | Format-Table Name,Mode

Name                                                                            Mode
----                                                                            ----
Videos                                                                          d-r--
Searches                                                                        d-r--
Saved Games                                                                     d-r--
Roaming                                                                         d----
Desktop                                                                         d-r--
Contacts                                                                        d-r--
.vmrc_plugin_ovftool_settings.js                                                -a---

重定向
把命令的输出保存到文件中,‘>’为覆盖,’>>’追加。
PS C:\Users\flt\ps> "poweersheel" > a.txt
PS C:\Users\flt\ps> cat .\a.txt
poweersheel
PS C:\Users\flt\ps> "poweersheel" >>a.txt
PS C:\Users\flt\ps> cat a.txt
poweersheel
poweersheel

我们可以把powershell当成一个计算器。象键入命令行那样输入数学表达式,回车,powershell会自动计算并把结果输出。常用的加减乘除模(+,-,*,/,%)运算和小括号表达式都支持。
PS C:\Users\flt> 1+2+3
6
PS C:\Users\flt> 2/2
1
PS C:\Users\flt> 6/3
2
PS C:\Users\flt> 2*4
8
PS C:\Users\flt> 3%2
1
PS C:\Users\flt> 9%6
3
1gb/20mb*10kb
80kb*800*30/1gb
10GB/(80KB*5)/30

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\flt>powershell
Windows PowerShell
版权所有 (C) 2013 Microsoft Corporation。保留所有权利。

先看看$psversiontable,这个变量拆开来看就是ps-version-table,表示PowerShell中各组件的版本号列表。其中表示PowerShell自己的版本号(PSVersion),也包括.NET的版本号(CLRVersion),还有Windows版本号(BuildVersion)
PS C:\Users\flt> $psversiontable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.18408
BuildVersion                   6.3.9600.16406
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

接下来看看$host变量,里面一个Version,表示PowerShell的版本号。
PS C:\Users\flt> $host

Name             : ConsoleHost
Version          : 4.0
InstanceId       : ec93e349-4833-4185-8f3d-8d365af04d70
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : zh-CN
CurrentUICulture : zh-CN
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace
PS C:\Users\flt> Get-Host

Name             : ConsoleHost
Version          : 4.0
InstanceId       : ec93e349-4833-4185-8f3d-8d365af04d70
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : zh-CN
CurrentUICulture : zh-CN
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

PS C:\Users\flt> Get-Host|Select-Object Name

Name
----
ConsoleHost 

相关文章