在Powershell中..删除-ADOrganizationalUnit:拒绝访问..如何访问?

时间:2014-05-03 16:13:19

标签: powershell windows-server-2012-r2 powershell-v4.0

我对PowerShell知之甚少。我知道一些cmdlet,但在涉及Active Directory时我感到很茫然。我正在使用Windows Server 2012 R2的测试计算机而且我是管理员。

我使用ISE测试以下命令:

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

它有效。然后我尝试添加一些命令,看看我是否可以扩展我的新知识,但他告诉我有一个错误,因为已经有一个名为" Markedsforing"的组织单位。我没想到ISE会在我保存它之前只运行命令时生成OU。但就这样吧。

通过Get-OrganizationalUnit -Filter我得到了ObjectGUID,我在下一个命令中使用了Remove-OrganizationalUnit,其中我使用了Remove-ADOrganizationalUnit -Identity 5f528fed-51d3-4c79-088a5d7669a7 -Confirm:$False 示例中显示的一个帮助命令。我在PowerShell控制台中这样做。

Remove-ADOrganizationalUnit : Access is denied

我得到的答案如下:

-whatif

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

问题1 :我是否也必须在ISE中使用-ProtectedFromAccidentaldeletion $false,以便ISE在我完成尝试之前不会继续进行操作我的命令?

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

我下次会忽略-Recursive。 我也试过了Remove-ADOrganizationalUnit -Identity 5f528fed-51d3-4c79-088a5d7669a7 -Confirm:$False -Recursive

{{1}}

我希望在使用本网站前更进一步。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:0)

PowerShell是PowerShell,无论您使用的是ISE控制台还是ConsoleHost。如果您只想“模拟”cmdlet,则可以使用-WhatIf参数。如果你想默认将WhatIf“打开”,请运行

$WhatIfPreference = $true

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

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

答案 1 :(得分:0)

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

问题2:在删除OU之前,您需要取消保护OU,例如:

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

然后运行Remove-ADOrganizationalUnit cmdlet。

答案 2 :(得分:0)

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

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

运行:

Get-Help Remove-ADOrganizationalUnit -Full

将“身份”片段提供给我以下帮助信息:

-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以验证它已消失。

希望这有助于某人!