调试PowerShell
我不确定这个脚本有什么问题 我正在尝试将功能分解为几个其他功能(我有编程背景,而不是脚本本身),对我来说,逻辑上应该从“main”函数测试SgnedMpsPackage开始执行以下操作,接受各种可选参数(脚本尚未完成)然后,当调用函数检查路径(即运行)时,工作将在原始调用函数中恢复 我是不是遗漏了什么? 另一方面,如何向调用函数返回值?简单的回报调试PowerShell,powershell,Powershell,我不确定这个脚本有什么问题 我正在尝试将功能分解为几个其他功能(我有编程背景,而不是脚本本身),对我来说,逻辑上应该从“main”函数测试SgnedMpsPackage开始执行以下操作,接受各种可选参数(脚本尚未完成)然后,当调用函数检查路径(即运行)时,工作将在原始调用函数中恢复 我是不是遗漏了什么? 另一方面,如何向调用函数返回值?简单的回报 function CheckPath($path) { if ( test-path -Path $path ) { Wri
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'以查看详细输出。您需要编写检查路径$PkgSource
,而不是检查路径($PkgSource)
(不要使用参数调用PowerShell函数)。