推荐的PowerShell参数格式和&管道

时间:2017-10-25 17:18:38

标签: powershell parameters formatting arguments structure

以这样的命令为例:

Get-AdUser -Filter {Enabled -eq $true} -Credential (Get-Credentials) -Server some.server.domain.com | Where-Object {DisplayName -like '*Reemer, Bob*'}

当然它是粗略的,很长的并且不在屏幕上...在多行上分割它的首选方法是什么?(以提高可读性)?

请举例说明适用于ISE,普通的PowerShell解释器和脚本。

3 个答案:

答案 0 :(得分:5)

  

当然是长篇大论......

对我来说这看起来很好,但是如果你想要更短的线条,我建议splatting

$ADUserParams = @{
  Filter = {Enabled -eq $true}
  Credential = (Get-Credential) 
  Server = 'some.server.domain.com'
}
Get-ADUser @ADUserParams | Where-Object {DisplayName -like '*Reemer, Bob*'}

您还可以将Where-Object过滤器脚本块拆分为多行:

Get-ADUser -Filter {Enabled -eq $true} -Credential (Get-Credentials) -Server some.server.domain.com | Where-Object {
  DisplayName -like '*Reemer, Bob*'
}

如果您总是重复使用相同的参数值,您也可以使用$PSDefaultParameterValues

$PSDefaultParameterValues['*-AD*:Server'] = 'some.server.domain.com'
Get-ADUser -Filter {Enabled -eq $true} -Credential (Get-Credentials) | Where-Object {DisplayName -like '*Reemer, Bob*'}

当然,你可以将所有这些结合起来:

$PSDefaultParameterValues['*-AD*:Server'] = 'some.server.domain.com'
$ADUserParams = @{
  Filter = {Enabled -eq $true}
  Credential = (Get-Credential) 
}
Get-ADUser @ADUserParams | Where-Object {
  DisplayName -like '*Reemer, Bob*'
}

答案 1 :(得分:5)

您可以使用换行符`作为回调符Bryce's answer

但我完全不喜欢这样。很难看到,使编辑成为一种痛苦,而且整体上很难看。

相反,我推荐splatting

这使您可以动态定义参数,并更好地格式化哈希表,使您的函数/ cmdlet调用更好,更整洁:

$myParams = @{
    Filter = { Enabled -eq $true }
    Credential = (Get-Credential)
    Server = 'some.server.domain.com'
}

Get-ADUser @myParams

请注意,您可以在调用之前多次修改哈希表,并且可以将splatting与各个参数结合使用。

$myParams = @{
    Filter = { Enabled -eq $true }
    Credential = (Get-Credential)
}

$myParams.Server = Get-MyCustomServer

Get-ADUser @myParams -Verbose

对于管道,只需在|字符后直接使用换行符。那部分我很喜欢,我一直都在使用它。

您也可以在scriptblock中使用换行符,因此您也可以使用很好的分离选项。

Get-ADUser @myParams -Verbose |
    Where-Object -FilterScript {
        $_.SomeProperty -eq $SomeValue
    }

答案 2 :(得分:1)

您可以使用反引号将单行命令拆分为多行。您的命令最终可能如下所示:

Get-ADUser -Filter {Enabled -eq $true} `
    -Credential (Get-Credential) `
    -Server some.server.domain.com | 
    Where-Object {DisplayName -like '*Reemer, Bob'}

从技术上讲,反引号是一个转义字符,在这种情况下,我们将转义回车符。反引号也可用于其他情况。