我有一個封裝了大量常用業務功能的PowerShell模塊。通常不會從控制檯調用;相反,其功能由導入模塊的自動部署和管理腳本調用。將-Verbose狀態傳遞給模塊cmdlet
該模塊包含一個日誌記錄功能,可寫入中央記錄位置。我也喜歡寫Write-Verbose功能來寫入控制檯。
#'Start Script.ps1
#'----------------
import-module Corporate
Write-Logger 'Foo'
我的限制是 - 從公司PowerShell的模塊內 - 我需要確定是否Script.ps1被稱爲與-Verbose參數。理想情況下,我希望確定代碼完全在模塊本身內。
下面是一個例子:
[CmdletBinding()]
Param()
New-Module -Name TempModule -ScriptBlock {
function Test-ModuleVerbose() {
[CmdletBinding()]
Param()
PROCESS {
$vb = ($PSCmdlet.MyInvocation.BoundParameters['Verbose'] -eq $true)
Write-Host ("1: Module verbose preference: " + ($PSCmdlet.MyInvocation.BoundParameters['Verbose'] -eq $true))
Write-Host ("2: Module verbose preference: " + $Script:VerbosePreference)
Write-Host ("3: Module verbose preference: " + $VerbosePreference)
}
}
} | Out-Null
function Test-Verbose() {
[CmdletBinding()]
Param()
PROCESS {
Write-Host ("Verbose preference: $VerbosePreference")
Test-ModuleVerbose
}
}
Test-Verbose
保存上面test.ps1。從控制檯調用時:
PS C:\temp> .\test.ps1
Verbose preference: SilentlyContinue
1: Module verbose preference: False
2: Module verbose preference:
3: Module verbose preference: SilentlyContinue
PS C:\temp> .\test.ps1 -Verbose
VERBOSE: Exporting function 'Test-ModuleVerbose'.
VERBOSE: Importing function 'Test-ModuleVerbose'.
Verbose preference: Continue
1: Module verbose preference: False
2: Module verbose preference:
3: Module verbose preference: SilentlyContinue
如您所見,$ VerbosePreference變量在模塊中不可用。是否有任何方式從模塊中獲取調用腳本是否已使用-Verbose標誌調用。
您可以爲腳本聲明開關參數,然後根據它的值設置一些全局變量。您也可以設置/取消設置環境變量並在cmdlet中檢查它的值。 – Ievgen