PowerShell参数和管道的推荐格式

Kol*_*yon 2 parameters powershell formatting arguments structure

以这样的命令为例:

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

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

请提供适用于ISE,简单PowerShell解释器和脚本的示例.

Mat*_*sen 5

当然它很长很长......

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

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

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

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

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

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

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

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

  • Hashtable,不是数组. (2认同)
  • @KolobCanyon不,变量名称前面的`@`是PowerShell如何知道您正在尝试使用splatting并且哈希表不仅仅是一个参数.我已经通过文档链接更新了答案 (2认同)

bri*_*ist 5

您可以使用线条延续字符,这是一个反引号`,如Bryce的答案.

但我根本不喜欢这样.很难看到,使编辑成为一种痛苦,并且总体上很难看.

相反,我建议喷溅.

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

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

Get-ADUser @myParams
Run Code Online (Sandbox Code Playgroud)

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

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

$myParams.Server = Get-MyCustomServer

Get-ADUser @myParams -Verbose
Run Code Online (Sandbox Code Playgroud)

对于管道,只需在|角色后面直接使用换行符.那部分我喜欢很多,我一直都在使用它.

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

Get-ADUser @myParams -Verbose |
    Where-Object -FilterScript {
        $_.SomeProperty -eq $SomeValue
    }
Run Code Online (Sandbox Code Playgroud)