Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是PowerShell中的错误吗?_Powershell - Fatal编程技术网

这是PowerShell中的错误吗?

这是PowerShell中的错误吗?,powershell,Powershell,我注意到PowerShell中有一些奇怪的行为。我已经在PowerShell 2和PowerShell 4中验证了我认为是错误的行为。这真的是一个bug还是我做错了什么 以下面的片段为例。其思想是简单地遍历组名列表(字符串数组),并告诉我每个组中有多少成员: Foreach($ADGroupName In [String[]]'Domain Admins', ` 'Enterprise Admins', `

我注意到PowerShell中有一些奇怪的行为。我已经在PowerShell 2和PowerShell 4中验证了我认为是错误的行为。这真的是一个bug还是我做错了什么

以下面的片段为例。其思想是简单地遍历组名列表(字符串数组),并告诉我每个组中有多少成员:

Foreach($ADGroupName In [String[]]'Domain Admins',     `
                                  'Enterprise Admins', `
                                  'Administrators',    `
                                  'Account Operators', `
                                  'Backup Operators')
{
    $Group = Get-ADGroup -Filter { Name -EQ $ADGroupName } -Properties Members
    If ($Group -EQ $Null -OR $Group.PropertyNames -NotContains 'Members')
    {
        # This only happens on the first iteration of the loop!
        Write-Error "$ADGroupName was null or was missing the Members property!"
    }
    Else
    {
        Write-Host "$ADGroupName contains $($Group.Members.Count) members." 
    }
}
在循环的第一次迭代中,我得到了错误,因为$Group是$null,因此没有正确地包含任何成员,尽管命令和组名都是有效的,并且组中有成员。通过循环的后续迭代工作正常。但列表中的第一组是什么并不重要。我可以对组重新排序,但它总是在字符串数组的第一个元素上返回错误

为了暂时解决这个问题,我只是将“DummyGroup”作为数组的第一个元素,并优雅地处理预期的异常,然后列表中的其他所有组都可以正常工作


有没有更好的方法来处理看似是bug的问题?

不知道您是否真的会将其称为“bug”,但这是由于在脚本块过滤器中使用变量造成的。如果更改为使用带有可扩展字符串的字符串筛选器,则变量扩展将按预期工作:

Foreach($ADGroupName In [String[]]'Domain Admins',     `
                                  'Enterprise Admins', `
                                  'Administrators',    `
                                  'Account Operators', `
                                  'Backup Operators')
{
    $Group = Get-ADGroup -Filter "Name -EQ '$ADGroupName'" -Properties Members
    If ($Group -EQ $Null -OR $Group.PropertyNames -NotContains 'Members')
    {
        # This only happens on the first iteration of the loop!
        Write-Error "$ADGroupName was null or was missing the Members property!"
    }
    Else
    {
        Write-Host "$ADGroupName contains $($Group.Members.Count) members." 
    }
}

不知道您是否真的将其称为“bug”,但它是由在脚本块过滤器中使用变量引起的。如果更改为使用带有可扩展字符串的字符串筛选器,则变量扩展将按预期工作:

Foreach($ADGroupName In [String[]]'Domain Admins',     `
                                  'Enterprise Admins', `
                                  'Administrators',    `
                                  'Account Operators', `
                                  'Backup Operators')
{
    $Group = Get-ADGroup -Filter "Name -EQ '$ADGroupName'" -Properties Members
    If ($Group -EQ $Null -OR $Group.PropertyNames -NotContains 'Members')
    {
        # This only happens on the first iteration of the loop!
        Write-Error "$ADGroupName was null or was missing the Members property!"
    }
    Else
    {
        Write-Host "$ADGroupName contains $($Group.Members.Count) members." 
    }
}

当mjolinor修正了错误时;为了练习PowerShell的乐趣,我重写了一点,删除了错误检查

  • 您可以使用
    @()
    生成组名数组,而不需要反勾线继续
  • 您可以调用
    Get ADGroup$ADGroupName-Properties Members
    ,而无需过滤器
  • 或者,您可以通过管道将阵列馈送到Get-ADGroup,并在一次操作中返回多个组
e、 g


当mjolinor修正了错误时;为了练习PowerShell的乐趣,我重写了一点,删除了错误检查

  • 您可以使用
    @()
    生成组名数组,而不需要反勾线继续
  • 您可以调用
    Get ADGroup$ADGroupName-Properties Members
    ,而无需过滤器
  • 或者,您可以通过管道将阵列馈送到Get-ADGroup,并在一次操作中返回多个组
e、 g


吸取教训,谢谢。有时很难记住何时使用脚本块以及何时使用字符串,尤其是在AD cmdlet中。看起来不同的cmdlet处理它们的方式不同,您只需记住它们的特性。如果他们不希望我使用ScriptBlock,那么他们应该将其标记为语法错误。>_吸取教训,谢谢。有时很难记住何时使用脚本块以及何时使用字符串,尤其是在AD cmdlet中。看起来不同的cmdlet处理它们的方式不同,您只需记住它们的特性。如果他们不希望我使用ScriptBlock,那么他们应该将其标记为语法错误。>_