powershell_配置文件与脚本编写(模板字符串插值/运算符与表达式/函数参数/控制流)(by offical)

powershell配置文件

refs

配置文件类型

  • PowerShell支持多个配置文件。可以按如下所示在不同级别应用它们:

  • 说明路径
    所有用户,所有主机$PSHOME\Profile.ps1
    所有用户,当前主机$PSHOME\Microsoft.PowerShell_profile.ps1
    当前用户,所有主机$Home[My]Documents\PowerShell\Profile.ps1
    当前用户,当前主机$Home[My]Documents\PowerShell\Microsoft.PowerShell_profile.ps1
    • 这里有两个变量:$PSHOME$Home.SPSHOME指向PowerShel‖的安装目录。
    • $Home为当前用户的主目录。
    • 其他程序也支持配置文件,如Visual Studio Code.

创建档案

  • 首次安装PowerShell时,没有任何配置文件。
    • 但有一个$Profile变量。
    • 它是一个对象,指向应放置每个要应用的配置文件的路径。
创建配置文件:
  • 1.确定要创建配置文件的级别。
    • 可运行$Profi1e|Select-object *来查看配置文件类型以及与它们关联的路径。
  • 2.使用如下所示的命令选择配置文件类型并在其位置创建文本文件:
    • New-Item-Path $Profile.CurrentUserCurrentHost
  • 3.将自定义项添加到文本文件并保存。
    • 下一次启动会话时,将应用所做的更改
查看所有配置文件目录操作效果
  • $profile|sls *
PS C:\Users\cxxu> $pshome
C:\Program Files\PowerShell\7
PS C:\Users\cxxu> $PROFILE
D:\usersByCxxu\DocumentsAll\PowerShell\Microsoft.PowerShell_profile.ps1

PS C:\Users\cxxu> $PROFILE|select *

AllUsersAllHosts       : C:\Program Files\PowerShell\7\profile.ps1
AllUsersCurrentHost    : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts    : D:\usersByCxxu\DocumentsAll\PowerShell\profile.ps1
CurrentUserCurrentHost : D:\usersByCxxu\DocumentsAll\PowerShell\Microsoft.PowerShell_profile.ps1
Length                 : 71

获取对象属性

  • <object> | select-object *
    • 例如
    • $Profile | Select-Object *

插值@引号和内插@字符串

  • 双引号中可以插值

简单值:

  • $<expression>
  • 这种情况于对已经存在的某个变量的引用
  • 除此之外的表达式应该使用$()来构造内插于字符串部分
    • 例如算数四则运算
    • 对象属性的访问(计算)

简单插值示例

PS D:\repos\blogs> "$PROFILE"
C:\Users\cxxu\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

较复杂值:$()

  • $(). 还可在双引号内编写表达式

  • 通用方式

    • 插值可以嵌套!

    • $(<complex expression>)

  • notes:

    • 单引号无法插值!

示例

  • 例1:

    • PS D:\repos\blogs> "1+1=$(1+1)"
      1+1=2
      
  • 例2:获取当前目录下存在的符号链接

    • function getLinks {
          param (
          )
          $step = (Get-ChildItem | Sort-Object -Property target -Descending | Select-Object name, linktype, target | Where-Object target -ne "")
          Write-Output $step "-------------"
      
          Write-Output "itemsCount: $($step.count)"
      
      }
      

引用对象成员的插值示例

  • PS D:\repos\blogs> "check:$($PROFILE.AllUsersAllHosts)"
    check:C:\Program Files\PowerShell\7\profile.ps1
    

避免插值混淆@界定${}

  • PS D:\repos\blogs> $test = "Bet"
    PS D:\repos\blogs> $tester = "Better"
    PS D:\repos\blogs> Write-Host "$test $tester $testter"
    Bet Better
    PS D:\repos\blogs> Write-Host "$test $tester ${test}ter"
    Bet Better Better
    PS D:\repos\blogs> Write-Host "$test $tester $($test)ter"
    Bet Better Better
    
  • 可以看到,${}用来告诉powershell如何正确解读紧凑的字符序列

  • 他的功能依然可以被$()所替代,但是注意语法:${varName}$($<expression>)

插值小结

  • 其实可以总是使用$()的方式来插值(无论是引用变量还是计算表达式,兼容性最好)

参数

  • 分为脚本参数和函数参数
    • 编写规则大致相同,但是在使用的时候需要注意,函数需要导入(或者说,导入函数所在的模块)
    • 相关文档可以参考模块与脚本部分(而不仅仅时函数编写部分)

参数声明(basic)

param(
	# your  parameter list
)

分配类型:

  • 分配类型。
  • 例如,如果为参数分配类型,你可以指定该参数只接受字符串,而不接受布尔值。
  • 这样,用户就知道了期望结果。 可以在参数前面加上类型(用括号括住),为该参数分配类型:
Param(
 	# the parameter has been set the default parameters
  [string]$Path = './app',
  [string]$DestinationPath = './'
)

参数说明(with parameter[])

  • 实验环境不同,效果可能也不同(在vscode中的powershell插件控制下的PowerShell Integrated Console (v2021.10.2) 就无法使用!?提示`

test code

  • <# the more effective and popular method is to use the parameter[] #>
    Param(
        # to show the helpMessage tips,just type `!?`
        #  Mandatory=$true is optional.
        [Parameter(Mandatory=$true,HelpMessage = "input your valid path(for demonstrate,I will just output to show the path.")]
        # [Parameter(Mandatory, HelpMessage = "Please provide a valid path")] 
        $path
    )
    # the logic of your script,in the script ,I just use it to out put a sentence 
    Write-Output $path
    
    

head.ps1

  • param(
    	[int]$lines=5,
    	[parameter(mandatory, HelpMessage = "input a valid fileName")]
    	$fileName
    	
    )	
    Get-Content $fileName | Select-Object -First $lines 
    

控制流

overview

流控制 - Learn | Microsoft Docs

operators

所有运算符 - PowerShell | Microsoft Docs

overview:

表达式

这是重要的一块内容,在编写where语句高级条件的时候,比较有用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值