PowerShell 相当于 Unix shell buitin 'type'

PowerShell 相当于 Unix shell buitin 'type'

在 POSIX shell 中工作时,我可以使用内置命令type查看可执行文件、shell 函数、内置命令或别名是如何定义的。

例如,我有一个 shell 函数box,它将在给定的一段文本周围绘制一个 ASCII 框:

$ box "I am the operator of my pocket calculator"
#############################################
# I am the operator of my pocket calculator #
#############################################

我可以看到该函数是如何定义的:

$ type box
box is a function
box ()
{
    t="$1xxxx";
    c=${2:-#};
    echo ${t//?/$c};
    echo "$c $1 $c";
    echo ${t//?/$c}
}

有 PowerShell 等效函数吗?我特别想看看我在 中定义的 PowerShell 函数$profile,以及它们是如何定义的——我一直在使用

type $profile

来显示所有这些,但我想要一些更有针对性的东西。(请注意,PowerShell/Cmd 命令type相当于 Unix cat,并且是没有任何关系type对于我所询问的Unix内置函数。)

答案1

并非每个命令都是一个功能。

为了确定你的命令是否确实是一个函数,请输入:

get-command "name of command"

例如:

PS> get-command box_

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Box

现在我们确定它确实是一个函数,你可以像这样看到该函数的内容:

(get-command box).ScriptBlock

也可以看看:https://www.pdq.com/blog/viewing-powershell-function-contents/

就我个人而言,我将以下内容添加到了我的 Powershell 配置文件中:

cls
write-host -ForegroundColor Cyan "Powershell started with custom functions."
write-host -ForegroundColor Cyan "They are: EditCustomFunctions, name1, name2, etc..."

function EditCustomFunctions
{
    if (!(Test-Path (Split-Path $profile))) { mkdir (Split-Path $profile) } ; if (!(Test-Path $profile)) { New-Item $profile -ItemType file } ; powershell_ise $profile

}

因此,在 Powershell 中,我只需键入 EditCustomFuctions 即可打开 PowerShell ISE 并使用我的配置文件来编辑函数,并且我的自定义欢迎消息会列出我所有的自定义函数。

答案2

我接受了 LPChip 的回答,因为他给了我所需的确切信息;我在这里添加了一个我实际要使用的 PowerShell 函数——它只是一个在打印之前Get-Command进行检查的薄包装器。CommandTypeScriptBlock

function showfunc {
    param($function_name)

    $command=Get-Command "$function_name"
    if ($command.CommandType  -match "Function") { $command.ScriptBlock }
}

相关内容