1

我对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:我是否也必须-whatif在 ISE 中使用,以便 ISE 不会在我尝试完成命令之前继续执行操作?

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

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

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

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

4

3 回答 3

1

Re Question 1 - what @Frode F. said( further explained here: http://www.computerperformance.co.uk/powershell/powershell_whatif_confirm.htm)

Re Question 2: you need to un-protect the OU before deleting it, in your example:

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

then run Remove-ADOrganizationalUnit cmdlet.

于 2014-05-05T10:10:20.610 回答
0

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

$WhatIfPreference = $true

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

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

于 2014-05-04T09:33:52.720 回答
0

您可以在一个语句中将“ProtectedFromAccidentalDeletion”设置为 false 并删除/删除组织单位(在 Windows Server 2008 R2 上使用主机版本 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 以确认它已消失。

希望这对某人有帮助!

于 2015-02-27T19:27:17.367 回答