改进代码以在PowerShell中使用可选开关参数

改进代码以在PowerShell中使用可选开关参数,powershell,powershell-3.0,Powershell,Powershell 3.0,我有一个Powershell函数,它包装调用WebRequest。 根据参数$verbose的值,我想使用-verbose或not 我使用API编写的代码完成了这项工作。。。但我觉得应该有一种更好的方法,减少代码行数。使用调用WebRequest的两倍行感觉是错误的 所以我的问题是:在Powershell中是否有处理交换机参数的最佳方法? 以下是函数: 函数调用MarkLogicManagementAPI($server、$apiFolder、$adminCredentials、$HTTPme

我有一个Powershell函数,它包装调用WebRequest。 根据参数$verbose的值,我想使用-verbose或not

我使用API编写的代码完成了这项工作。。。但我觉得应该有一种更好的方法,减少代码行数。使用调用WebRequest的两倍行感觉是错误的

所以我的问题是:在Powershell中是否有处理交换机参数的最佳方法?

以下是函数:

函数调用MarkLogicManagementAPI($server、$apiFolder、$adminCredentials、$HTTPmethod、$body、$verbose)
{
$resp1HTTPCode=“未设置”
尝试
{
$uri=“http://$($server):8002/manage/v2/$apipfolder”
if($verbose-eq$true)
{
$resp1=调用WebRequest-Uri$Uri-Body$Body-Method“$HTTPmethod”-凭证$adminCredentials-ContentType“application/json”-错误操作SilentlyContinue-详细
}
其他的
{
$resp1=Invoke WebRequest-Uri$Uri-Body$Body-Method“$HTTPmethod”-凭证$adminCredentials-ContentType“application/json”-ErrorAction SilentlyContinue
}
$resp1HTTPCode=$resp1.StatusCode
}
捕获[例外]
{
$resp1HTTPCode=$\异常.Response.StatusCode.Value__
}
返回$resp1HTTPCode
}

是,可以将布尔值传递给开关参数。就你而言:

-Verbose:$Verbose
例如:

函数DoSomething
{
[CmdletBinding()]
Param()
写详细的“输出”
}
DoSomething-verbose:$true#写入输出
DoSomething-详细:$false#无输出

因为您的问题涉及冗长,所以使用
[CmdletBinding()]
是一种解释这种差异的简单方法。我还想介绍一下,这是一种很好的方法,可以向cmdlet传递不同数量的参数,而不必实际写出每个命令

函数获取百吉饼{
[CmdletBinding()]
Param(
[参数(必需=$True)]
[字符串]$Filter,
[开关]$Recurse=$false,
[开关]$FilesOnly
)
$parameters=@{
过滤器=$Filter
Recurse=$Recurse
}
如果($filesonly){$parameters.File=$True}
获取ChildItem@parameters
}
一个非常简单的例子是创建一个hashtable
$parameters
并添加我们想要传递给
Get ChildItem
的参数。我展示了填充该表的两种方法,值得注意的是,您可以看到文件开关有条件地添加了一个小的
if

这样,无论使用什么参数,cmdlet调用每次都是相同的

因此,下面的函数调用将起作用

Get-Bagels -Filter "*.txt"
Get-Bagels -Filter "*.txt" -Recurse
Get-Bagels -Filter "*.txt" -FilesOnly
Get-Bagels -Filter "*.txt" -Recurse:$False -FilesOnly

@cad请注意,指定
-Verbose:$false
与省略
-Verbose
开关不同。@PetSerAl从我的头上往下看,我无法理解其含义。。。。你能详细说明一下吗?或者你有参考资料吗?@Matt运行以下命令:
$VerbosePreference='Continue';编写详细的Test1;编写详细测试2-详细:$false
-Verbose:$false
显式禁用详细输出,而省略
-Verbose
表示使用默认设置。