簡體   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