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