检测脚本函数中是否发生错误的最佳方法是什么?我正在寻找一种一致的方式来指示类似于$的错误/成功状态?(仅适用于cmdlet,而不适用于脚本函数).
给定特定函数可能返回调用者要使用的值,我们不能通过返回布尔值来指示成功.函数可以使用[ref]参数并在函数内部设置适当的值并在调用后进行检查,但这比我想要的开销更大.我们可以使用PowerShell内置的东西吗?
我能想到的最好的是:
例如:
function MyFun {
[CmdletBinding()] # must be an advanced function or this
param () # will not work as ErrorVariable will not exist
process {
# code here....
if ($SomeErrorCondition) {
Write-Error -Message "Error occurred; details..."
return
}
# more code here....
}
}
# call the function
$Err = $null
MyFun -ErrorVariable Err
# this check would be similar to checking if $? -eq $false
if ($Err -ne $null) {
"An error …Run Code Online (Sandbox Code Playgroud) 确保PowerShell函数名称唯一的最佳方法是什么?从版本1开始的标准是在动词破折号之后和名词之前输入一个简短的唯一ID.例如,使用我的首字母缩写,我可以创建函数Get-DWServer; 这是好的,直到有人在不同的模块中创建一个函数来获取对数据仓库的对象引用并使用相同的函数名称.两三个字母是不够的,但更难以阅读.
我更喜欢有一个类似于.NET命名空间的唯一前缀*.这对组织来说更好,更容易看到并且可以使用标签完成.并且它可以优雅地扩展,因此您可以将其命名为DW.Get-Server或DW.Network.Get-Server.
这样做的缺点是它在模块导入/导出模块成员期间与PowerShell的正确动词检查相冲突.您可以通过在导入期间指定DisableNameChecking来解决这个问题,但我想知道如果这样做很草率,如果PowerShell 3提供更好的解决方案可能会很糟糕.我知道PS动词纯粹主义者(有没有?)会抱怨这可能"阻碍发现"但我想不出更好的选择.
你是做什么?
(*您可以使用module_name\function_name表示法引用导出的函数,但这不适用于制表符完成,但仍然无法解决函数名称唯一的问题).
尝试在SharePoint 2010中启用自定义功能时,我收到的异常无法在PowerShell v2中以编程方式捕获,捕获或检测到.我知道错误是什么以及如何在Central Admin中修复它但我很困惑PowerShell部署脚本无法识别此错误情况.
# This correctly gets the site and feature:
PS C:\> $Error.Clear()
PS C:\> $SiteUrl = 'http://thesite'
PS C:\> $FeatureId = 'D3BF12C5-D342-4F8A-8E86-BB4308699359'
PS C:\> $Site = Get-SPSite | Where { $_.Url -eq $SiteUrl }
PS C:\> $Feature = Get-SPFeature | Where { $_.Id.ToString() -eq $FeatureId }
# But this line produces the error information below it in the console window - in plain color, not red:
PS C:\> $Feature | Enable-SPFeature -url $SiteUrl
Source: Microsoft.Office.Server.UserProfiles
Message: Users …Run Code Online (Sandbox Code Playgroud)