Powershell入门语法

Powershell入门语法Powershell简介由于cmd功能比较小,所以windows上诞生了新的shell类型。powershell有很多版本。不同版本的操作系统内置的powershell版本也不一样。可以升级。$PSVersionTable:查看powershell版本。PSC:\Users\JYT>$PSVersionTableNameValue-PSVersion

Powershell简介

  • 由于cmd功能比较小,所以windows上诞生了新的shell类型。
  • powershell有很多版本。不同版本的操作系统内置的powershell版本也不一样。可以升级。
    • $PSVersionTable:查看powershell版本。
PS C:\Users\JYT> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.19041.610
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.610
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
  • powershell强大之处:
    • 对计量单位的计算。
      • 1gb可以直接计算出字节。
    • 可以直接+-*/%进行数学计算。
      • 102410241024
    • 命令是通过动词+名词的形式,组合成一个命令。
      • Get-Service,获取当前的服务名。
      • Get-Date,获取当前的时间和日期。
    • 支持面向对象。
    • 可以和.net平台绑定。
    • 和cmd、vbs绑定非常高。

Powershell管道和重定向

  • 管道
  • 重定向
PS C:\Users\JYT\Desktop> ls | Format-Table name,mode

Name              Mode
----              ----
1.txt             -a----
bkce-nfs.sh       -a----
Google Chrome.lnk -a----
new 2             -a----
test.bat          -a----
test.txt          -a----
test_bak.bat      -a----
WPS Office.lnk    -a----
教育厅远程.lnk    -a----

PS C:\Users\JYT\Desktop> ls > .\1.txt
PS C:\Users\JYT\Desktop> type .\1.txt


    目录: C:\Users\JYT\Desktop


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         2020/12/2      9:51              0 1.txt
-a----         2020/9/11      8:47           1029 bkce-nfs.sh
-a----         2020/12/1      1:28           2423 Google Chrome.lnk
-a----          2020/6/1     11:54           2820 new 2
-a----         2020/12/1     15:17            309 test.bat
-a----         2020/12/1     11:00           2048 test.txt
-a----         2020/12/1     16:00            702 test_bak.bat
-a----         2020/5/21      3:11           1492 WPS Office.lnk
-a----         2020/5/18     11:19            738 教育厅远程.lnk   

Powershell数学运算

  • +、-、*、/、%
  • ()
  • 单位转换:1gb*1kb
  • 逻辑判断:-gt、-eq…
  • 进制转换

Powershell执行外部命令

  • 直接输入命令,比如:notepad.exe
  • 通过&“可执行命令”,比如:&“notepad”
  • 注意:命令必须在PATH变量中。
    • 查看path变量的值:$env:path
    • 修改path环境变量: e n v : p a t h = env:path= env:path=env:path+””
PS C:\Users\li> $env:path
C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Python37\Scripts\;C:\Program Files\Python37\;C:\Program Files\VanDyke Software\Clients\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Microsoft VS Code\bin;C:\Program Files\Git\cmd;C:\Users\li\AppData\Local\Microsoft\WindowsApps;C:\Program Files\Microsoft VS Code\bin;C:\Program Files\ffmpeg\bin;

Powershell命令集

  • Get-Command:获取当前系统上的所有命令。
PS C:\Users\li> Get-Command

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           Add-AppPackage                                     2.0.1.0    Appx
Alias           Add-AppPackageVolume                               2.0.1.0    Appx
Alias           Add-AppProvisionedPackage                          3.0        Dism
Alias           Add-ProvisionedAppPackage                          3.0        Dism
Alias           Add-ProvisionedAppxPackage                         3.0        Dism
Alias           Add-ProvisioningPackage                            3.0        Provisioning
Alias           Add-TrustedProvisioningCertificate                 3.0        Provisioning
Alias           Apply-WindowsUnattend                              3.0        Dism
Alias           Disable-PhysicalDiskIndication                     2.0.0.0    Storage
Alias           Disable-StorageDiagnosticLog                       2.0.0.0    Storage
Alias           Dismount-AppPackageVolume                          2.0.1.0    Appx
Alias           Enable-PhysicalDiskIndication                      2.0.0.0    Storage
Alias           Enable-StorageDiagnosticLog                        2.0.0.0    Storage
Alias           Flush-Volume                                       2.0.0.0    Storage
Alias           Get-AppPackage                                     2.0.1.0    Appx
Alias           Get-AppPackageDefaultVolume                        2.0.1.0    Appx
Alias           Get-AppPackageLastError                            2.0.1.0    Appx
Alias           Get-AppPackageLog                                  2.0.1.0    Appx
Alias           Get-AppPackageManifest                             2.0.1.0    Appx
Alias           Get-AppPackageVolume                               2.0.1.0    Appx

# alias:别名命令
# cmdlet:powershell内置的命令
# Function:函数命令。
# 
  • get-help get-command:查看get-command命令的帮助。
PS C:\Users\li> get-help get-command

名称
    Get-Command

语法
    Get-Command [[-ArgumentList] <Object[]>]  [<CommonParameters>]

    Get-Command [[-Name] <string[]>] [[-ArgumentList] <Object[]>]  [<CommonParameters>]


别名
    gcm


备注
    Get-Help 在此计算机上找不到该 cmdlet 的帮助文件。它仅显示部分帮助。
        -- 若要下载并安装包含此 cmdlet 的模块的帮助文件,请使用 Update-Help。
        -- 若要联机查看此 cmdlet 的帮助主题,请键入: "Get-Help Get-Command -Online" 或
           转到 https://go.microsoft.com/fwlink/?LinkID=113309。
  • Get-Alias:查看当前会话的别名。
  • Get-History:查看当前会话的历史记录。
  • Get-Date:查看当前日期。

Powershell别名的使用

  • Get-Help Get-ChildItem:查看命令的别名是什么。
  • Get-Alias -name ls:查看ls别名的完整命令。
  • Get-Alias | where {$_.Definition.StartsWith(“Remove”)}:查询别名中的原始命令以Remove字符开头的信息。
    • $_表示当前的信息。
    • Definition:是.net中的一个类库。
  • Get-Alias | Group-Object Definition | Sort -descending Count:跟原始命令对别名分组,查看他别名的数量,并按照数量进行降序排列。
PS C:\Users\li> Get-Alias -name ls

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           ls -> Get-ChildItem


PS C:\Users\li> Get-Alias | where {$_.Definition.StartsWith("Remove")}

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           del -> Remove-Item
Alias           erase -> Remove-Item
Alias           rbp -> Remove-PSBreakpoint
Alias           rd -> Remove-Item
Alias           rdr -> Remove-PSDrive
Alias           ri -> Remove-Item
Alias           rjb -> Remove-Job
Alias           rm -> Remove-Item
Alias           rmdir -> Remove-Item
Alias           rmo -> Remove-Module
Alias           rp -> Remove-ItemProperty
Alias           rsn -> Remove-PSSession
Alias           rsnp -> Remove-PSSnapin
Alias           rv -> Remove-Variable
Alias           rwmi -> Remove-WmiObject

PS C:\Users\li> Get-Alias | Group-Object Definition | Sort -descending Count

Count Name                      Group
----- ----                      -----
    6 Remove-Item               {del, erase, rd, ri...}
    3 Get-ChildItem             {dir, gci, ls}
    3 Get-History               {ghy, h, history}
    3 Copy-Item                 {copy, cp, cpi}
    3 Invoke-WebRequest         {curl, iwr, wget}
    3 Set-Location              {cd, chdir, sl}
    3 Get-Content               {cat, gc, type}
    3 Move-Item                 {mi, move, mv}
    2 Invoke-History            {ihy, r}
    2 Get-Process               {gps, ps}
    2 Rename-Item               {ren, rni}
    2 New-PSDrive               {mount, ndr}
    2 Write-Output              {echo, write}
    2 Stop-Process              {kill, spps}
    2 Get-Location              {gl, pwd}
    2 Set-Variable              {set, sv}
    2 Start-Process             {saps, start}
  • set-alias:创建别名
    • Set-Alias -name ll -value ls:临时设置别名。
    • del alias:ll:删除ll别名
    • Export-Alias 1_alias.txt:导出别名
    • Import-Alias -force .\1_alias.txt:强制导入别名。
PS C:\Users\li> Set-Alias -name ll -value ls
PS C:\Users\li> ll


    目录: C:\Users\li


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2019-9-24     10:21                .3T
d-----         2020-3-18     18:04                .android
d-----        2020-10-19     15:47                .anes
d-----          2020-6-9     18:24                .cache
d-----          2020-2-4      8:05                .local
d-----         2020-4-25     14:15                .matplotlib
d-----        2020-11-17     16:15                .oracle_jre_usage

Powershell定义变量

  • 普通变量
    • $name=“xiaoming”:声明一个变量name,值为xiaoming。
    • $name:引用name变量。
    • ${“I am a” var ()}=“haha”:如果变量名比较特别,需要使用{}。
    • $name=ls:将ls命令,传给变量 n a m e 。 可 以 通 过 name。可以通过 namename直接引用ls。
    • $name=(1+7-4)/2:算数计算的结果赋值给变量$name。
    • 注意:变量的值区分类型,有字符型,也有数值型。
    • 注意:powershell中,变量名不区分大小写。
    • $n1,$n2=$n2,$n1:变量交换值。
    • ls variable::查看当前系统中的所有变量。等价于Get-Variable。
    • ls variable:n1:查看当前系统中某一个变量的变量值。
    • ls variable:name*:查看以name开头的普通变量。
    • Test-Path variable:n1:判断某一个变量是否存在。
  • 设置自动化变量:一打开终端,便会自动加载的变量。
    • 只读变量:有一些自动化变量是只读变量,无法修改。比如$pid.
    • $?:判断上一个命令的执行结果。
  • 环境变量:
    • ls env::查看当前系统上所有的环境变量。
    • $env:OS:查看某一个环境变量的值。
    • $env:name=“hahaha”:临时声明一个环境变量为hahaha
    • ls env:nam*:查看以nam开头的环境变量。
    • del env:name:删除环境变量name。
    • [environment]::setenvironmentvariable(“NOW_DIR”,“C:\Users\li”,“User”):永久设置一个用户级别的环境变量NOW_DIR。
    • [environment]::getenvironmentvariable(“NOW_DIR”,“User”):查看用户级别的环境变量NOW_DIR。
    • 注意:环境变量分为用户环境变量和系统环境变量。
PS C:\Users\li> $name="str 123"
PS C:\Users\li> $name
str 123
PS C:\Users\li> ${name name}="haha"
PS C:\Users\li> ${name name}
haha
PS C:\Users\li> $name=ls
PS C:\Users\li> $name


    目录: C:\Users\li


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2019-9-24     10:21                .3T
d-----         2020-3-18     18:04                .android
d-----        2020-10-19     15:47                .anes
d-----          2020-6-9     18:24                .cache
d-----          2020-2-4      8:05                .local
d-----         2020-4-25     14:15                .matplotlib
d-----        2020-11-17     16:15                .oracle_jre_usage
d-----         2019-7-21     11:40                .pylint.d
d-----        2019-11-19      9:00                .ssh

PS C:\Users\li> $n1=$n2=40
PS C:\Users\li> $n1
40
PS C:\Users\li> $n2
40
PS C:\Users\li> $n2=30
PS C:\Users\li> $n2
30
PS C:\Users\li> $n1


PS C:\Users\li> $n1=1
PS C:\Users\li> $n2=2
PS C:\Users\li> $n1,$n2=$n2,$n1
PS C:\Users\li> $n1
2
PS C:\Users\li> $n2
1

PS C:\Users\li> ls variable:$

Name                           Value
----                           -----
$                              variable:


PS C:\Users\li> ls variable:n1

Name                           Value
----                           -----
n1                             2

PS C:\Users\li> ls env:

Name                           Value
----                           -----
ALLUSERSPROFILE                C:\ProgramData
APPDATA                        C:\Users\li\AppData\Roaming
CommonProgramFiles             C:\Program Files\Common Files
CommonProgramFiles(x86)        C:\Program Files (x86)\Common Files
CommonProgramW6432             C:\Program Files\Common Files
COMPUTERNAME                   DESKTOP-SA18EPG

PS C:\Users\li> ls env:nam*
PS C:\Users\li> $env:name="hahaha"
PS C:\Users\li> ls env:nam*

Name                           Value
----                           -----
name                           hahaha

PS C:\Users\li> [environment]::setenvironmentvariable("NOW_DIR","C:\Users\li","User")
PS C:\Users\li> [environment]::getenvironmentvariable("NOW_DIR","User")
C:\Users\li

Powershell脚本执行策略

  • powershell脚本默认是禁止直接执行的。
  • Get-ExecutionPolicy:查看powershell的脚本执行策略。
    • Restricted:受限的
  • Get-Help Set-ExecutionPolicy:查看都有那些脚本执行策略。
  • Set-ExecutionPolicy RemoteSigned:修改脚本执行策略。win10默认是禁止的。必须要管理员权限才能修改。

Powershell调用其他脚本

  • 通过bat脚本调用powershell脚本:
@echo off
powershell "&'C:\Users\Administrator\Desktop\test.ps1'"

# &'C:\Users\Administrator\Desktop\test.ps1':&符表示是可执行文件。

Powershell判断操作

  • -eq
  • -nq
  • -gt
  • -lt
  • -contains
  • -notcontains
  • -not
  • -or
  • -and
PS C:\WINDOWS\system32> $a
PS C:\WINDOWS\system32> $a=1gb
PS C:\WINDOWS\system32> $b=3kb
PS C:\WINDOWS\system32> $a -gt $b
True
PS C:\WINDOWS\system32> (1,2,3) -contains 2
True
PS C:\WINDOWS\system32> (1,2,3) -contains 5
False
PS C:\WINDOWS\system32> $result=1gb -gt 3mb
PS C:\WINDOWS\system32> $result
True

Powershell条件判断

  • ifeslse
    • if ( 2 -gt 3 ) {“yes”} else {“oh,no”}
    • if ( 2 -gt 3 ) {“yes”} elseif(2 -gt 1) {“nono”} else {“oh,no”}
  • switch
    • switch (60){
      {
      KaTeX parse error: Expected ‘EOF’, got ‘}’ at position 9: _ -lt 50}̲ {“小于50”}{
      _ -gt 50} {“大于50”}}
if ( 2 -gt 3 ) 
{
    "yes"
} 
elseif(2 -gt 1) 
{
    "nono"
}
else
{
    "oh,no"
}
$num=56
switch ($num)
{
    {($_ -lt 50) and ($_ -gt 40)} {"小于50,大于40"}
    {$_ -eq 50} {"等于50"}
    {$_ -gt 50} {"大于50"}
}

Powershell循环

  • forearch:循环
$arr=1..10
foreach ($n in $arr){$n/2}
foreach ($file in dir C:\中原消金)
{
    if ($file.length -gt 1kb) {$file}
}
  • while
$num=15
while($num -gt 10)
{
    $num
    $num=$num-1
}
  • do while
$num=15
do {
    $num
    $num=$num-1
}
while($num -gt 10)
  • break:退出循环

  • continue:退出本次循环,执行下次循环。

$num=15
while($num -gt 10)
{
    if ($num%2 -eq 1)
    {
        $num=$num-1
        continue
    }
    $num
    $num=$num-1
}
  • for循环
$num=0
for($i=1;$i -le 1000;$i++)
{$num=$num+$i}
$num

Powershell中的数组

  • $arr=1,2,3,4,5:声明一个数组
  • $arr=1…5:声明一个数组
  • $arr=“ipconfig”:声明一个数组
  • $arr -is [array]:判断变量是否是数组
  • $arr[0]:打印数组中的第一个元素
  • $arr[0…2]:打印数组中前三个元素
  • $arr.Length:查看数组的长度
  • $arr[($arr.Length)…0]:倒叙打印。
  • $arr=$arr+“a”:往数组中添加一个元素a。
$arr="ipconfig"
$arr=$arr+"a"
$arr[($arr.Length)..0]

Powershell函数

  • function funname () {}:创建一个函数。
  • mymessage(“aa”,12):调用函数。
  • mymessage “asd” 12:调用函数。
function myping ()
{
	ping www.baidu.com
}
function mymessage($name,$age)
{
	$content="i am $name,and i am $age years old."
	write-host $content
}
  • return
function mymessage($name,$age)
{
	$content="i am $name,and i am $age years old."
	return $content
}
$AA=mymessage "asd" 12
$AA

Powershell定义文本

  • “hello powershell.$(get-date)”
  • ‘你好:“hello powershell.”’
  • “你好:`n`thello powershell.”
  • 注意:`:转义字符

Powershell实现用户交互

  • Read-Host:从标准输入获取参数。
$input=Read-Host "请输入您的姓名"
"$input,您好...."

Powershell字符串格式化

  • format
$name="小小"
$age=25
$body="strong"
"My name is $name,i am $age,and my body is $body."
"My name is {0},i am {1},and my body is {2}." -f $name,$age,$body
  • String字符串
$str="https://elasticsearch.cn/question/1197"
$str.Contains('elas')

$attr=$str.Split("/")
$attr[-1]

$str.insert(0,'aaaaaaa')

今天的文章Powershell入门语法分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/9804.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注