Powershell语句的含义

时间:2019-02-12 03:02:58

标签: powershell

我对Powershell完全陌生,我试图了解这段代码的作用:

$OwnFunctionsDir = "$env:USERPROFILE\Documents\WindowsPowerShell\Functions"
Write-Host "Loading own PowerShell functions from:" -ForegroundColor Green
Write-Host "$OwnFunctionsDir" -ForegroundColor Yellow
Get-ChildItem "$OwnFunctionsDir\*.ps1" | %{.$_}
Write-Host ''

尤其是我无法解释行Get-Children …的作用。该代码旨在添加到您的Powershell配置文件中,以在Powershell启动时加载常用功能。

1 个答案:

答案 0 :(得分:2)

简短回答

此命令将“ \ Documents \ WindowsPowerShell \ Functions”中所有“ .ps1”文件的内容加载到您的工作会话中。

长答案

首先,$env:USERPROFILE是与您的主目录相对应的环境变量。所以在我的情况下是“ c:\ users \ jboyd”

第一个有趣的代码是:

$OwnFunctionsDir = "$env:USERPROFILE\Documents\WindowsPowerShell\Functions"

这会将字符串分配给名为OwnFunctionsDir的新变量。此字符串的有趣之处在于,它用双引号引起来,并且包含变量$env:USERPROFILE。 PowerShell会在双引号字符串中扩展变量(单引号字符串则不是这种情况)。因此,如果它在我的计算机上运行,​​则$OwnFunctionsDir的值应为“ c:\ users \ jboyd \ Documents \ WindowsPowerShell \ Functions”。

跳过Write-host函数(因为我认为它们很容易解释)使我们能够:

Get-ChildItem "$OwnFunctionsDir\*.ps1" | %{.$_}

Get-ChildItem很有趣,因为它的行为取决于PowerShell提供程序(不必担心它是什么),但是在这种情况下,Get-ChildItem相当于dir或{{1 }}。 ls是要枚举的路径。以我的机器为例,这等效于在目录“ c:\ users \ jboyd \ Documents \ WindowsPowerShell \ Functions”中列出所有名称与通配符模式“ * .ps1”匹配的文件(基本上是所有PowerShell文件)。

$OwnFunctionsDir\*.ps1字符将左侧命令的结果传递到右侧命令。

|字符是%命令的别名。左右花括号是一个脚本块,这是foreach命令的正文。因此,ForEach-Object中的每一项都通过管道传递到脚本块中。

Get-ChildItem命令的脚本块中,ForEach-Object变量表示当前正在处理的项目。在这种情况下,$_将是一个扩展名为“ .ps1”的PowerShell文件。当我们调用PowerShell文件时,文件前带有句点,即点源。点源将文件的内容加载到您的工作会话中。因此,将加载文件中的所有变量或函数。