繁体   English   中英

调试PowerShell

[英]Debugging PowerShell

我不确定此脚本有什么问题。

我试图将功能分解为其他几个功能(我本身具有编程背景而不是脚本本身),并且对我来说,以下逻辑应该从“主要”功能Test-SgnedMpsPackage开始执行,接受各种可选参数(如果脚本尚未完成),则当调用Check-Path函数(即运行)时,工作将在原始调用函数中恢复。

我在这里想念什么吗? 附带说明一下,如何将一个值返回给调用函数? 简单的回报?

function CheckPath($path)
{
    if ( test-path -Path $path ) 
        { Write-Host "{0} confirmed to exist." -f $path }
    else
        { Write-Host "{0} DOES NOT exis.\nPlease check and run the script again" -f $path }
    exit { exit }
}


function Test-SignedMpsPackage 
{
    Param(
        [string] $PkgSource,
        [string] $SigSource,
        [string] $Destination
    )
    Process
    {

        #Check that  both files exist
        Write-Host "Check for file existence..."


        CheckPath($PkgSource)
        CheckPath($SigSource)

        #retrieve signatures from file
    }
}

与C,C ++或C#不同,没有“主”入口点函数。 任何在函数外部的顶级脚本都将执行。 您已经在上面定义了两个函数,但是尚未调用任何一个。 您需要执行以下操作:

function Test-SignedMpsPackage 
{
    ...
}

Test-SignedMpsPackage params

同样,正如@Bill_Stewart所提到的那样,您就像调用PowerShell命令一样调用已定义的函数-参数之间用空格分隔,并且不使用括号,而是在括号内计算表达式。

至于从函数返回值,未通过分配给变量或未重定向到文件而捕获的任何输出(输出流)将自动成为函数输出的一部分。 所以我将修改您的CheckPath函数:

function CheckPath($path)
{
    if (Test-Path -Path $path) { 
        Write-Verbose "{0} confirmed to exist." -f $path 
        $true
    }
    else { 
        Write-Verbose "{0} DOES NOT exist.\nPlease check and run the script again" -f $path 
        $false
    }
}

您可以像以前一样使用Write-Host,但是有时,也许在脚本中,您不想看到额外的输出。 这就是Write-Verbose派上用场的地方。 设置$ VerbosePreference ='Continue'可以看到详细的输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM