【问题标题】:In Powershell.. Remove-ADOrganizationalUnit : Access is denied ..How do I get access?在 Powershell 中.. Remove-ADOrganizationalUnit:访问被拒绝..我如何获得访问权限?
【发布时间】:2014-06-20 05:49:44
【问题描述】:

我对 PowerShell 知之甚少。我知道一些 cmdlet,但在涉及 Active Directory 时我不知所措。我正在使用装有 Windows Server 2012 R2 的测试计算机,我是管理员。

我使用 ISE 测试了以下命令:

New-ADOrganizationalUnit -Name "Markedsforing" -Path "DC=testdomene,DC=local" -ProtectedFromAccidentaldeletion $false

它奏效了。然后我尝试添加一些命令,看看我是否可以扩展我的新知识,但他 ISE 告诉我有一个错误,因为已经有一个名为“Markedsforing”的组织单元。在我保存命令之前,我不认为 ISE 会继续运行该命令并创建该 OU。但就这样吧。

通过Get-OrganizationalUnit -Filter,我得到一个ObjectGUID,我在下一个命令中使用它,在这里我使用Remove-OrganizationalUnit 示例中显示的帮助命令之一。我在 PowerShell 控制台中执行此操作。

Remove-ADOrganizationalUnit -Identity 5f528fed-51d3-4c79-088a5d7669a7 -Confirm:$False

我得到的答案如下:

Remove-ADOrganizationalUnit : Access is denied

我无法在 PowerShell 中找到它......也无法在图形界面中找到它。

问题 1:我是否也必须在 ISE 中使用-whatif,这样 ISE 才不会在我完成命令之前继续执行操作?

问题 2:我如何摆脱我的 OU 标记分叉。在服务器中,我已经是管理员了。

下次我当然会省略-ProtectedFromAccidentaldeletion $false。 我也试过-Recursive

Remove-ADOrganizationalUnit -Identity 5f528fed-51d3-4c79-088a5d7669a7 -Confirm:$False -Recursive

我希望在使用这个网站之前能走得更远。任何帮助表示赞赏。

【问题讨论】:

  • @Raf 是的,我确实需要在删除 OU 之前取消保护它。当我使用 -ProtectedFromAccidentalDeletion $false 制作我的 New-ADOrganizationalUnit 时,我认为我使它不受保护,如我的第一个代码所示。我一定是在应用时犯了一个错误。我最终使用 GUI 来禁用保护,但我看到你使用了 PowerShell。我新必须有一种方法可以做到这一点,但我从未想过在运行“Remove-ADOrganizationUnit”之前使用“Get”并将其通过管道传输到“Set”。我每天都学到新东西。谢谢。
  • @FrodeF 我从未想过将 $WhatIfPreference = $true 放在脚本的开头。误解 ISE 的原因很可能是我使用它来尝试检索信息的不同 cmdlet,而不是用于进行更改的 cmdlet。现在我明白了。谢谢。

标签: powershell windows-server-2012-r2 powershell-4.0


【解决方案1】:

关于问题 1 - @Frode F. 所说的(此处进一步解释:http://www.computerperformance.co.uk/powershell/powershell_whatif_confirm.htm

关于问题 2:您需要在删除 OU 之前取消保护它,在您的示例中:

get-ADOrganizationalUnit -Identity "OU=Markedsforing,DC=testdomene,DC=local" | 
    set-ADOrganizationalUnit –ProtectedFromAccidentalDeletion $false

然后运行Remove-ADOrganizationalUnit cmdlet。

【讨论】:

    【解决方案2】:

    PowerShell 就是 PowerShell,无论您使用 ISE 控制台还是 ConsoleHost。如果您只想“模拟”一个 cmdlet,可以使用-WhatIf 参数。如果你想保持 WhatIf “on” 作为默认值,运行

    $WhatIfPreference = $true
    

    在您的会话或脚本开始时。要在以后实际运行脚本时覆盖它,请将其设置为 false 或将-WhatIf:$false 添加到支持-WhatIf 的每个命令中。您还可以选择使用-Confirm,它会在每个操作之前询问是/否(例如,创建新的 OU)。

    至于您的Access Denied-问题。您是使用New-ADOrganizationalUnit 创建Markedsforing 还是已经存在?可以使用dsa.mmc GUI 删除 OU 吗? PowerShell cmdlet 使用 GUI 使用的相同 AD 权限。因此,如果您将 PowerShell 控制台作为您的管理员帐户运行,那么这似乎是 AD 中的权限问题。

    【讨论】:

      【解决方案3】:

      您可以在一个语句中将“ProtectedFromAccidentalDeletion”设置为 false 并删除/删除组织单位(在 Windows Server 2008 R2 上使用 Host 4.0 版进行测试和工作):

      首先您需要确定“distinguishedName”或“objectGUID”,因为 remove-adorganizationalunit cmdlet 仅支持用于删除对象的那些。

      跑步:

      Get-Help Remove-ADOrganizationalUnit -Full
      

      使用“身份”的 sn-p 可以得到以下帮助信息:

      -Identity <ADOrganizationalUnit>
              Specifies the identity of an Active Directory organizational unit object. The parameter accepts the following identity formats. The identifier in parentheses is the LDAP display name 
              for the attribute that contains the identity.
      
                Distinguished Name 
                  Example:  OU=Europe,CN=Users,DC=corp,DC=contoso,DC=com
                GUID (objectGUID) 
                  Example: 599c3d2e-f72d-4d20-8a88-030d99495f20 
      
              The cmdlet searches the default naming context or partition to find the object. If two or more objects are found, the cmdlet returns a non-terminating error. 
      
              This parameter can also get this object through the pipeline or you can set this parameter to an object instance. 
      
              This example shows how to set the parameter to a distinguished name.
      -Identity  "OU=Europe,CN=Users,DC=corp,DC=contoso,DC=com"
      
              This example shows how to set this parameter to an organizational unit object instance named "OUinstance".
                -Identity   $OUInstance
      
              Required?                    true
              Position?                    1
              Default value                
              Accept pipeline input?       true (ByValue)
              Accept wildcard characters?  false
      

      知道了“objectGUID”,我更喜欢使用什么,我现在可以删除 OU:

      Get-ADOrganizationalUnit -Filter * -SearchBase "OU=TestOU,DC=MYDOMAIN,DC=COM" -SearchScope OneLevel | Where-Object {$_.objectGUID -eq "c18ff7dc-3177-44eb-896a-5c79cab7ef23"} | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $false | Remove-ADOrganizationalUnit
      

      请注意确保您在 OU 结构中的正确级别进行搜索,这是一个常见错误。

      最后很遗憾,没有“PassThru”参数,因此您必须再次执行 get-adorganizationalUnit 命令来查找刚刚删除的 OU 以确认它已消失。

      希望这对某人有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 2014-06-20
        • 2014-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多