Active-Directory
如何在不進行類型轉換和拆分的情況下直接使用 powershell 對象屬性?
我創建了一個小腳本來將名為 pssfulllocation 的 Active Directory pc 屬性的值從一台 pc 傳輸到另一台 pc。
為了實現這一點,我必須使用類型轉換+拆分..
這是有效的腳本
$oldpc=read-host "Enter old pc name" $newpc=read-host "Enter new pc name" $my=Get-ADComputer -Identity $oldpc -Properties * | select pssfulllocation $itemcast=[string]$my $b = $itemcast.Split("=")[1] $c=$b.Split("}")[0] Set-ADComputer -identity $newpc -Replace @{pSSFullLocation="$c"}
並且輸出將很好地完成預期的工作..以這種方式..這是預期的結果..
但是,如果我不按照以下腳本使用類型轉換+拆分-
$oldpc=read-host "Enter old pc name" $newpc=read-host "Enter new pc name" $my=Get-ADComputer -Identity $oldpc -Properties * | select pssfulllocation Set-ADComputer -identity $newpc -Replace @{pSSFullLocation="$my"}
輸出在下面..這不是我想要的..
簡而言之,如果我不使用類型轉換 + 拆分輸出將添加為 @{pSSFullLocation=C/BRU/B/0/ADM/1 但它只能添加為 C/BRU/B/0/ADM/1按照這個:
我覺得類型轉換 + 拆分應該是一種解決方法,而不是正確的方法。. 任何其他 powershell 方法可以在不使用類型轉換 + 拆分的情況下實現這一目標?
不要這樣做:
$my=Get-ADComputer -Identity $oldpc -Properties * | select pssfulllocation
您不要
Select-Object
訪問屬性的值。請注意cmdlet 名稱中的-Object
,而不是。-Attribute
相反,收集返回的對象,Get-AdComputer
然後直接使用該屬性。$my = Get-ADComputer -Identity $oldpc -Properties * $psfl = $my.pSSFullLocation Set-ADComputer -identity $newpc -Replace @{pSSFullLocation="$psfl"}
甚至這也可以完成**“-expandproperty”的工作**
$oldpc=read-host "Enter old pc name" $newpc=read-host "Enter new pc name" $my=Get-ADComputer -Identity $oldpc -Properties * | select -expandproperty pssfulllocation Set-ADComputer -identity $newpc -Replace @{pSSFullLocation="$my"}