我对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启动时加载常用功能。
答案 0 :(得分:2)
此命令将“
首先,$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文件时,文件前带有句点,即点源。点源将文件的内容加载到您的工作会话中。因此,将加载文件中的所有变量或函数。