[英]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.