【问题标题】:Powershell: If else help: user is member of group functionPowershell:如果有帮助:用户是组功能的成员
【发布时间】:2018-02-22 17:13:32
【问题描述】:

我的目标是运行一个 powershell 脚本来查看当前用户是否是某个组的成员。如果用户是成员,那么它将更改文件的内容。如果没有,它就会退出。我只是运行它,并没有对我的文件进行更改。

我知道这 2 个单独的脚本分别按广告宣传的那样工作。我需要帮助确定为什么当我组合它们时它没有给我想要的结果,因为没有错误消息:

 Import-Module ActiveDirectory

 $group = "The Beatles"
 $members = Get-ADGroupMember -Identity $group -Recursive | Select -ExpandProperty Name

if($members -contains $ENV:USERNAME)
{
    $File = "\\server\folder\$($Env:USERNAME)\File.reg"
    $Content = Get-Content -Path $File | 
    ForEach-Object {
        $_ -replace 'peter best',$ENV:USERNAME
    } 
    Set-Content -Path $File -Value $Content  
}
else
{
    Exit
}

我将 if 括号的内容替换为:Write-Host "WINNER WINNER!"它仍然没有做任何事情。但是,如果我用 for 替换 if 并消除 else 部分,它会吐出“WINNER WINNER!”。我的猜测是,我对如何在 If 大括号内执行代码的语法或理解是罪魁祸首。

如何获得想要的结果?

感谢您的意见。

谢谢,

维克多

【问题讨论】:

  • 您是否确保$members 包含与$ENV:USERNAME 相同形式的对象?可能需要一些翻译。

标签: powershell windows-7


【解决方案1】:

Active Directory Name 属性值不太可能与用户名相同(即,您可能是“Victor Antifries”,但您的用户名可能是“v.antifries”或“victor01”)。

您可能想要获取 SAMAccountName 属性:

$members = Get-ADGroupMember -Identity $group -Recursive | Select -ExpandProperty SAMAccountName

【讨论】:

  • 感谢您的意见。我做了建议的改变。还是和以前一样。
  • @VictorAntifries 检查$members 值的简单方法:$members |%{'"{0}"' -f $_} - 您应该看到用双引号括起来的每个值(这样更容易发现尾随空白)
  • 谢谢你,马蒂亚斯。我不知道这意味着什么或如何让它发挥作用,但我知道它很有价值。
  • @VictorAntifries 只需将整个 if/else 块替换为 $members |%{'"{0}"' -f $_},再次运行脚本,然后查看写入屏幕的内容。应该告诉你为什么它不工作
  • 它仍然没有编辑 reg 文件,但我想说感谢您的后续评论。我能够使用它。
猜你喜欢
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多