下面是使用ADSI一個例子將清除屬性netbootMachineFilePath
。
在這個例子中,我們將首先找到給定域中的計算機對象,然後我們將檢索netbootMachineFilePath的值。如果不清楚,我們將使用第一個參數設置爲1的方法PutEx
,這意味着清除。然後,我們將只保存AD中的修改對象。
function Clear-NetbootMachineFilepath
{
param([Parameter(Mandatory=$true)] [string]$Domain,
[Parameter(Mandatory=$true)] [string]$Computer
)
$obj = $domain.Replace(',','\,').Split('/')
$obj[0].split(".") | ForEach-Object { $domainDN += ",DC=" + $_}
$domainDN = $domainDN.Substring(1)
$ldap = "LDAP://"+ $domainDN
try
{
$search = New-Object System.DirectoryServices.DirectorySearcher([ADSI]($ldap))
$search.Filter = "(&(objectCategory=computer)(cn=$Computer))"
$search.PropertiesToLoad.Add("netbootmachinefilepath") |Out-Null
$result = $search.FindOne()
}
catch
{
write-error $_.Exception.Message
}
$ADS = [string]$result.Properties["adspath"]
$netboot = $result.Properties["netbootmachinefilepath"]
if ($netboot -ne $null)
{
$machine = New-Object System.DirectoryServices.DirectoryEntry $ADS
$machine.PutEx(1,'netbootMachineFilePath', "")
$machine.setinfo()
}
}
Clear-NetbootMachineFilepath mydomain.ad.local testcomputer
編輯
與記錄選項的一些參考:
的DirectoryEntry可以發現here但正如你所說,PutEx和SetInfo沒有記錄都在這裏,對於這一點,你需要看看here和here。
最後,作爲參數傳遞的值爲1,如前所述here。刪除是4
其他編輯
我想我明白這是怎麼回事關於屬性被「刪除」的一部分。 事實上,該屬性並未從AD中刪除,只是在通過搜索機制或通過IADs :: Get和GetEx方法檢索時纔可用。 GetEx實際上會返回The directory property cannot be found in the cache.
該屬性仍然存在,並已清除,您可以通過ADSIEdit查看它。
$machine = New-Object System.DirectoryServices.DirectoryEntry $ADS
$machine.GetEx('netbootMachineFilePath')
這將返回:The directory property cannot be found in the cache.
不過,我可以在屬性中設置的東西回來:
$machine = New-Object System.DirectoryServices.DirectoryEntry $ADS
$machine.Put('netbootMachineFilePath', "Hello World")
$machine.setinfo()
我從上面的代碼清除屬性之後添加了幾行
而這個工程,該屬性更新和ADSIEdit中可見。進一步搜索或調用上面的代碼來清除它,會發現它。
您可以使用[ADSI](http://social.technet.microsoft.com/wiki/contents/articles/4231.working-with-active-directory-using-powershell-adsi-adapter.aspx)適配器代替?使用LDAP搜索對象,然後將該屬性設置爲$ null或某種其他值?爲什麼你需要先清除它,你還在做其他事情嗎? – Matt
我想要做的就是將netbootmachinefilepath設置爲空,就是這樣。我會看看你正在談論的ADSI事情。謝謝。 –
嗨馬特,ADSI也幫不了我。我試着把第一個參數等於1的PutEx清除它,但是刪除了這個屬性。我試圖用2來更新它與一個空字符串,但是會引發異常。 –