PowerShell VS Bash



PowerShell VS Bash

说明下,现在windows 10上有PowerShell 和 Bash, Linux和Mac上也有bash和PowerShell

很多人说bash很好用啊,特别是sed/awk之类的程序,应该很少人用PowerShell吧?

但是微软又不傻,PowerShell肯定有它的强大之处。

首先,PowerShell是一个工具也是一门脚本语言,微软基于.net/.net core开发的,bash是linux开源的一个命令行程序或者文件,当然你也可以写shell脚本。

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

其次,PowerShell能做下面这些事:

.NET/.NET CORE编程, Registry, COM, WMI, ADSI. Exchange, Sharepoint, Systems Center, Hyper-V, SQL. VMware vCenter, Cisco UCS, Citrix XenApp and XenDesktop.,Azure, Excel 和 Office applications.基本上所有的微软产品都提供PowerShell接口。

另外,PowerShell是处理的是一个对象,而bash则不是。

现在你可以使用PowerShell来管理所有的机器(Windows/Linux/Mac),性能方面,我们来写个测试程序

先看输出。运行下面脚本/root/test.sh

#!/bin/bash
START=$(date +%s%N);
for i in {1..10000}
do
   #true
   echo "Welcome $i times"
done
END=$(date +%s%N);
echo $((END-START)) | awk '{print int($1/1000000) "ms"}'

Putty上bash输出:1147ms

Putty上PowerShell输出:1366ms

目前来说bash是快了一点。

看下处理字符串的能力:

http://jon.netdork.net/2012/03/07/powershell-vs-bash-string-processing-face-off/

生成deleted_imgs.csv

echo 'Vehicle_ID,URL,DateDeleted,PhotoDeletedID
58331549,\3860\1111111174WC448544WC44854279176192.jpg,2012-03-03 11:37:35.080000000,224516659
58331549,\3860\1111111174WC448544WC44854279176194.jpg,2012-03-03 11:37:38.420000000,224516660
58331995,\2635\1111111199E1648779E164877279175843.jpg,2012-03-03 11:41:35.510000000,224516661
58050027,\5524\56840113_02_222222225WF265239_9.jpg,2012-03-03 12:42:41.537000000,224516931'>/root/deleted_imgs.csv

PowerShell处理:

$ck = [System.Diagnostics.Stopwatch]::StartNew()

$base = "/root"
$file = "/root/deleted_imgs.csv"
$sql = "delete from photo_deleted where PhotoDeletedID = {0}"

$p_file = "/root/ps_file.txt"
$p_sql = "/root/ps_sql.txt"

$pf = [System.IO.File]::CreateText($p_file)
$ps = [System.IO.File]::CreateText($p_sql)

$fh = [System.IO.File]::OpenText($file)
try {
    for (;;)
    {
        $line = $fh.ReadLine()
        if ($line -eq $null) { break; }

        if ($line -like '*_02_*') {
            $data = $line.Split(',')

            $file = $base + $data[1]
            $rem = $sql -f $data[3]

            $pf.WriteLine($file)
            $ps.WriteLine($rem)

        }
    }
}finally {
    $fh.Close()
}

$pf.Close()
$ps.Close()

$ck.Stop()
$ck.Elapsed

Bash处理:

#!/bin/bash

exec 5<> "/root/bash_sql2.txt"
exec 6<> "/root/bash_files2.txt"

OIFS=${IFS}
IFS=","
while read -r line
do
        #echo "${line}"
        if [[ "${line}" == *_02_* ]];
        then
                DATA=(${line})
                ID="${DATA[3]}"
                URL="${DATA[1]}"
#               ID=`echo "${line}" | cut -d, -f4`
#               URL=`echo "${line}" | cut -d, -f2`

                echo "delete from photo_deleted where PhotoDeletedID = ${ID}" >&5
                echo "/root${URL}" >&6
        fi

done < "/root/deleted_imgs.csv"

IFS=${OIFS}

exec 5>&-
exec 6>&-

在同一台Ubuntu上运行结果:Bash:2毫秒,PowerShell:一次0.75毫秒,一次4.0毫秒,一次1.58毫秒,一次0.76毫秒,一次4.8毫秒,看来这个PowerShell版本好像不稳定额。。。(因为还在开发中)我使用的版本是5.1.10032.0,不是最新的,下次我用最新的版本试下,看是不是还是这样不稳定。

PS /workspace/PowerShell-1> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.10032.0
PSEdition                      PowerShellCore
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   3.0.0.0
GitCommitId                    v6.0.0-alpha.7
CLRVersion
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

时间: 2024-09-20 08:38:59

PowerShell VS Bash的相关文章

【探索PowerShell 】【三】PowerShell下使用Aliases

不知道各位有没有接触过linux,我才疏学浅,对alias的认识是从linux上来的.Linux常 用的Bash命令也是有上百个,虽然一般情况下命令都非常简短,不过很多时候需要大量的却 是大量的参数,这样,对很多初学者来说,背命令变成为最头疼的事情,也使得很多Linux初 学者望而生畏.因此,在linux下,很常用的就是alias,也就是别名.当然,PowerShell很 好的借鉴了这一点. 这一节就来介绍PowerShell下的Aliases. 在PowerShell中,为了习惯于使用,可以使

使用管道符在PowerShell中进行各种数据操作

最近在培训PowerShell,在讲到Pipeline的时候,对于我这种长期和数据(数据库)打交道的人来说,觉得很实用,所以写此博文,记录一下. 无论是在Linux中写Bash脚本还是在Window上写PowerShell,管道符"|"是一个非常有用的工具.它提供了将前一个命令的输出作为下一个命令的输入的功能.在数据处理中,我们也可以使用管道符对数据进行各种操作. Import&Export导入导出 先说导入导出是为了能够为接下来的数据处理准备数据.在PowerShell中我们

2013年5月编程语言排行榜:UNIX下的Bash

2013年5月9日,Tiobe公司发布新一期编程语言排行榜.新一期榜单前10位没有太多的变化,只是Objective-C与C++,Ruby与JavsScript在互相交换位置罢了.今天我们要关注的是排在TOP 20后半部的一门语言--Bash. 大家先请看本期TOP20榜单 从2013年4月的编程语言排行榜我们惊异的发现Bash这门UNIX下的壳语言,竟然有了飞速的上升.从第34位最高上升到第13位.究竟这门语言有什么独特之处? Bash语言2013年以来的增长势头 Bash的诞生 Bash这个

手把手教你:如何让Windows恋上Linux bash

4月7日,微软开始向用户推送Windows 10 biuld 14316预览版,该版本不仅在Cortana跨平台支持.Edge浏览器支持和虚拟桌面方面得到了优化,还能够原生支持Linux bash. 对现在的开发者来说,Linux已经是很多人必须的开发平台,在windows上不必借助虚拟机就能运行Bash,无疑有极大的吸引力. 但是微软并没有在最新版本Windows 10里直接内置Bash,需要开发者进行一些安装和设置工作.下面,笔者将会手把手教你,如何实现Ubuntu on Windows.

PowerShell 与 Linux 的前世、今生、未来

今天,我们的客户面对的是一个多平台.多云.多操作系统共存的世界.这个世界带来了新的挑战,用户需要新的工具把一切都整合起来.而微软上下都在全力以赴打造这样的管理工具,让用户能够在任何地方.用任何设备.对任何平台进行有效的管理--既可以用Windows,也可以是Linux.从客户需求出发.以更加开放的方式驱动创新,这是我们每天工作中最令人兴奋的部分. 正如微软CEO萨提亚·纳德拉所说,"微软热爱Linux",这的确是真爱:Azure上有近三分之一的虚拟机运行Linux.在Azure市场上,

Windows PowerShell 微软官方解释_PowerShell

通过提供一百多种系统管理实用工具.一致的语法.及对普通管理数据更好地导航(如登记或 Windows Management Instrumentation (WMI)),Windows PowerShell 使 Windows 管理员提高了生产力.Windows PowerShell 还包括全面启动 Windows 系统自动化管理任务的脚本编写语言.Windows PowerShell 语言是直观的,并支持贵企业现有的脚本和命令行工具投入.Exchange Server 2007 和 System

Windows10 1607系统中怎么开启 Bash on Ubuntu?

+ 确认系统已经更新到Windows 10 1607版本 + 64位处理器 & 64位操作系统     操作步骤:   1.依次点击"开始菜单"--"设置"--"更新和安全"--"针对开发人员",选择"开发人员模式":     2.点击"是"确认开启:     3.根据提示手动重启电脑:   4.通过同时按下键盘上的Windows徽标键+字母X按键打开超级菜单,点击"程

Windows 上的 Bash 正在成为微软的 Linux

微软对 Windows Subsystem for Linux(WSL)的一系列大量更新被列入 Windows Insider build 15002,该版本已于1月10日开始推送给 Windows 10 用户. 微软的 WSL 计划仍然是具有较强的暂时性和实验性的,但该公司正在不断往上添加功能,以飞快的步伐改进和扩展 WSL. 这在一定程度上也可以看出是种提示,微软的目标是使其成为其他 Linux 发行版的可靠替代品. 最新版本的 WSL(在 Windows 中称为 Bash )汇总了 Bas

Windows上的Bash正在成为微软的Linux

微软对 Windows Subsystem for Linux(WSL)的一系列大量更新被列入 Windows Insider build 15002,该版本已于1月10日开始推送给 Windows 10 用户. 微软的 WSL 计划仍然是具有较强的暂时性和实验性的,但该公司正在不断往上添加功能,以飞快的步伐改进和扩展 WSL. 这在一定程度上也可以看出是种提示,微软的目标是使其成为其他 Linux 发行版的可靠替代品. 微软对 Windows Subsystem for Linux(WSL)的