我对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}}
我希望在使用本网站前更进一步。任何帮助表示赞赏。
答案 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以验证它已消失。
希望这有助于某人!