PowerShell免费软件

powershell V6.0登基之:《瘸腿脚本大帝进攻linux!》

------【前言】------


每个ps大版本发布,我都会写个消息。

这次的,
主标题就叫:powershell v6.0登基
副标题就叫:《瘸腿脚本大帝进攻linux!》


------【powershell v6.0新特性概述】------


很明显,powershell6.0的最大特性是支持linux了。从2016年9月左右立项,到2018年1月发布。还是比较快的。主要是开发人员少。

概述:
语法99%兼容旧版本,并增加了语法糖。
linux中的命令和库,砍掉了大半,只剩30%左右。


powershell v6.0新特性,根据官方资料翻译整理,此中文版目前网上没有。2018-01-13 第一版。
翻译整理不准确的地方,欢迎帮忙斧正。

参考资料:
https://github.com/PowerShell/PowerShell/blob/master/docs/BREAKINGCHANGES.md
https://docs.microsoft.com/en-us/powershell/scripting/whats-new/what-s-new-in-powershell-core-60?view=powershell-6

 

------【引擎,语法:】------


·执行程序由【powershell】变更为【pwsh】

·pwsh后默认跟xxx.ps1,即脚本文件,而不是命令。
如果是命令需要显示声明-c,或-command。或【#!/usr/bin/env pwsh -c】

·新增内置变量
$IsCoreCLR                                                                                                             
$IsLinux                                                                                                             
$IsMacOS                                                                                                            
$IsWindows
用于判断系统。

·新增语法糖:'a'..'z'

·支持特殊unicode字符格式。"`u{1f44d}" ---》 👍

·[pscustomobject] @{ foo = 'bar' })
新增count,length属性。新增.foreach(),.where()方法。
#在下一个小版本中实现。

·在使用linux本地命令时,支持参数中的【\】来进行转义

·新增后台符号【&】。放在最后面的后台符号,代表start-job。即把任务放入新建的线程中。

·为ESC添加了新的转义字符: `e

·在分割运算符split中启用'Singleline,Multiline'选项

·不要插入换行符输出(除了表格)
以前,输出与控制台的宽度对齐,并且换行符被添加到控制台的最终宽度,这意味着如果终端调整大小,输出不会按预期重新格式化。此更改不适用于表,因为换行是保持列对齐所必需的。


·-Verbose和-Debug不再覆盖$ErrorActionPreference
以前,如果-Verbose或被-Debug指定,它会覆盖的行为$ErrorActionPreference。
随着这一变化,-Verbose并-Debug不再影响的行为$ErrorActionPreference。

·对于Mandatory参数ValidateNotNull和ValidateNotNullOrEmpty属性,跳过空元素检查,如果集合的元素类型是值类型。

·更改$OutputEncoding为使用UTF-8 NoBOM

·点击脚本cmdlet时,将自动变量的局部变量引入“DottedScopes”(#4709)

·添加一个名为PowerShellProperties.jsonin 的JSON配置文件$PSHome来存储启动时间之前所需的一些设置(例如ExecutionPolicy)。

 

------【调试:】------

支持远程步入调试Invoke-Command -ComputerName。(#3015)
在PowerShell Core中启用联编程序调试日志记录
启用从UNC路径使用文件系统提供程序。($ 4998)
Split-Path 现在与UNC的根源

 


------【文件:】------

linux的log使用Syslog。
Linux / macOS配置文件路径位于 ~/.config/powershell/profile.ps1
历史保存路径位于 ~/.local/share/powershell/PSReadline/ConsoleHost_history.txt
用户模块路径位于 ~/.local/share/powershell/Modules
支持在Unix上包含冒号字符的文件和文件夹名称。
支持脚本名称或具有逗号的完整路径。
检测何时-LiteralPath用于抑制导航cmdlet的通配符扩展。
Get-ChildItem现在返回在递归搜索期间遇到的符号链接,不搜索这些链接所指向的目录。
添加一个参数来Get-ChildItem调用-FollowSymlink符号链接,并检查链接循环。(#4020)
允许使用长度超过260个字符的路径。

 

------【大小写:】------

环境变量 区分。
Import-Module 不区分。
PSModulePath 不区分。

 

------【库,模块,cmdlet:】------

·New-PSSession新增3个参数,【-HostName】,【-UserName】,【-KeyFilePath】,用于linux客户机,连接linux服务器。

·Get-Content $Path -Encoding Byte  变更为Get-Content $Path -AsByteStream

·import-csv 现在已经支持,所有回车格式。

·添加Get-Uptime
·添加Remove-Alias命令。


JSON cmdlet:
添加-AsHashtable到ConvertFrom-Json返回一个Hashtable代替。(#5043)(谢谢@bergmeister!)
使用更美观的格式化程序与ConvertTo-Json输出。(#2787)(感谢@kittholland!)
添加Jobject序列化支持ConvertTo-Json。(#5141)
修复ConvertFrom-Json从管道中反序列化字符串的数组,这些字符串一起构造完整的JSON字符串。这解决了一些情况,换行符会破坏JSON解析。(#3823)
删除AliasProperty "Count"定义的System.Array。这将删除Count某些ConvertFrom-Json输出上的无关属性。(#3231)(感谢@PetSerAl!)
ConvertTo-Json添加了-EnumsAsStrings参数


Web cmdlet:
为web cmdlet添加证书认证支持。(#4646)(谢谢@markekraus)
将对内容标题的支持添加到Web cmdlet。(#4494&#4640)(谢谢@markekraus)
向Web Cmdlet添加多个链接头支持。(#5265)(谢谢@markekraus!)
支持Web cmdlet中的链接标题分页(#3828)
因为Invoke-WebRequest,当响应包含链接标题时,我们创建一个RelationLink属性作为表示URL和rel属性的字典,并确保URL是绝对的,以便开发者更容易使用。
因为Invoke-RestMethod,当响应包含一个链接头时,我们公开一个-FollowRelLink开关,自动跟随next rel链接,直到它们不再存在,或者一旦我们点击可选-MaximumFollowRelLink参数值。
将-CustomMethod参数添加到Web cmdlet以允许使用非标准方法动词。(#3142)(感谢@ Lee303!)
SslProtocol向Web Cmdlet 添加支持。(#5329)(谢谢@markekraus!)
将多部分支持添加到Web cmdlet。(#4782)(谢谢@markekraus)
添加-NoProxy到网络cmdlet,以便他们忽略系统范围的代理设置。(#3447)(感谢@TheFlyingCorpse!)
Web Cmdlet的用户代理现在报告OS平台(#4937)(谢谢@LDSpits)
将-SkipHeaderValidation交换机添加到Web cmdlet以支持添加标头,而不验证标头值。(#4085)
如果需要,启用Web cmdlet不验证服务器的HTTPS证书。
将身份验证参数添加到Web cmdlet。(#5052)(谢谢@markekraus)
添加-Authentication提供了三个选项:基本,OAuth和承载。
添加-Token以获取OAuth和承载选项的不记名标记。
添加-AllowUnencryptedAuthentication以绕过除HTTPS之外的任何传输方案提供的验证。
添加-ResponseHeadersVariable到Invoke-RestMethod启用响应头的捕获。(#4888)(谢谢@markekraus)
修复web cmdlet,以便在响应状态代码不成功时将HTTP响应包含在异常中。(#3201)
将web cmdlet UserAgent从更改WindowsPowerShell为PowerShell。(#4914)(谢谢@markekraus)
将显式ContentType检测添加到Invoke-RestMethod(#4692)
修复web cmdlet -SkipHeaderValidation以使用非标准的User-Agent标题。(#4479&#4512)(谢谢@markekraus)


服务cmdlet:
添加属性UserName,Description,DelayedAutoStart,BinaryPathName,并StartupType在ServiceController通过返回的对象Get-Service。(#4907)(谢谢@joandrsn)
添加功能来设置凭据的Set-Service命令。(#4844)(谢谢@joandrsn)
添加Remove-Service。


其他cmdlet:
添加-Extension并-LeafBase切换到,Split-Path以便可以在文件扩展名和文件名的其余部分之间分割路径。(#2721)(感谢@powercode!)
添加参数-Top,并-Bottom以Sort-Object对顶部/底部筛选。
通过添加CodeProperty "Parent"to来公开进程的父进程System.Diagnostics.Process。(#2850)(感谢@powercode!)
使用MB而不是KB存储列 Get-Process
添加-NoNewLine开关Out-String。(#5056)(谢谢@ raghav710)
Move-Item 增加-Include,-Exclude和-Filter参数。(#3878)
允许*在注册表路径中使用Remove-Item。(#4866)
添加-Title到Get-Credential和统一跨平台的提示体验。
添加-TimeOut参数Test-Connection。(#2492)
Get-AuthenticodeSignaturecmdlet现在可以获取文件签名时间戳。(#4061)
删除不受支持的-ShowWindow开关Get-Help。(#4903)
修复Get-Content -Delimiter在数组元素返回时不包括分隔符(#3706)(Thanks @ mklement0)
添加Meta,Charset和Transitional参数ConvertTo-HTML(#4184)(谢谢@ ergo3114)
添加WindowsUBR和WindowsVersion属性的Get-ComputerInfo结果
添加-Group参数Get-Verb
添加ShouldProcess支持New-FileCatalog和Test-FileCatalog(修复-WhatIf和-Confirm)。(#3074)(感谢@iSazonov!)
将-WhatIf切换器添加到Start-Process (#4735)(谢谢@sarithsutha)
添加ValidateNotNullOrEmpty太多的现有参数。

 


------【Tab完成:】------

基于运行时变量值增强了选项卡完成中的类型推断。(#2744)(感谢@powercode!)

$p = Get-Process
$p | Foreach-Object {<tab>
添加Hashtable的标签完成了-Property的Select-Object。(#3625)(感谢@powercode)

Select-Object启用参数自动完成, -ExcludeProperty和-ExpandProperty。(#3443)(感谢@iSazonov!)
修复制表符完成中的一个错误,使native.exe --<tab>调用本地完成。(#3633)(感谢@powercode!)

 

 

------【缺少的功能:】------

所谓瘸腿就是这里了。那么说瘸腿就要被你耻笑吗?  ---有能耐你别跑,瘸腿我也是脚本大帝,让我装好腿,装好腿我踢死你   ^_^
不知道电影《钢铁侠1》你看过没有。美国武器先进,半套破烂的钢铁侠装甲,就是屠龙刀,可以吊打恐怖势力。
仙界法宝残片,即人界屠龙刀! 即使一土鳖主角,得到也可人界无敌。
神界的一根吊毛,在人界就是一座山!


1基于workflow的多进程并发缺失。即foreach -parallel() ,for -parallel() 。bash脚本中,原来也没这些功能。
2砍掉了系统紧密的命令。xxx-service。get-netipaddress。get-counter等。
3由于缺乏图形库winform,wpf,win上的图形功能无法实现。
4由于没有声音库,txt2语言功能无法实现。
5由于linux下无法运行office,基于office库的调用excel,做表,作图。调用word,visio都无法实现。
6linux中没有wmi相关命令。
7缺少convertfrom-string命令。
8
9

 

问:你都瘸腿了,还敢自称脚本大帝?你有啥能耐,说出来?
答:
瘸腿也是大帝,瘸腿照样吊打bash+python。

------【给linux带来的功能:】------


1ps是多线程的,给脚本带来了多线程并发。ps也可以多进程。而.sh脚本只有多进程。
2给脚本带来了比bash强的debug功能。如job的debug等。
3完全可以用【全中目录名】,绝无任何问题!而python用中文路径有各种问题,有些是bug,有些是转义问题。
4完全可以用【全中文脚本名】,绝无任何问题!如【瘸腿脚本大帝.ps1】。但一般为了输入脚本名方便,
都用2---3个英文打头。【qt瘸腿脚本大帝.ps1】
5支持中文函数名,参数名,变量名。(ps中我这样用了6年,毫无问题。py中谁敢这样用?包你问题蹦吧出)
6支持中文单双引号,中文空格(全角空格)。
7支持cr,lf,crlf回车。
8带来了,处理多种数据格式,的命令。可以处理csv,json,xml,html等。
9世界上唯一的,支持【对象】的管道。
10世界上唯一的,基于命令行的,基于ssh的,客户机服务器之间的,远程传输【对象】。
11支持自动识别文本编码(基于bom头),支持手动指定文本编码(某些shell命令不行,需要文件另存)
12ps1开发工具vscode,免费好用,生产效率高!调试功能比shell强。
vscode界面是中文的,无需破解,比pycharm,Sublime Text好。
13继承并发扬了切都是目录的概念。延伸出了一切都是盘符。下列假盘符(等),真好用。【alias:】,【Env:】,【Function:】,【Variable:】。
14
15


结论:
powershell ≈= shell + python。比它俩更适合于运维。学了ps,通吃win,linux。无需再学shell和python。即可【尽解所有脚本难题】。

 

posted on 2018-01-14 13:00  PowerShell免费软件  阅读(607)  评论(0编辑  收藏  举报

导航